맵의 여러 순회 방법:
Map< String, String> map = new HashMap<>(); map.put("aa", "@sohu.com"); map.put("bb","@163.com"); map.put("cc", "@sina.com"); System.out.println("普通的遍历方法,通过Map.keySet遍历key和value");//普通使用,二次取值 for (String key : map.keySet()) { System.out.println("key= "+key+" and value= "+map.get(key)); } System.out.println("通过Map.entrySet使用iterator遍历key和value:"); Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); while(it.hasNext()){ Map.Entry<String, String> entry = it.next(); System.out.println("key= "+entry.getKey()+" and value= "+entry.getValue()); } System.out.println("通过Map.entrySet遍历key和value"); //推荐这种,特别是容量大的时候 for(Map.Entry<String, String> entry : map.entrySet()){ System.out.println("key= "+entry.getKey()+" and value= "+entry.getValue()); } System.out.println(“通过Map.values()遍历所有的value,但不能遍历key”); for(String v : map.values()){ System.out.println("value = "+v); }
HashMap과 Hashtable의 연결 및 차이점
구현 원리도 같고, 기능도 같고, 맨 아래 계층은 해시 테이블 구조이고, 쿼리 속도는 빠르며 대부분의 경우 상호 운용이 가능하므로 이전 버전은 일반적으로 안전합니다.
HashMap과 Hashtable은 모두 Map 인터페이스를 구현하지만 어느 것을 사용할지 결정하기 전에 둘 사이의 차이점을 이해해야 합니다. 주요 차이점은 스레드 안전성, 동기화 및 속도입니다.
HashMap은 HashMap이 동기화되지 않고 null을 허용한다는 점을 제외하면 Hashtable과 거의 동일합니다(HashMap은 null 키와 값을 허용하지만 Hashtable은 허용하지 않음).
HashMap은 동기화되지 않은 반면 Hashtable은 동기화됩니다. 즉, Hashtable은 스레드로부터 안전하고 여러 스레드가 Hashtable을 공유할 수 있지만 올바른 동기화가 없으면 여러 스레드가 HashMap을 공유할 수 없습니다. Java 5는 HashTable을 대체하고 HashTable보다 확장성이 뛰어난 ConcurrentHashMap을 제공합니다.
또 다른 차이점은 HashMap의 반복자(Iterator)는 실패 속도가 빠른 반복자인 반면, Hashtable의 열거자 반복자는 실패 속도가 빠르지 않다는 것입니다. 따라서 다른 스레드가 HashMap의 구조를 변경(요소 추가 또는 제거)하면 ConcurrentModificationException이 발생하지만 반복자 자체의 제거() 메서드는 요소를 제거할 때 ConcurrentModificationException을 발생시키지 않습니다. 그러나 이는 보장된 동작은 아니며 JVM에 따라 다릅니다. 이는 열거형과 반복자의 차이점이기도 합니다.
Hashtable은 스레드로부터 안전하고 동기화되므로 단일 스레드 환경에서는 HashMap보다 느립니다. 동기화가 필요하지 않고 단일 스레드만 필요한 경우 HashMap을 사용하면 Hashtable보다 성능이 향상됩니다.
HashMap은 시간이 지나도 지도의 요소 순서가 변경되지 않을 것이라고 보장할 수 없습니다.
hashmap의 특징
HashMap은 키를 값에 매핑하는 객체인 맵 인터페이스의 하위 클래스입니다. 여기서 키와 값은 모두 객체이며 스레드로부터 안전하지 않습니다.
hashMap은 해시 테이블을 사용하여 다음을 수행합니다. 맵 키 저장
키는 순서가 없고 고유하며 하나의 null을 가질 수 있습니다.
값은 순서가 없고 고유하지 않으며 null 쌍을 가질 수 있습니다.
linkedHashMap은 해시 테이블을 사용하여 맵에 키를 저장하고 연결된 이중 연결 목록을 사용합니다. 주문 관리를 위해
가장 많이 사용하는 HashMap은 맵에 요소를 삽입, 삭제, 위치를 찾는 데 가장 적합한 선택입니다. 출력 순서를 입력 순서와 동일하게 하려면 LinkedHashMap을 사용하면 됩니다.
HashMap은 가장 일반적으로 사용되는 hashCode 값에 따라 데이터를 저장합니다. 빠른 액세스 속도로 키의 가치를 직접 가져옵니다. HashMap은 한 레코드의 키만 NULL을 허용하고, 여러 레코드의 값은 NULL을 허용합니다. HashMap은 스레드 동기화를 지원하지 않습니다. 즉, 여러 스레드가 언제든지 동시에 HashMap에 쓸 수 있으므로 데이터 불일치가 발생할 수 있습니다.
동기화가 필요한 경우 컬렉션의synchronousMap 메서드를 사용하여 HashMap을 동기화할 수 있습니다. LinkedHashMap은 레코드의 삽입 순서를 저장합니다. Iterator를 사용하여 LinkedHashMap을 순회할 때 먼저 얻은 레코드를 먼저 삽입해야 합니다.
HashMap은 다음 문을 통해 동기화할 수 있습니다.
Map m = Collections.synchronizeMap(hashMap);
일반적으로 사용되는 여러 컬렉션의 효율성 비교
위 내용은 HashMap 순회 및 Java에서의 사용 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!