>  기사  >  Java  >  4가지 주요 지도 구현 클래스

4가지 주요 지도 구현 클래스

(*-*)浩
(*-*)浩앞으로
2019-08-30 15:33:003967검색

Map은 키-값 쌍의 컬렉션 인터페이스입니다. 구현 클래스에는 주로 HashMap, TreeMap, Hashtable 및 LinkedHashMap 등이 포함됩니다. 4가지의 차이점은 다음과 같습니다(간단한 소개):

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 list, Comparator super T> c) 메서드를 사용해야 합니다. 그러나 전제 조건이 있습니다. 즉, 제공된 비교기에 따라 모든 요소를 ​​비교할 수 있어야 합니다. 다음과 같습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제