23. Java Collection Framework (List, Set, Map, generic)
○ Java Collection Framework
- 자료를 모아서 저장할 수 있는 클래스들 (배열과 비슷)
- 종류 : List, Set, Map
○ List
- 순서(Index)가 있다, 인덱스는 0부터 시작
- List, Vector, ArrayList
- interface List{}
class Vector implements List{}
class ArrayList implements List{}
- 관련 메소드
① add(추가할 값) : List에 값 추가하기
② size() : List 개수 리턴
③ get(인덱스) : 해당 인덱스에 있는 값 리턴
④ remove(인덱스) : 해당 인덱스에 있는 값 제거
⑤ removeAllElements() : 모든 값 지우기
⑥ contains(확인할 값) : List 안에 해당 값이 있는지 확인(리턴값 boolean)
Vector vec = new Vector();
vec.add(3);
vec.add(2.4);
vec.add('R');
vec.add("KOREA");
vec.add(new Integer(0));
vec.add(new Double(6.7));
System.out.println(vec.size()); //6, 요소의 개수
for(int i=0; i<vec.size(); i++) {
System.out.println(vec.get(i));
}
vec.contains(3); //true
vec.contains('A'); //false
vec.remove(0); //0번째 요소 제거하기
System.out.println(vec.size()); //5, 요소의 개수
System.out.println(vec.get(0)); //2.4, 0번을 지워서 1번이 0번이 됨
vec.removeAllElements(); //vec 요소 전부 제거하기
System.out.println(vec.size()); //0
if(vec.isEmpty()) {//요소의 개수가 0개인지?
System.out.println("비어 있다");
}else {
System.out.println("비어 있지 않다");
}
Q) remove()를 이용해서 list 요소를 전부 삭제하시오
List list = new ArrayList(); //다형성
list.add(5);
list.add(6.7);
list.add('M');
list.add("SEOUL");
System.out.println(list.size()); //4
for(int i=list.size()-1; i>=0; i--) {
list.remove(i); //인덱스 0부터 지우면 인덱스가 틀어지므로, 뒤부터 지워줌
}
○ Set
- 순서가 없다, 중복을 허용하지 않는다
- Set, HashSet
- interface Set{}
class HashSet implements Set{}
- 관련 메소드
① add(추가할 값) : Set에 값 추가하기
② size() : List 개수 리턴
③ remove(인덱스) : 해당 인덱스에 있는 값 제거
- 순서가 없기 때문에 cursor를 이용해서 요소에 접근
Set set = new HashSet(); //다형성
set.add(3);
set.add(2.4);
set.add('R');
set.add("BUSAN");
set.add(new Integer(7)); //obeject도 넣는 게 가능
System.out.println(set.size());
//cursor : 가리킬 요소가 있으면 true, 없으면 false값 반환
//cursor를 이용해서 요소를 접근하는 경우
Iterator iter=set.iterator();
while(iter.hasNext()) {//다음 cursor가 있는지?
//cursor가 가리키는 요소 가져오기
Object obj=iter.next();
System.out.println(obj);
}
○ Map
- 순서가 없다, Key와 Vales가 구성되어 있다(JSON)
- Map, HashMap, Properties, HashTable
- interface Map{}
class HashMap implements Map{}
class Properties implements Map{}
- 관련 메소드
① put(키, 값) : Map에 값 추가하기
② size() : Map 개수 리턴
③ get(키) : 해당 키에 있는 값 리턴
④ remove(키) : 해당 키 항목 제거
⑤ ketSet() : Map의 모든 키를 모아서 리턴
⑥ containsKey(키) : Map에 해당 키가 있는지 확인(리턴값 boolean)
HashMap map = new HashMap();
map.put("one", 3);
map.put("two", 2.4);
map.put("three", 'R');
map.put("four", "손흥민");
System.out.println(map.size()); //4
System.out.println(map.get("four")); //손흥민
map.put("four", "박지성"); //key overwrite됨
System.out.println(map.get("four")); //박지성
Properties db = new Properties();
db.put("url", "http://localhost:1524");
db.put("username", "soldesk");
db.put("password", "12341234");
System.out.println(db.get("url")); //http://localhost:1524
System.out.println(db.get("username")); //soldesk
System.out.println(db.get("password")); //12341234
Q) = 문자를 기준으로 문자열을 분리해서 = 앞의 문자열은 key, = 뒤의 문자열은 value로 map에 저장하고
map의 key값들 중에서 "read.do"를 호출하면 value값으로 net.bbs.Read을 출력하시오
HashSet command = new HashSet();
command.add("list.do=net.bbs.List");
command.add("read.do=net.bbs.Read");
command.add("write.do=net.bbs.Write");
System.out.println(command.size());
HashMap hm = new HashMap();
// 1) 커서 생성하기
Iterator cursor = command.iterator();
// 2) 커서가 있을 때 까지 반복
while(cursor.hasNext()) {
// 3) 커서가 가리키는 요소를 가져와서 문자열 형변환
Object obj = cursor.next();
String line=(String) obj; //다형성
// 4) "=" 위치를 기준으로 문자열 분리하기
// → split(), substring(), StringTokenizer클래스
String[] word = line.split("=");
String key=word[0]; //"="앞 문자열
String value=word[1]; //"="뒤 문자열
// 5) hm에 저장하기
hm.put(key, value);
}//while end
System.out.println(hm.get("read.do")); //net.bbs.Read
○ 제네릭스(Generics)
- 요소를 수집하는 경우에 자료형을 표현하고 제한
- 좀 더 명확한 타입체크가 가능
- <E> : Element
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> list = new ArrayList<>();
//Vector<int> vec = new Vector<int>(); 에러, 기본자료형은 불가능
Vector<String> vec = new Vector<String>();
vec.add("개나리");
vec.add("진달래");
vec.add(new String("무궁화"));
//vec.add(3); 에러
//vec.add(2.4); 에러
//vec.add(new Character('R'))); 에러
- <K, V> : Key, Value
HashMap<String, Character> map = new HashMap<String, Character>
map.put("One", 'O');
map.put("Two", 'T');
//map.put("Three", "Third"); 에러