⚡️ArrayList
ArrayList은 자바의 JCF(Java Collections Framework),
자바 컬렉션 프래임워크 중 일부로 List 인터페이스를 상속받은 클래스 중 하나입니다.
한번 생성하면 크기가 고정되는 배열과 다르게 부족한 공간을 자동으로 늘려주는 선형리스트입니다.
배열은 데이터를 추가, 삭제 시 반복문으로 인덱스를 한칸씩 밀거나 당기는 식으로 공간을 조절하지만
ArrayList는 이 과정을 자동으로 처리해주어서 편리하게 사용이 가능합니다.
📌 ArrayList 선언
ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<String> list2 = new ArrayList<>(); // 타입 생략 가능
ArrayList<Product> pList = new ArrayList<>(); // 타입으로 클래스도 가능
선언 시 자료의 안정성을 위해 제네릭(Generic) 방식으로 타입을 미리 지정해주어 같은 타입의 객체들만 리스트에 추가가 가능합니다.
2022.01.08 - [Language/Java] - [Java/자바] Generic, 제네릭
생성자 타입 파라미터는 생략이 가능하며 클래스를 타입 파라미터로 지정이 가능해 더욱 다양한 방식의 사용이 가능합니다.
클래스의 인스턴스를 ArrayList에 담아 사용하는 자세한 방법은 아래에서 따로 설명하겠습니다.
📌 ArrayList 추가
ArrayList<Integer> list = new ArrayList<>();
list.add(1); // 1 삽입
list.add(3);
list.add(1, 2); // index 1에 2 추가
System.out.println(list);
add(value) 메소드를 통해 리스트 마지막에 값을 추가시킬 수 있습니다.
원하는 위치에 값을 넣고 싶을 경우 add(index, value) 메소드에 2개의 파라미터를 넣어주면 됩니다.
첫번째 파라미터는 리스트의 index, 두번째 파라미터는 넣어줄 값이 됩니다.
📌 ArrayList 삭제
list.remove(2); // 2번 인덱스 삭제 => remove(index)
list.clear(); // 리스트의 모든 값 삭제
list.remove(list.indexOf(2)); // 리스트에 2를 포함한 인덱스 리턴 후 삭제
remove(index) 메소드를 통해 원하는 위치의 데이터를 삭제 가능합니다.
모든 데이터를 삭제하고 싶다면 clear() 메소드를 사용하시면 됩니다.
또한 원하는 값으로 데이터를 삭제를 원하면 아래에서 살펴볼 indexOf() 메소드를 사용합니다.
📌 ArrayList 값 검색
int index = list.indexOf(2); // 원하는 값의 인덱스를 리턴, 없으면 -1 리턴
boolean b = list.contains(2); // 원하는 값의 존재 유무
while(list.indexOf(2) == -1) { // 리스트에 원하는 값 모두 삭제
list.remove(list.indexOf(2));
}
indexOf(value) 로 원하는 값의 인덱스를 리턴받을 수 있습니다.
원하는 값의 존재 유무는 contains(value) 를 통해 boolean 값으로 리턴 받습니다.
값의 검색을 통해 리스트에 존재하는 원하는 값을 모두 지울 수도 있으니 참고해주세요.
📌 ArrayList 값 추출, 출력
System.out.println(list); // 리스트 전체 출력
System.out.println(list.get(2)); // 2번 인덱스 출력
for(int i : list) {
System.out.println(i);
}
Iterator iter = list.iterator(); // 반복자 사용
while(iter.hasNext()){
System.out.println(iter.next());
}
리스트만 넣게 되면 오버라이딩 된 toString() 메소드에 의해 리스트에 존재하는 모든 데이터들이 한줄로 출력 되고,
get(index) 메소드는 인덱스의 값을 반환해줍니다.
반복문으로 원하는 데이터를 가져올 때 for문을 사용하거나 반복자(Iterator)를 사용할 수 있습니다.
Iterator의 자세한 사용법은 아래 글에서 찾아볼 수 있습니다
⚡️ArrayList와 클래스 객체
자바 콜렉션에 감이 없을 시기 ArrayList에 클래스를 타입으로 잡아 사용할 때 한참 헤매었던 기억이 있어
사용법을 분리해 조금 더 자세히 사용해보겠습니다.
우선 이름과 가격 멤버변수를 가지고 있는 상품 클래스를 만들어 보겠습니다.
class Product{
String name; int price;
Product(String name, int price){
this.name=name; this.price=price;
}
}
📌 클래스 객체 생성 후 ArrayList에 추가
객체 생성 후 리스트에 추가까지 해보겠습니다.
ArrayList<Product> pList = new ArrayList<Product>();
Product product = new Product("candy", 100);
pList.add(product);
pList.add(new Product("snack", 200)); // 생성자를 통해 리스트에 추가
클래스의 객체를 직접 생성해서 add() 메소드로 리스트에 넣어주는 방법과
add() 메소드에서 클래스 생성자를 통해 바로 리스트에 넣어주는 방법이 있습니다.
📌 ArrayList에서 클래스 객체의 값 추출하기
만약 ArrayList에 저장된 객체 product의 price를 알고싶다면 어떻게 해야될까요.
ArrayList -> 클래스 -> 멤버변수 순으로 데이터를 뽑아내야합니다.
그러기 위해선 ArrayList의 get() 메소드를 사용하거나 for문을 사용해 접근해야 합니다.
String name = pList.get(0).name;
int price = pList.get(0).price;
for(Product p : pList) {
System.out.println(p.name + p.price);
}
우선 get() 메소드부터 보면 아래와 같이 ArrayList의 인덱스 별로 Product 클래스의 멤버변수에 접근이 가능한 것을 볼 수 있습니다.
같은 개념으로 for문에서 입력받는 파라미터에 클래스 타입을 넣어 리스트에 저장된 객체를 하나하나 꺼내와서
그 객체의 변수에 접근하는 것을 알 수 있습니다.
지금보면 정말 별거 아니지만 컬랙션을 처음 배울 때 이 부분에서 막막한 느낌을 받아
저와 같은 고민을 하시는 분들께 도움이 됐으면 해서 추가적으로 설명해봤습니다.
자바 컬렉션, collection, ArrayList, ArrayList 사용법, ArrayList 특정 값 추출, ArrayList 클래스 변수 추출, 반복자, Iterator
'Java, JSP' 카테고리의 다른 글
[Java/자바] 쓰레드/Thread 사용법 (상속, Runnable) (0) | 2022.01.19 |
---|---|
[Java/자바] FileInputStream, FileReader, 파일 불러오기 (0) | 2022.01.14 |
[Java/자바] 해시맵, HashMap 사용법과 EntrySet, Iterator (0) | 2022.01.11 |
[Java/자바] 객체 비교, equals()와 hashCode() (0) | 2022.01.10 |
[Java/자바] Generic, 제네릭 (0) | 2022.01.08 |
댓글