본문 바로가기
Programming/Java, Spring

[Java 기초문법] Collections, Set, Hashset, Treeset, List, Map

by Renechoi 2022. 10. 21.

[Java 기초문법] by Programmers school 자바 중급

 


Set

 

set은 중복이 없고 순서도 없다. Hashser과 Treeset이 있다. 

 

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Car {
    public static void main(String[] args) {
        Set<String> set1 = new HashSet<>();

        boolean flag1 = set1.add("kim");
        boolean flag2 = set1.add("lee");
        boolean flag3 = set1.add("kim");

        System.out.println(set1.size());   //저장된 크기를 출력합니다. 3개를 저장하였지만, 이미 같은 값이 있었기 때문에 2개가 출력
        System.out.println(flag1);  //true
        System.out.println(flag2);  //true
        System.out.println(flag3);  //false

        Iterator<String> iter = set1.iterator();

        while (iter.hasNext()) {   // 꺼낼 것이 있다면 true 리턴.
            String str = iter.next(); // next()메소드는 하나를 꺼낸다. 하나를 꺼내면 자동으로 다음것을 참조한다.
            System.out.println(str);
        }
    }
}

2
true
true
false
lee
kim

 

 

Hashset을 이용해 인스턴스를 만들고, 이렇게 만들어진 string 값만 만들 수 있는 hashset에 이름 자료를 추가해준다. 

 

이때 중복이 되지 않기 때문에 같은 값인 3번째 kim의 경우 false를 반환하고 사이즈도 2로 반환된다. 

 

컬렉션이 갖고 있는 iterator라는 인터페이스를 이용해서 꺼내오기. 

 

 

이때도 generic을 이용해 string을 받아오도록 설정. 

 

hasnext 메서드는 자료구조의 존재 여부를 확인하고 있으면 true 없으면 false를 리턴

 

인덱스가 필요한 상황이 아니므로 while을 이용해서 반복문 돌리고 

 

next()를 통해 값을 꺼내준다. 

 


 

List 

 

리스트 인터페이스를 구현하기 

 

배열과 다른 점은 배열은 한 번 생성하면 크기가 변경되지 않는한편, 리스트는 저장공간이 필요에 따라 자유롭게 변형 가능. 

 

중복 가능, 순서도 있음. 

import java.util.ArrayList;
import java.util.List;

public class Car {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        // list에 3개의 문자열을 저장합니다.
        list.add("kim");
        list.add("lee");
        list.add("kim");

        System.out.println(list.size()); //list에 저장된 자료의 수를 출력 (중복을 허용하므로 3 출력)
        for(int i = 0; i < list.size(); i++){
            String str = list.get(i);
            System.out.println(str);
        }
    }
}

 

3
kim
lee
kim

 

 

제너릭을 이용해 스트링만을 담을 수 있도록 선언해준다. 

 

add함수를 통해 리스트에 데이터를 넣어준다. 

 

중복을 허용하기 때문에 사이즈는 3으로 출력

 

리스트는 순서가 있는 자료구조이기 때문에 fo문 

반복문을 통해 확인시 

들어간 데이터를 전부 출력한다. 

 

 

 


 

Map 

 

맵 인터페이스는 key와 value를 쌍으로 저장하는 자료구조

키를 이용해서 value를 찾을 수 있도록 설계되었기 때문에 key 중복은 허용하지 않는다.

value는 중복 가능하다. 

 

스트링으로 제너릭을 지정해서 map 생성 

 

 

key와 value 값을 넣어 put으로 저장한다. 

 

이때 같은 key인 "001"이 들어갈 때 마지막 "001"로 저장이 되므로 처음 kim이 kang으로 바뀐다. 

 

System.out.println(map.size());

 

출력시 중복을 제외하고 3으로 출력 

 

System.out.println(map.get("001"));
System.out.println(map.get("002"));
System.out.println(map.get("003"));

 

이때 001의 경우 kim이 아니라 kang으로 출력된다. 

 

 

map이 가지고 있는 모든 자료를 꺼내기 위해서 keySet() 메서드를 사용할 수 있다.

key를 꺼내어 set 자료구조에 넣어주고 

 

Set<String> keys = map.keySet();

 

 

key를 다시 꺼내기 위해 Iterator를 사용한다. 

 

Iterator<String> iter = keys.iterator();

 

 

        while (iter.hasNext()) {
            // key를 꺼냅니다.
            String key = iter.next();
            // key에 해당하는 value를 꺼냅니다.
            String value = map.get(key);
            // key와 value를 출력합니다.
            System.out.println(key + " : " + value);
        }
    }
}

 

 

최종 

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Car {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        // key와 value값을 put으로 저장합니다.
        map.put("001", "kim");
        map.put("002", "lee");
        map.put("003", "choi");
        // 같은 key가 2개 있을 수 없습니다. 첫번째로 저장했던 001, kim은 001, kang으로 바뀐다.
        map.put("001", "kang");

        // map에 저장된 자료의 수를 추력합니다. 3이 출력됩니다.
        System.out.println(map.size());

        // 키가 001, 002, 003인 값을 꺼내 출력합니다.
        System.out.println(map.get("001"));
        System.out.println(map.get("002"));
        System.out.println(map.get("003"));

        // map에 저장된 모든 key들을 Set자료구조로 꺼냅니다.
        Set<String> keys = map.keySet();
        // Set자료구조에 있는 모든 key를 꺼내기 위하여 Iterator를 구합니다.
        Iterator<String> iter = keys.iterator();
        while (iter.hasNext()) {
            // key를 꺼냅니다.
            String key = iter.next();
            // key에 해당하는 value를 꺼냅니다.
            String value = map.get(key);
            // key와 value를 출력합니다.
            System.out.println(key + " : " + value);
        }
    }
}

3
kang
lee
choi
001 : kang
002 : lee
003 : choi

 

 

 

반응형