코딩테스트

Sort a HashMap in Java - (2) Using ArrayList

728x90

ArrayList and Collections.sort()

List는 Object 배열을 이용해서 데이터를 순차적으로 저장하는 컬렉션이다.

입력한 데이터의 순서가 유지되고, 데이터의 중복을 허용하는 특징을 가지고 있다.

구현 클래스 : ArrayList, Vector

 

이런 특징을 가진 ArrayList 의 도움을 받아 Map을 정렬할 수 있다.


1. Key로 정렬

keySet을 ArrayList에 저장한다.

Collections.sort() 함수로 저장된 key를 정렬한다.

List<String> employeeByKey = new ArrayList<>(map.keySet());
Collections.sort(employeeByKey);

적용

public class UsingArrayList {
	public static void main(String[] args) {
		Map<String, Employee> map = new HashMap<>();

		Employee employee1 = new Employee(1L, "Mher");
		map.put(employee1.getName(), employee1);
		Employee employee2 = new Employee(22L, "Annie");
		map.put(employee2.getName(), employee2);
		Employee employee3 = new Employee(8L, "John");
		map.put(employee3.getName(), employee3);
		Employee employee4 = new Employee(2L, "George");
		map.put(employee4.getName(), employee4);
		
		//Key로 정렬
		List<String> employeeByKey = new ArrayList<>(map.keySet());
		Collections.sort(employeeByKey);
		
		for(String name : employeeByKey) {
			System.out.println(name);
		}
	}
}

결과

Annie
George
John
Mher

 

2. Value로 정렬

value 값을 정렬할 때도 ArrayList를 활용할 수 있다.

이 때, Employee 클래스의 id를 기준으로 정렬한다.

 

ArrayList에 value값들을 저장한다.

Collections.sort() 함수로 저장된 value를 정렬한다.

List<Employee> employeeById = new ArrayList<>(map.values());
Collections.sort(employeeById);
※ Employee 클래스가 Comparable 인터페이스를 구현하기 때문에 이와 같은 정렬이 가능하다는 점을 꼭 기억하자.
만약, 클래스가 Comparable 인터페이스를 구현하지 않을 경우 Collections.sort() 함수를 호출하기 위한 비교장치를 comparator를 직접 작성해야 한다. 

 

적용

public class UsingArrayList {
	public static void main(String[] args) {
		Map<String, Employee> map = new HashMap<>();

		Employee employee1 = new Employee(1L, "Mher");
		map.put(employee1.getName(), employee1);
		Employee employee2 = new Employee(22L, "Annie");
		map.put(employee2.getName(), employee2);
		Employee employee3 = new Employee(8L, "John");
		map.put(employee3.getName(), employee3);
		Employee employee4 = new Employee(2L, "George");
		map.put(employee4.getName(), employee4);
		
		//value로 정렬
		List<Employee> employeeById = new ArrayList<>(map.values());
		Collections.sort(employeeById);
		
		for(Employee emp : employeeById) {
			System.out.println(emp.toString());
		}
	}
}

결과

Employee {id=1, name='Mher'}
Employee {id=2, name='George'}
Employee {id=8, name='John'}
Employee {id=22, name='Annie'}

id 값을 기준으로 오름차순 정렬된 내역을 확인할 수 있다.

 

 

 

 

참고 : www.baeldung.com/java-hashmap-sort

728x90