Backend/JAVA_Basic

23. Java Collection Framework (List, Set, Map, generic)

개발개발빈이 2022. 6. 7. 19:17

○ 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");  에러