본문 바로가기
Backend/JAVA

[JAVA] List, Set, Map 인터페이스

by howdyoon 2023. 3. 26.

Java collection Framework

- 자료를 모아서 저장할 수 있는 클래스 및 인터페이스


List 인터페이스

- 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용

- 순서(Index)가 있다. 인덱스는 0부터 시작 
- Vector, ArrayList 등


Set 인터페이스

- 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용 

- 순서가 없다
- HashSet, TreeSet 등

Map 인터페이스

- 키(Key)와 값(Value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용

키는 중복될 수 없지만 값은 중복을 허용, 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게된다

- 순서가 없다. Key와 Value로 구성되어 있다
- HashMap, Properties 등

 

[ 형식 ] 

interface List {}
class Vector implements List {}
class ArrayList implements List {}

interface Set {}
class HashSet implements Set {}

interface Map {}
class HashMap implements Map {}
class Properties implements Map {}

//다형성
List list=new Vector()
List list=new ArrayList()
Set set=new HashSet()
Map map=new HashMap()

 

[ List ]

//1. List 계열
    //<E> Element 요소
    Vector vec=new Vector();
    vec.add(3);
    vec.add(2.4);
    vec.add('R');
    vec.add("KOREA");
    vec.add(new Integer(5));
    vec.add(new Double(6.7));

    //Integer inte=new Integer(5) Old Version
    //Integer inte=5              new Version

    System.out.println(vec.size()); //6 요소의 갯수
    for(int i=0; i<vec.size(); i++){
        System.out.println(vec.get(i));
    }//for end

    vec.remove(0);                  //0번째 요소 제거하기
    System.out.println(vec.size());

    vec.removeAllElements();        //vec요소 전부 제거하기
    System.out.println(vec.size()); //0

    if(vec.isEmpty()) {//요소의 갯수가 0개 인지?
        System.out.println("비어 있다");
    }else {
        System.out.println("비어 있지 않다");
    }//if end
    //////////////////////////////////////////////////

    List list=new ArrayList();
    list.add(5);
    list.add(6.7);
    list.add('M');
    list.add("SEOUL");

    System.out.println(list.size()); //4

    //문) remove() 이용해서 list 요소를 전부 삭제하시오
    for(int i=list.size()-1; i>=0; i--) {
        list.remove(i);
    }//for end

    System.out.println(list.size()); //0

 

[ Set ]

//2. Set 계열 : 순서가 없다
    Set set=new HashSet();
    set.add(3);
    set.add(2.4);
    set.add('R');
    set.add("BUSAN");
    set.add(new Integer(7));

    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);
    }//while end

 

[ Map ]

//3. Map 계열 : 순서가 없다
-> Key	: 이름표
-> Value	: 값

->JSON, 파이선(딕셔너리), NoSQL 등에서 많이 사용하는 문법
		
    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());

    System.out.println(map.get("four"));

    map.put("four", "박지성");
    System.out.println(map.get("four"));
    ///////////////////////////////////////////////

    //Properties 클래스
    Properties db=new Properties();

    db.put("url", "http://localhost:1521");
    db.put("username", "itwill");
    db.put("password", "12341234");

    System.out.println(db.get("url"));
    System.out.println(db.get("username"));
    System.out.println(db.get("password"));

 

[ 활용 문제 ]

문제) = 문자를 기준으로 문자열을 분리해서
     = 앞의 문자열은 key, = 뒤의 문자열은 value로 구분해서 hm에 저장하고
     hm의 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()); //3

    HashMap hm=new HashMap();

    //1) 커서 생성하기
    Iterator cursor=command.iterator();

    //2) 커서가 있을때까지 반복
    while(cursor.hasNext()) {
        //3) 커서가 가리키는 요소를 가져와서 문자열 형변환
        Object obj=cursor.next();
        String line=(String)obj; //다형성
        //System.out.println(line);

        //4) "=" 위치를 기준으로 문자열 분리하기
        //-> split(), substring(), StringTokenizer클래스
        String[] word=line.split("=");
        String key=word[0];		// "=" 앞 문자열
        String value=word[1];	// "=" 뒤 문자열
        System.out.println(key);
        System.out.println(value);

        //5) hm에 저장하기
        hm.put(key, value);
    }//while end

    //결과값
    System.out.println(hm.get("read.do")); //net.bbs.Read