KIC/JAVA

day26 - JAVA (자바, Collection Framework)

바차 2021. 7. 20. 18:08
반응형

[Collection Framework]

-> 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리

 

-> java.util 패키지에 포함

 

-> 인터페이스를 통해서 정형화된 방법으로 다양한 컬렉션 클래스 이용

 

 

 

 

[반복자]

-> Iteraor는 반복적으로 요소를 읽어내는 반복자이다.

 

 

 

 

 

 

 

 

 

[Map 컬렉션]

-> 키와 값으로 구성된 Map.Entry 객체를 저장하는 구조

 

-> 키와 값은 모두 객체이다.

 

-> 키는 중복될 수 없지만 값은 중복 저장 가능하다.

 

[구현 클래스]

-> HashMap, Hashtable, LinkedHashMap, Properties, TreeMap

 

 

 

 

[Map 컬렉션 sort 예시]

package javaPro.java_collection;

public class Person implements Comparable<Person> {
    String name;
    int age;

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person = [" + " name='" + name + "'" + ", age='" + age + "'" + "]";
    }

    // name.equals(p.name) && age == p.age; , equals
    // name.hashCode() + age; hashcode

    @Override
    public boolean equals(Object obj) {
        Person p = (Person) obj;
        return name.equals(p.name) && age == p.age;

    }

    @Override
    public int hashCode() {
        return name.hashCode() + age;
    }

    @Override
    public int compareTo(Person o) {
        // TODO Auto-generated method stub
        // return age - o.age; // 나이순 오름차순
        // return age - o.age*(-1); // 나이순 내림차순
        // return (name.compareTo(o.name)); // 이름순 오름차순
        return (name.compareTo(o.name)) * (-1); // 이름순 내림차순;
    }

}

 

 

package javaPro.java_collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

public interface ListEx4 {
    public static void main(String[] args) {
        List<Person> li = new ArrayList<Person>();
        li.add(new Person("홍길동", 14));
        li.add(new Person("홍길동", 10));
        li.add(new Person("홍길동", 30));
        li.add(new Person("이정민", 10));
        li.add(new Person("김윤민", 16));

        Person p1 = new Person("김삿갓", 20);
        li.add(p1);
        print(li);
        System.out.println("=====================");
        
        Collections.sort(li); 
        // error sort를 할 수 있는 기본적 요소가 있어야 한다. -> Comparable 이 있어야 한다.
        
        print(li);

        // List<Integer> li2 = new ArrayList<Integer>();
        // li2.add(11);
        // li2.add(12);
        // li2.add(3);
        // Collections.sort(li2);
        // System.out.println(li2);

    }

    public static void print(List li) {
        for (Object ob : li) {
            System.out.println(ob);
        }
    }
}

 

 

 

 

[Vector 예제]

package javaPro.java_collection;

import java.util.Vector;

public class VectorEx1 {
    public static void main(String[] args) {
        Vector<String> v = new Vector<String>(5);
        // 용량이 5인 Vector 생성

        v.add("1");
        v.add("2");
        v.add("3");

        print(v);

        v.trimToSize(); // 빈 공간을 없앤다. 용량과 크기가 같아진다.)

        System.out.println("=== After trimToSize() === ");
        print(v);

        v.ensureCapacity(6);
        // v의 capacity를 최소한 6이 되도록 한다.
        // 만일 v의 capacity가 6이상이라면 아무 일도 일어나지 않는다. 현재는 v의
        // capacity가 3이므로 크기가 6인 배열을 생성해서 v의 내용을 복사했다.

        System.out.println(" === After ensureCapacity (6) === ");
        print(v);

        v.setSize(7); // 용량 7로 -> 빈공간 null이 붙는다.

        System.out.println("=== After setSize(7) === ");
        print(v);

        v.clear();

        System.out.println("==== After clear() === ");

        print(v);
    }

    public static void print(Vector v) {
        System.out.println(v);
        System.out.println("size : " + v.size());
        System.out.println("capasity : " + v.capacity());
    }
}

 

 

 

 

 

 

 

[Set 예제]

package javaPro.java_collection;

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

public class SetEx1 {
    public static void main(String[] args) {
        Object[] arr = { "홍길동", 1, "1", "김삿갓", "이몽룡", 
        "홍길동", "성춘향", "향단이", "홍길동", "김삿갓" };

        Set<Object> set1 = new HashSet<Object>();
        Set<Object> set2 = new HashSet<Object>();
        Set<Object> set3 = new HashSet<Object>();

        // Set에는 중복값이 들어가면 false이므로 
        //홍길동은 중복된 값을 만났을 때 다른 arr에 저장되게 된다.
        for (int i = 0; i < arr.length; i++) {
            if (!set1.add(arr[i])) {
                if (!set2.add(arr[i])) {
                    set3.add(arr[i]);
                }
            }
            System.out.println(set1);
            System.out.println(set2);
            System.out.println(set3);
        }
    }
}

 

 

 

[Map 예제]

package javaPro.java_collection;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapEx1 {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        String[] names = { "홍길동", "김삿갓", "이몽룡", "임꺽정", "김삿갓" };
        int[] nums = { 1234, 4567, 2350, 9870, 3456 };

        for (int i = 0; i < names.length; i++) {
            map.put(names[i], nums[i]);
        }
        System.out.println(map);
        // Value =map.get(Key) => key에 해당하는 Value 값을 리턴
        System.out.println("홍길동의 번호 : " + map.get("홍길동"));
        System.out.println("이몽룡의 번호 :" + map.get("이몽룡"));
        System.out.println("김삿갓의 번호 :" + map.get("김삿갓"));
        // Key 값들만 조회

        System.out.println("Key들만 조회하기");

        Set<String> keys = map.keySet();
        for (String k : keys) {
            System.out.println(k + "의 번호" + map.get(k));
        }
        // Value값들만 조회하기
        System.out.println("Value 값들만 조회");
        Collection<Integer> values = map.values(); // => Key값 조회 불가

        for (Integer v : values) {
            System.out.println(v);
            // Key, Value 201
        }
        System.out.println("Key, Value의 쌍인 객체로 조회");
        Set<Map.Entry<String, Integer>> entry = map.entrySet();
        for (Map.Entry<String, Integer> m : entry) {
            System.out.println(m.getKey() + "의 번호 :" + m.getValue());
            System.out.println(m);
        }
    }
}

 

300x250