728x90

 

 

HashSet

Set에서 가장 많이 사용

순서x 중복x

 

LinkedHashSet

순서o

 

TreeSet

정렬 o

 

        // add(E e):boolean
        // addAll(Collection<? extends E> c) : boolean
        HashSet<Dog> hSet = new HashSet<Dog>();
        HashSet<Dog> hSet2 = new HashSet<>(); // 타입추론

        hSet.add(new Dog("aa",10));
        hSet.add(new Dog("bb",10));
        System.out.println(hSet);   // [aa 10.0kg, bb 10.0kg]

        hSet2.add(new Dog("ㄷ",0));
        // addAll도 맨 앞에 추가함
        hSet2.addAll(hSet);
        System.out.println(hSet2); // [aa 10.0kg, bb 10.0kg, ㄷ 0.0kg]

        // add(Object e):boolean
        // 순서x 중복x HashSet, add하면 어디에 추가될까?
        // 맨 앞에 추가됨
        hSet2.add(new Dog("ㄷ",0));
        System.out.println(hSet2); // [aa 10.0kg, bb 10.0kg, ㄷ 0.0kg]
        // set 중복 저장안되는데 중복 저장 되는 이유 : equals() 오버라이딩 안되어있어서

        HashSet<String> set = new HashSet<>();
        set.add("!");
        set.add("!!");
        set.add("!!");
        System.out.println(set); // [!!, !]   <- set 순서x 중복x

        // LinkedHashSet
        // 순서o 중복저장x 안되는 컬렉션
        LinkedHashSet<Dog> linkSet = new LinkedHashSet<>();
        linkSet.add(new Dog("가",0));
        linkSet.add(new Dog("나",0));
        System.out.println(linkSet); // [가 0.0kg, 나 0.0kg]
        linkSet.add(new Dog("ㄱ",0));
        linkSet.add(new Dog("A",-1));
        System.out.println(linkSet); // [가 0.0kg, 나 0.0kg, ㄱ 0.0kg, A -1.0kg] <- 순서유지



        // 중복 저장이 안된 이유?
        // Dog클래스에 equals()를 오버라이딩 해줬기 때문에 내용비교가 가능하게 되었고
        // 이 때문에 같은 객체로 인지되었기 때문
        linkSet.add(new Dog("A",-1));
        System.out.println(linkSet); // [가 0.0kg, 나 0.0kg, ㄱ 0.0kg, A -1.0kg]
        System.out.println(linkSet); // [가 0.0kg, 나 0.0kg, ㄱ 0.0kg, A -1.0kg, A -1.0kg]


        // HashSet<String>
        // equals() 오버라이딩 필요x
        // equals() 메소드 주석처리함
        HashSet<String> sSet = new HashSet<String>();
        HashSet<String> sSet2 = new HashSet<>();

        sSet.add("set은");
        sSet.add(" key저장");
        sSet2.addAll(sSet);
        System.out.println(sSet2); // [ key저장, set은]
        sSet2.add("map은 key&value저장");
        System.out.println(sSet2); // [map은 key&value저장,  key저장, set은]
        sSet2.clear();
        System.out.println(sSet2); // []
        sSet.remove("set은");
        System.out.println(sSet); // [ key저장]
        System.out.println(sSet.remove(" key저장")); // true
        System.out.println(sSet); // []

        sSet.add("a");

        // TreeSet
        // 정렬을 해주는 Set
        TreeSet<String> tSet = new TreeSet<>();
        tSet.add("ㄴ");
        tSet.add("ㄱ");
        tSet.add("ㄷ");
        System.out.println(tSet); // [ㄱ, ㄴ, ㄷ] <- 추가 순서랑 다르게 sorting 되서 저장됨

        tSet.add("ㄷ");
        System.out.println(tSet); // [ㄱ, ㄴ, ㄷ] <- 중복x 정렬o
728x90
반응형

+ Recent posts