Map은 키-값 쌍의 컬렉션 인터페이스입니다. 구현 클래스에는 주로 HashMap, TreeMap, Hashtable 및 LinkedHashMap 등이 포함됩니다. 4가지의 차이점은 다음과 같습니다(간단한 소개):
HashMap: 우리가 가장 일반적으로 사용하는 Map으로, HashMap의 값은 순서가 없으며 키의 HashCode에 따라 구현됩니다. HashCode 값은 데이터를 저장하는 데 사용되며 키에 따라 해당 값을 직접 얻을 수 있으며 빠른 액세스 속도를 갖습니다. HashMap은 한 레코드의 키 값만 Null이 되도록 허용합니다(여러 레코드를 덮어쓰게 됨). 여러 레코드의 값이 Null이 되도록 허용합니다. 비동기식.
TreeMap: 키에 따라 저장하는 레코드를 정렬할 수 있습니다. 기본값은 오름차순으로 정렬하는 것입니다. 또한 Iterator를 사용하여 TreeMap을 탐색할 때 얻은 레코드가 정렬됩니다. TreeMap은 키 값이 null이 되는 것을 허용하지 않습니다. 비동기식.
Hashtable: HashMap과 유사하지만 차이점은 키나 값이 null이 될 수 없다는 것입니다. 즉, 스레드 동기화를 지원합니다. 즉, 언제든지 하나의 스레드만 Hashtable에 쓸 수 있으며 이로 인해 Hashtale도 기록됩니다. 해시 테이블만 Dictionary 추상 클래스에서 상속됩니다. hashMap과 treeMap은 모두 LinkedHashMap 추상 클래스에서 상속됩니다.
LinkedHashMap: Iterator를 사용하여 LinkedHashMap을 순회하는 경우 먼저 얻은 레코드가 순회 중에 HashMap보다 먼저 삽입됩니다. 키와 값은 모두 비어 있고 비동기적으로 허용됩니다.
상식:
컬렉션 및 맵 컬렉션은 객체에서 상속됩니까?
아니요, 둘 다 인터페이스입니다. Object는 클래스입니다. 어떻게 Object에서 상속받을 수 있습니까? 자세한 내용은 java.util 아래의 특정 인터페이스를 참조하세요.
2. 지도 정렬
TreeMap
TreeMap은 기본적으로 정렬 방법을 변경해야 하는 경우 비교기인 Comparator를 사용해야 합니다.
Comparator는 컬렉션 개체 또는 배열을 정렬할 수 있는 비교기 인터페이스입니다. 이 인터페이스의 공개 비교(T o1, To2) 메서드를 구현하면 이 메서드는 주로 첫 번째 매개 변수 o1을 기반으로 합니다. o2보다 크거나 같은 경우 각각 음의 정수, 0 또는 양의 정수를 반환합니다.
public class TreeMapTest { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>( new Comparator<String>() { public int compare(String obj1, String obj2) { // 降序排序 return obj2.compareTo(obj1); } }); map.put("c", "ccccc"); map.put("a", "aaaaa"); map.put("b", "bbbbb"); map.put("d", "ddddd"); Set<String> keySet = map.keySet(); Iterator<String> iter = keySet.iterator(); while (iter.hasNext()) { String key = iter.next(); System.out.println(key + ":" + map.get(key)); } } }
위의 예는 TreeMap의 키 값을 기준으로 정렬했지만 때로는 TreeMap의 값을 기준으로 정렬해야 하는 경우도 있습니다. 값을 정렬하려면 지정된 비교기에 의해 생성된 순서에 따라 지정된 목록을 정렬하는 Collections의 sort(List
public class TreeMapTest { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>(); map.put("d", "ddddd"); map.put("b", "bbbbb"); map.put("a", "aaaaa"); map.put("c", "ccccc"); //这里将map.entrySet()转换成list List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet()); //然后通过比较器来实现排序 Collections.sort(list,new Comparator<Map.Entry<String,String>>() { //升序排序 public int compare(Entry<String, String> o1, Entry<String, String> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for(Map.Entry<String,String> mapping:list){ System.out.println(mapping.getKey()+":"+mapping.getValue()); } } }
우리는 모두 HashMap 값입니다. 순서가 없습니다. 키의 HashCode에 따라 구현됩니다. 정렬되지 않은 HashMap에 대한 정렬을 어떻게 구현합니까? TreeMap의 값 정렬을 참조하면 HashMap의 정렬도 구현할 수 있습니다.
아아아아위 내용은 4가지 주요 지도 구현 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!