ArrayList는 List의 자료형 중 하나로 배열[ ]과 비슷하지만 다르다.
둘의 차이는 배열은 길이가 고정적인 반면, ArrayList는 길이가 유동적이라는 것이다.
ArrayList : 새로 데이터를 추가하거나 중간에 있는 데이터를 삭제해도 밀고 당기며 길이를 유동적으로 조절한다.
ArrayList<type> 변수명 = new ArrayList<>();
변수명.add(추가할 데이터1);
변수명.add(추가할 데이터2); ...
★ ArrayList 사용시에는 꼭 java.util.ArrayList을 import 해주어야 사용이 가능!
Generics의 사용법 : < type >
ArrayList<type> 변수명 = new ArrayList<type>();
ex) ArrayList<String> data = new ArrayList<String>();
ArrayList 안에는 String만 들어갈 수 있다는 뜻으로 위와 같이 사용이 가능하다.
제네릭을 사용하지 않으면 안에 추가되는 모든 객체는 최상위 클래스인 Object type로 저장이 된다.
따라서 값을 가져올 때마다 형변환을 해줘야 하고, 다른 type의 객체가 들어갈 수도 있기 때문에
타입을 명시해주는 제네릭을 사용하여 이런 불편함을 해소할 수 있다!
< 제네릭 미반영 >
ArrayList list = new ArrayList();
list.add("string");
String v = (String)list.get(0); //Object타입의 객체 반환이라 형변환 명시
System.out.println(list.toString());
< 제네릭 반영 >
ArrayList<String> list = new ArrayList<String>();
list.add("string");
System.out.println(list.toString());
데이터의 추가는 add 메서드를 이용하면 된다.
메서드를 이용해서 "데이터1","데이터2","데이터3"을 추가해보자.
ArrayList<String> data = new ArrayList<String>();
data.add("데이터1");
data.add("데이터2");
data.add("데이터3");
ArrayList에서 원하는 값을 출력하려면 get 메서드를 이용할 수 있다.
두번째에 있는 "데이터2"를 출력해보자.
System.out.println(data.get(1)); //자바는 길이를 0부터 센다.
출력 : 데이터2
ArrayList의 전체 길이를 출력하고 싶을 때는 size 메서드를 이용하면 된다.
data의 전체 길이를 출력해보자.
System.out.println(data.size());
출력 : 3
데이터를 삭제하고 싶을 때는 remove 메서드를 이용한다.
방금 출력해본 "데이터2"를 삭제하려면 해당 문장을 추가하면 된다.
data.remove(1);
중간에 있는 데이터를 삭제했으니 이제 전체 길이는 2, 두번째 데이터를 출력하면 "데이터3"이 나와야 한다.
위에서 사용한 get 메서드와 size 메서드를 이용해 ArrayList 길이가 유동적으로 변화한 것을 확인해보자.
System.out.println(data.get(1));
System.out.println(data.size());
출력 : 데이터 3, 2
배열의 길이는 2, 두번째 값으로 "데이터3"이 오면서 중간에 빈자리가 생기지 않게 당겨온 것을 확인할 수 있다.
이번에는 배열의 0번째에 새로운 데이터인 "데이터 10"을 추가하고 다시 1번째 데이터를 출력해보자.
data.add(0, "데이터10");
System.out.println(data.get(1));
출력 : 데이터1
기존에 0번째로 저장된 "데이터1"이 뒤로 밀리면서 출력된 것을 확인할 수 있다.