2017 - 08 - 27 (일)
참고 도서 : 자바의 정석(남궁성 저, 도우출판)
Collections Framework
다수의 데이터(Collections), 즉 데이터 그룹을 저장하는 클래스들을 표준화한 프로그래밍 방식
컬렉션 프레임워크는 크게 3가지 타입의 인터페이스로 나뉜다. ( List , Set , Map )
Collections Framework 상속계층도
- List 인터페이스 : 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.
구현클래스 : ArrayList, LinkedList, Stack, Vector
- Set 인터페이스 : 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
구현클래스 : HashSet, TreeSet
- Map 인터페이스 : 키와 값의 쌍으로 이루어진 데이터의 집합으로 순서를 유지하지 않으며 키의 중복은 허용하지 않지만 데이터의 중복은 허용한다.
구현클래스 : HashMap, TreeMap, HashTable, Properties
Iterator
- 컬렉션 클래스에 저장된 요소들을 나열하는 방법을 제공한다.
- 컬렉션 클래스의 iterator()를 호출해서 사용.
- iterator 는 일회성이며 읽는 도중에 컬렉션 변경이 불가하다.
List list = new ArrayList(); // ArrayList 한개를 생성
Iterator it = list.iterator();
//list 객체의 조상인 collection클래스의 iterator()메소드호출
while(it.hasNext()){
System.out.println(it.next());
} //.next()로 읽어옴
-
List
-
ArrayList, LinkedList
-
ArrayList의 경우 스택구조로 되어있기에 중간의 데이터를 삭제하거나 추가할 경우 성능상의 단점을 가진다.
-
LinkedList는 중간에 데이터를 삭제/추가하는 작업에 있어서 성능이 비교적 좋다.(Queue)
-
-
-
Set
-
HashSet
-
Set은 중복을 허용하지 않는다. 만일 add() 를 통해 중복된 데이터값을 넣는다면 False 가 반환되면서 저장을 실패할 것이다.
-
중복저장을 허용하지 않고자 할 경우 Set을 활용하면 편할 것이다.
-
Object[] obj = {6,7,1,4,6,2,4,11,3,4}; Set set = new HashSet(); for(int i =0; i <obj.length; i ++){ set.add(obj[i]); } // List의 인스턴스 list에 set을 넣는다. List list = new LinkedList(set); // Collections 의 sort() 메소드로 간단히 list를 정렬한다. Collections.sort(list); System.out.print(list); // {1,2,3,4,6,7,11} 이 출력될 것이다. 중복되는 값을 제거한다.
-
-
TreeSet
-
TreeSet은 이진 검색 트리라는 자료구조 형태로 데이터를 저장하는 클래스이다.
-
TreeSet도 Set의 성격인 중복저장 불허, 순서유지 x 를 가지고 있다.
-
TreeSet은 저장할 때 이미 정렬하기 때문에 읽어올 때 따로 정렬할 필요가 없다.
-
class TreeLotto{ public static void main(String args[]){ Set set = new TreeSet(); for(int i =0; set.size()<6 ; i ++){ int num = (int)(Math.random()*45) +1; // 1~45까지의 랜덤숫자를 num 변수에 넣는다. set.add(num); } System.out.print(set); // 실행결과 {5,7,24,31,33,35} 랜덤숫자가 자동으로 정렬해서 출력 } }
- TreeSet의 subset() 메서드
class TreeDictionary{ public static void main(String args[]){ Set set = new TreeSet(); set.add("apple"); set.add("banana"); set.add("car"); set.add("dragon"); set.add("egg"); String from = "a"; String to = "c"; System.out.println(from+"으로 시작하는 단어부터"+to+"로 시작하는 단어까지 검색"+set.subSet(from,to)); //a로 시작하는 단어부터 c로시작하는 단어를 검색해서 자른다. } }
-
-
Map
-
HashMap
-
key : value 형태의 자료형을 저장한다.
-
key 값의 중복은 허용하지 않지만 value의 중복은 허용한다.
-
HashMap은 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 가진다.
-
-
-
TreeMap
-
TreeMap 은 TreeSet 처럼 이진검색트리 형태로 되어있으면서 Map의 성질을 가진다.
-
HashMap이 TreeMap 보다 검색성능이 더 좋다고 하여 HashMap을 사용하는게 낫다고 하지만 범위검색 및 정렬검색의 경우 TreeMap의 성능이 더 우수하다.
-