본문 바로가기
Java, JSP

[Java/자바] ArrayList 사용법

by LasBe 2022. 1. 13.
반응형

⚡️ArrayList


ArrayList은 자바의 JCF(Java Collections Framework),

자바 컬렉션 프래임워크 중 일부로 List 인터페이스를 상속받은 클래스 중 하나입니다.

Java Collections Framework

한번 생성하면 크기가 고정되는 배열과 다르게 부족한 공간을 자동으로 늘려주는 선형리스트입니다.

 

배열은 데이터를 추가, 삭제 시 반복문으로 인덱스를 한칸씩 밀거나 당기는 식으로 공간을 조절하지만

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의 자세한 사용법은 아래 글에서 찾아볼 수 있습니다

 

[Java/자바] 해시맵, HashMap 사용법과 EntrySet, Iterator

⚡️ 해시맵(HashMap) 해시맵은 자바의 JCF(Java Collections Framework), 자바 컬렉션 프래임워크 중 일부로 Map 인터페이스의 구현 클래스 중 하나입니다. Map 인터페이스를 상속하고 있기 때문에 객체로

lasbe.tistory.com

 

 

 

⚡️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

반응형

댓글


오픈 채팅