티스토리 뷰

Collections Framework : 값을 담을 수 있는 컨테이너(그릇)

Collections Framework

 

List:  값을 순서대로 저장,        중복 가능

Set : 값을 순서 상관 없이 저장,   중복 X

 

 

 

[ArrayList]

1. java.util.ArrayList를 import

※ 자동으로 import : ctrl+shift+o

 

2. 값 추가 시 add() 메소드 사용

이 때, 값은 기본적으로 Object 타입으로 저장되기 때문에 모든 타입의 값을 저장 가능

특정 타입으로 값을 저장하려면 Generic 활용!

ex) al.add("체리");

 

3. 값을 꺼낼 땐 get() 메소드 사용 (Iterator도 사용 가능)

ex) al.get(0); // 0번째 값 꺼냄

 

4. ArrayList의 크기를 알려면 size() 메소드 사용   

ex) al.size();

 

5. 크기를 동적으로 변경 가능 -> 언제든지 값 추가 가능

 

 

ex1) 

ArrayList al = new ArrayList();
al.add("체리");
al.add("마루");
		
for(int i=0; i<al.size(); i++) {
  String str = (String)al.get(i);
  System.out.println(str);
}

ArrayList에 저장한 값을 get 메소드로 꺼내어 String형 변수에 저장하려고 하면 에러가 난다.

그 이유는 ArrayList에 저장된 값은 모두 Object형으로 저장되어 있기 때문에 부모 타입인 Object형을 자식 타입인 String형에 저장할 수가 없기 때문이다. 

그러므로 Object형을 String형으로 명시적 형변환 해주면 된다.

 

ex2)

ArrayList<String> al = new ArrayList<String>();
al.add("사과");
al.add("오렌지");
		
for(int i=0; i<al.size(); i++) {
	String str = al.get(i);
	System.out.println(str);
}

ArrayList에 String형으로 Generic 선언을 해주었기 때문에 add 메소드를 이용해 값을 저장할 때 값이 String형으로 저장된다.

그러므로 ex1과 다르게 get 메소드로 값을 꺼냈을 때 형변환을 하지 않아도 된다.

 

 

 

[HashSet]

1. java.util.HashSet를 import

 

2. 값 설정 시 add() 메소드 사용

 

3. 값을 꺼낼 땐 Iterator 사용

-> 저장된 값들에 순서가 없어서 index가 없으므로 get() 메소드가 존재하지 않음

 

ex)

HashSet<String> hs = new HashSet<String>();
hs.add("체리");
hs.add("호두");
hs.add("마루");
		
Iterator hi = hs.iterator();
while(hi.hasNext()) {
	System.out.println(hi.next());
}

실행 결과>

마루
체리
호두

 

4. HashSet의 메소드

 

containsAll 메소드

ex) A.containsAll(B) =>  A가 B의 모든 걸 담고 있는지, 즉 B가 A에 포함되는지 여부를 boolean 값으로 반환

 

addAll 메소드 (합집합)

ex) A.addAll(B) =>  B의 모든 요소를 A에 추가함

 

retainAll 메소드 (교집합)

ex) A.retainAll(B) =>  A와 B의 공통된 요소만을 A에 저장 

 

removeAll 메소드 (차집합)

ex)A.removeAll(B) => A에서 B와 공통된 요소를 모두 제거

 

 

 

[Iterator]

Iterator가 가지는 메소드 : hasNext(), next(), remove()

 

hasNext() : 객체 내에 현재 읽어 올 데이터가 있는지 판단

next() : hasNext()를 통해 판단한 데이터를 읽어 옴

 

Iterator it = al.iterator();

while(it.hasNext()) {
	System.out.println(it.next());
}

위와 같은 코드 정말 자주 사용됨!!

 

 

 

ex) ArrayList와 HashSet 비교

package CollectionEx;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class CollectionEx2 {
	public static void main(String[] args) {
		System.out.println("ArrayList-----");
        
		ArrayList<String> al = new ArrayList<String>();
		al.add("first");
		al.add("second");
		al.add("third");
		al.add("third");
        
		Iterator ai = al.iterator();
		while(ai.hasNext()) {
			System.out.println(ai.next());
		}
		
        
		System.out.println("HashSet------");
        
		HashSet<String> hs = new HashSet<String>();
		hs.add("first");
		hs.add("second");
		hs.add("third");
		hs.add("third");
		
		Iterator hi = hs.iterator();
		while(hi.hasNext()) {
			System.out.println(hi.next());
		}
	}
}

실행 결과>

ArrayList-----
first
second
third
third
HashSet------
third
first
second

 

ArrayList와 HashSet에 각각 값을 저장하고 Iterator를 이용하여 값을 모두 출력하였다.

그 결과 ArrayList에서는 값을 저장한 순서대로 중복된 값을 포함하여 출력이 되었고,

HashSet에서는 순서가 뒤죽박죽 되어 중복된 값은 한 번만 출력되었다.

 

 

더보기

출처 : 아이티스펙아카데미

반응형

'Java, JavaScript' 카테고리의 다른 글

[Java] read() , FileIOStream  (0) 2019.06.23
[Java] Collections Framework - Map  (0) 2019.06.18
[Java] Generic  (0) 2019.06.14
[Java] enum 클래스  (0) 2019.06.14
[Java] Wrapper 클래스  (0) 2019.06.14

댓글