JAVA
컬렉션 프레임워크
🤖 Play with Android 🤖
2021. 7. 27. 19:14
728x90
컬렉션 프레임워크란?
java.util패키지에는 자료를 다룰 수 있는 자료구조 클래스가 다수 존재한다. 자료구조 클래스들을 컬렉션 프레임워크라고 한다.
- 자료구조란 자료를 저장할 수 있는 구조
- 책을 보관하기 위해서 책장을 이용하는 것처럼 다양한 자료들을 다양한 방식으로 관리하기 위한 방법이 필요한데, 이러한 방법을 제공하는 것을 자료구조, 컬렉션 프레임워크이다.
- 컬렉션 프레임워크에서 가장 기본이 되는 interface는 Collection인터페이스
- Collection인터페이스는 여기에 자료가 있다는 것을 표현.
- 중복도 허용하고, 자료가 저장된 순서도 기억하지 못하는 것이 Collection인터페이스.
- Collection이 가지고 있는 대표적인 메소드는 add(), size(), iterator() 메소드
- Collection은 저장된 순서를 기억하지 못하기 때문에 "첫 번째 자료를 달라, 두 번째 자료를 달라"와 같은 기능을 가질 수 없다. 따라서 Collection은 저장된 자료를 하나씩 하나씩 꺼낼 수 있는 Iterator라는 인터페이스를 반환한다.
- Iterator는 꺼낼 것이 있는지 없는지 살펴보는 hasNext() 메서드와 하나씩 자료를 꺼낼 때 사용하는 next() 메서드를 가지고 있다.
- Set자료구조는 중복을 허용하지 않는 자료구조를 표현하는 인터페이스
- Collection인터페이스를 상속받는다.
- Set인터페이스가 가지고 있는 add메소드는 같은 자료가 있으면 false, 없으면 true를 반환하는 add메소드를 가지고 있다.
//java.lang 패키지의 클래스는 import 를 하지 않고도 사용할 수 있다.
//그 말인 즉슨 java.lang 패키지가 아니라면 import 해주어야 한다는 뜻이기도 하다.
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class setExam {
public static void main(String[] args) {
Set<String> set1 = new HashSet<>(); //set 은 인터페이스이기 때문에 new 해서 객체를 생성할 수 없기 때문에 set 을 구현한 클래스인 HashSet 을 이용하겠다.
boolean flag1 = set1.add("김철수"); //제네릭을 통해 타입을 강제했기 때문에 String 타입만 add 가능
boolean flag2 = set1.add("이장미");
boolean flag3 = set1.add("김철수");
System.out.println(set1.size()); //size() 를 통해 set 의 크기를 출력
//3개를 저장했지만 "김철수" 가 중복되었기 때문에 2가 출력되는 것을 볼 수 있음
System.out.println(flag1); //true (set 의 return 값이 boolean 타입이기 때문에 true 가 출력)
System.out.println(flag2); //ture
System.out.println(flag3); //false -> 같은 값이 중복됐으므로 false 가 출력
Iterator<String> iter = set1.iterator(); //set1은 iterator 라는 메소드를 이용하여 Iterator 인터페이스를 구현한 객체 iter 가 리턴
while(iter.hasNext()){ //Iterator 안에 있는 hasNext 라는 메소드를 통해 Set 안에 값이 있는 경우에만 while 문 실행
String str = iter.next(); // 값을 꺼내고 다음것을 참조
System.out.println(str);
}
}
}
- List자료구조는 중복은 허용하면서 순서를 기억하는 자료구조를 표현.
- Set인터페이스와 마찬가지로 Collection인터페이스를 상속받고 있다.
- List는 순서를 기억하고 있기 때문에 0번째 1번째 n번째의 자료를 꺼낼 수 있는 get(int)메소드를 가지고 있다.
import java.util.ArrayList;
import java.util.List;
public class ListExam {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); //List 도 인터페이스이기 때문에 List 가 인스턴스가 될 수는 없다. 따라서 리스트를 구현하고 있는 대표적인 자료구조인 ArrayList 사용
list.add("kim");
list.add("jung");
list.add("kim");
System.out.println(list.size()); //리스트는 중복된 값도 허용한다.
for(int i = 0; i < list.size(); i++){ //리스트는 순서가 있는 자료구조이기 때문에 index를 이용해 자료를 가져올 수 있다.
String str;
str = list.get(i);
System.out.println(str);
}
}
}
- Map 자료구조는 Key와 Value를 가지는 자료구조이다.
- 저장할 때 put()메소드를 이용하여 key와 value를 함께 저장한다.
- 원하는 값을 꺼낼 때는 key를 매개변수로 받아들이는 get()메소드를 이용하여 값을 꺼낸다.
- Map에 저장되어 있는 모든 Key들은 중복된 값을 가지면 안 된다.
- Key의 이런 특징 때문에 Map은 자신이 가지고 있는 모든 Key들에 대한 정보를 읽어 들일 수 있는 Set을 반환하는 keySet()메소드를 가지고 있다.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapExam {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("001","kim");
map.put("002","jung");
map.put("003","kang");
map.put("001","lee");
System.out.println(map.size()); //lee 에서 똑같은 키로 저장되었기 때문에 3이 출력
System.out.println(map.get("002"));
System.out.println(map.get("001")); //같은 key 로 값이 또 들어온다면 기존 value 를 없애고 새로운 value 로 저장
//자신이 가지고 있는 모든 Key 들에 대한 정보를 읽어들일 수 있는 Set 을 반환하는 keySet()메소드
Set<String> keys = map.keySet(); // map 에 저장된 모든 key 들을 Set 자료구조로 꺼낸다
Iterator<String> iter = keys.iterator(); // Set 자료구조에 있는 모든 key 를 꺼내기 위하여 Iterator 를 구한다.
while(iter.hasNext()){
// key 를 꺼낸다
String key = iter.next();
// key 에 해당하는 value 를 꺼낸다
String value = map.get(key);
// key 와 value 를 출력
System.out.println(key+" : "+value);
}
}
}