JAVA

map 정렬, 이차배열 정렬 관련 예제

데이25 2020. 10. 16. 23:22

내가 보려고 막 정리한 예제... 

 

import java.util.*;

class Student implements Comparable<Student> {
    int age;
    public Student(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(Student s) {
        return this.age - s.age;
    }

}

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap();
        map.put("B",200);
        map.put("A",300);
        map.put("C",100);

    //1. Map B 200  , A 300 , C 100 으로 정의
        //출력방법 3가지
        //1. 엔트리로 출력
        System.out.println("entry 출력");
        for(Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry);
            System.out.println(entry.getKey() + " , " + entry.getValue());
        }

        //2. 키셋으로 출력
        System.out.println("keySet으로 출력");
        for(String key : map.keySet()) {
            System.out.println(key + " : " + map.get(key));
        }

        //3. iter로 출력
        System.out.println("iterator 이용");
        for(Iterator<String> it = map.keySet().iterator(); it.hasNext() ;) {
            String key = it.next();
            System.out.println(key + " : " + map.get(key) );
        }

        //3-2 iter 출력 예제 2
        System.out.println("iterator 사용 2");
        Iterator<String> iter = map.keySet().iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            System.out.println(key + " , " + map.get(key));
        }

    //2.키에 의한 정렬
        //1. Comp 저의

        Comparator<String> comp = (o1, o2) -> o1.compareTo(o2);
        Map< String, Integer> tmap = new TreeMap<>(comp);

        tmap.put("B",300);
        tmap.put("A",200);
        tmap.put("C",100);

        System.out.println("tree map 정렬");
        for(Iterator<String> it = tmap.keySet().iterator() ; it.hasNext(); ) {
            String key = it.next();
            System.out.println(key + " : " + tmap.get(key));
        }

    //3. val 에 의한 정렬
        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(tmap.entrySet());

        Collections.sort(list, new Comparator< Map.Entry<String , Integer> >(){
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o1.getValue() - o2.getValue();
            }
        });

        System.out.println("value 에 의한 정렬 ");
        for( Map.Entry<String,Integer> entry : list ) {
            System.out.println(entry.getKey() + " : " + entry.getValue() );
        }


    //4. 2차원 배열 정렬 -> {{ 2 , 400 } , { 1, 100 } , {2 , 100 }};  -> 무조건 오름차순 정렬로 한다고 치고
        System.out.println("2차원 배열 정렬");
        int[][] arr = {{ 2 , 400 } , { 1, 100 } , {2 , 100 }};

        Arrays.sort(arr, (o1, o2) -> {
                    if (o1[0] == o2[0]) return o1[1] - o2[1];
                    else return o1[0] - o2[0];
                });

        for(int[] a : arr) {
            System.out.println(a[0] + " : " + a[1]);
        }

    }
}