티스토리 뷰
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 |