Collection
지금까지 배운 변수와 배열 클래스의 단점을 살펴보자.
변수
- 하나밖에 처리 못한다.
배열
1. 여러개를 처리할 수 있으나 데이터 타입이 정해진 것만 써야한다. -> 클래스로 해결가능
2. 크기가 정해져 있다. -> 연결리스트 알고리즘으로 해결가능
3. 삽입 삭제가 불가능하다. -> 연결리스트 알고리즘으로 해결가능
(배열은 데이터를 저장 할 때 좋다.)
클래스
- 다른 데이터 타입으로 묶을 수 있다.
(다른 배열의 단점을 해결하지 못한다.)
배열의 모든 단점을 깔끔하게 해결 할 수는 없을까?
컬렉션 (Collection)
배열의 모든 단점을 해결
- 컬렉션 = 클래스 + 알고리즘
그럼 항상 컬렉션을 쓰면 되지 않을까?
그렇지 않다.
배열을 쓸 수 있다면 배열을 쓰는 것이 가장 빠르다.
java.util. 에 컬렉션이 모여있다.
클래스를 잘 알고 싶으면 부모를 공부해라
컬렉션 클래스를 알고 싶으면 부모인 컬렉션 인터페이스를 공부하라
대표적인 컬렉션 클래스를 살펴보자.
1. set 인터페이스
- 자주 꺼내쓰지 않는 경우
1) 저장용도
2) 중복제거
3) 정렬 순서가 없다.
- 임의로 데이터가 저장된다.
4) 대표적인 클래스
- HashSet, LinkedHashSet, TreeSet ...
2. List 인터페이스
- 자주 꺼내써야 하는 경우
1) 출력용도
- 꺼내서 쓰는 용도
2) 중복저장
3) 정렬 순서 있다.
4) 대표적인 클래스
- ArrayList, Vector, LinkedList
먼저, Set 을 알아보자.
<TreeSet>
SortedSet - TreeSet
SortedSet 라는 부모클래스를 상속받는 자식클래스이다.
set인터페이스 종류 중에서는 유일하하게 정렬기능이 있다.
저장하기에는 좋지만 꺼내서 쓰기는 어렵다.
<참고>
- 같은 형제클래스라도 주소는 남남이다.
- 상속은 부모자식간에만 된다.
package prjUtil;
import java.util.HashSet;
import java.util.TreeSet;
public class CollectionTest1 {
public static void main(String[] args) {
// TODO set계열의 클래스들
//set은 정렬 순서와 상관없이 마구잡이로 나오기 때문에 출력이 어렵다.
//HashSet 클래스를 쓰면 인스턴스를 만들어 놓으면 메모리가 허용하는 범위까지 크기를 늘린다.
HashSet set = new HashSet();
//add로 저장한다.
set.add("carrie");
set.add("kabbin");
set.add("kairo");
set.add("kairo");
set.add("kariss");
//.size 데이터의 개수를 확인
//데이터를 꺼내서 사용하기가 어렵다.
System.out.println("데이터의 개수 : " + set.size()); // 중복은 제외하고 저장
//현재가 객체가 가르키는 값을 문자열로 출력
System.out.println(set.toString());
//자바의 모든객체는.toString이 있기 때문에 생략가능하다.
System.out.println(set);
TreeSet tree = new TreeSet();
tree.add("juliet");
tree.add("terry");
tree.add("kabbin");
tree.add("terry");
tree.add("carrie");
System.out.println("데이터 개수 :" + tree.size());
//알파벳 기준으로 정렬하여 저장
//저장하기에는 좋지만 꺼내서 쓰기는 어렵다.
System.out.println(tree);
}
}
※ 결과값
데이터의 개수 : 4
[kabbin, kairo, carrie, kariss]
[kabbin, kairo, carrie, kariss]
데이터 개수 :4
[carrie, juliet, kabbin, terry]
여기서 데이터를 꺼내오려면 어떻게 해야할까?
package prjUtil;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
public class CollectionTest1 {
public static void main(String[] args) {
// TODO set계열의 클래스들
//set은 정렬 순서와 상관없이 마구잡이로 나오기 때문에 출력이 어렵다.
//HashSet 클래스를 쓰면 인스턴스를 만들어 놓으면 메모리가 허용하는 범위까지 크기를 늘린다.
HashSet set = new HashSet();
set.add("carrie");
set.add("kabbin");
set.add("kairo");
set.add("kairo");
set.add("kariss");
//.size 데이터의 개수를 확인
//데이터를 꺼내서 사용하기가 어렵다.
System.out.println("데이터의 개수 : " + set.size()); // 중복은 제외하고 저장
//현재가 객체가 가르키는 값을 문자열로 출력
System.out.println(set.toString());
//자바의 모든객체는.toString이 있기 때문에 생략가능하다.
System.out.println(set);
TreeSet tree = new TreeSet();
tree.add("juliet");
tree.add("terry");
tree.add("kabbin");
tree.add("terry");
tree.add("carrie");
System.out.println("데이터 개수 :" + tree.size());
//알파벳 기준으로 정렬하여 저장
//저장하기에는 좋지만 꺼내서 쓰기는 어렵다.
System.out.println(tree);
//set에서는 데이터를 어떻게 꺼내올까?
//set은 한꺼번에 일괄적으로 데이터를 꺼내와야해서 불편하다.
//그러므로 데이터를 순서대로 꺼내올 수 있도록 열거형으로 만들어 줄을 세운다.
//.iterator()메소드는 데이터를 줄세우는 메소드이다.
Iterator it = tree.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
※ 결과값
데이터의 개수 : 4
[kabbin, kairo, carrie, kariss]
[kabbin, kairo, carrie, kariss]
데이터 개수 :4
[carrie, juliet, kabbin, terry]
carrie
juliet
kabbin
terry
여기서 데이터는 주소값에 저장된다.
<Arraylist>
package prjUtil;
import java.util.ArrayList;
public class CollectionTest2 {
public static void main(String[] args) {
// TODO List계열의 클래스
ArrayList list = new ArrayList();
list.add("carrie");
list.add("kairo");
list.add("kabbin");
list.add("kairo");
list.add("terry");
//중복된 데이터를 걸러내지 못한다.
System.out.println("데이터 개수 : " + list.size());
//입력순서대로 정렬한다.
System.out.println(list);
for(int i =0; i<list.size(); i++) {
//.get 인스턴스로 부터 실제 데이터를 꺼내오는 메서드
//문자면 문자, 숫자면 숫자로 원래있던 데이터 타입을 꺼내옴
System.out.println(list.get(i));
}
}
}
※ 결과값
데이터 개수 : 5
[carrie, kairo, kabbin, kairo, terry]
carrie
kairo
kabbin
kairo
terry
컬렉션에서는 검색기능을 간단하게 처리 할 수 있다.
package prjUtil;
import java.util.ArrayList;
public class CollectionTest2 {
public static void main(String[] args) {
// TODO List계열의 클래스
ArrayList list = new ArrayList();
list.add("carrie"); //.add로 값을 저장한다. 어떤 값이든 저장 할 수 있지만 꺼낼 때를 생각해야한다.
list.add("kairo");
list.add("kabbin");
list.add("kairo");
list.add("terry");
System.out.println("데이터 개수 : " + list.size()); //중복된 데이터를 걸러내지 못한다.
System.out.println(list); //입력순서대로 정렬한다.
for(int i =0; i<list.size(); i++) {
//.get 인스턴스로 부터 실제 데이터를 꺼내오는 메서드
System.out.println(list.get(i)); //문자면 문자, 숫자면 숫자로 원래있던 데이터 타입을 꺼내옴
}
//검색 할 때 반복문을 안써도 된다.
if(list.contains("kairo")) { //kairo면 "찾았다." 아니면 "못찾았다."
System.out.println("찾았다.");
System.out.println(list.indexOf("kairo")+"번째있다."); //.indexOf 찾고자하는 문자열에 위치를 알려준다.
}else {
System.out.println("못찾았다.");
}
list.add(2, 100); //배열과 다르게 임의의 위치에 위치지정하고 값을 추가 할 수 있다.
System.out.println(list);
//위치지정하고 값을 삭제 할 수 있다.
list.remove(3); //.removeall() 이나 .clear()를 쓰면 모든 값을 지울 수 있다.
System.out.println(list);
list.removeAll(list);
System.out.println(list);
}
}
※ 결과값
데이터 개수 : 5
[carrie, kairo, kabbin, kairo, terry]
carrie
kairo
kabbin
kairo
terry
찾았다.
1번째있다.
[carrie, kairo, 100, kabbin, kairo, terry]
[carrie, kairo, 100, kairo, terry]
[]
3. Map
- 검색에는 최고
- Collection과는 다르게 Map 인터페이스를 을 상속한다.
- 두 개를 묶어서 한 쌍으로 저장한다.
1) 검색용도
2) 두개의 데이터를 한쌍으로 저장 (key, value)
3) HashMap, HashTable...
package prjUtil;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class CollectionTest3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap map = new HashMap(); //HashMap map을 사용한다.
map.put("key1", "홍길동"); //put이라는 메서드를 사용해서 값을 입력
map.put("key2", "임꺽정");
map.put("key3", "유비");
map.put("key4", "관우");
map.put("key5", "장비");
System.out.println("데이터 개수 : " + map.size()); //map의 개수를 알아본다.
System.out.println(map.get("key"));
//.iterator()메소드는 데이터를 줄세우는 메소드이다.
Set set = map.keySet(); //순차적으로 값이 나올려면 set 계열의 메소드를 써야한다.
Iterator it = set.iterator(); //set의 iterator() 메소드를 호출하여 줄을 세우고
while(it.hasNext()) { //hasNext 그 다음 것을 가지고 있는지 물어본다.(있는지 없는지 검사)
String key = (String)it.next(); //it.next() 줄을 세우고 나서 값을 불러온다.
System.out.println(map.get(key)); //실제 데이터를 가지고 있는 것은 map이기 때문에 map을 쓴다.
//값을 key에다가 저장시키고 뽑아온다.
//.next() : 먼저 현재있는 데이터를 가져오고 다음 것을 꺼내온다.
}
}
}
※ 결과값
데이터 개수 : 5
null
홍길동
임꺽정
장비
유비
관우
'개발 > Java' 카테고리의 다른 글
[java] 예외처리(Exception) (0) | 2017.10.30 |
---|---|
[java] 제네릭 Generic (0) | 2017.10.28 |
[java] java.util 패키지를 알아보자. (0) | 2017.10.27 |
[java] 인터페이스(InterFace) (0) | 2017.10.26 |
[java] 패키지 package (0) | 2017.10.25 |