>  기사  >  Java  >  Java에서 Map 사용법에 대한 자세한 설명

Java에서 Map 사용법에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-19 10:40:331348검색

Map 소개

키를 값으로 매핑하는 객체입니다. 맵에는 중복 키가 포함될 수 없습니다. 각 키는 최대 하나의 값에만 매핑될 수 있습니다. 이 인터페이스는 인터페이스가 아닌 완전히 추상 클래스인 Dictionary 클래스를 대체합니다.

맵 인터페이스는 세 가지 컬렉션 뷰를 제공하므로 키 세트, 값 세트 또는 키-값 매핑 관계 세트 형태로 맵의 콘텐츠를 볼 수 있습니다. 매핑 순서는 반복자가 매핑된 컬렉션 뷰에서 해당 요소를 반환하는 순서로 정의됩니다. TreeMap 클래스와 같은 일부 매핑 구현은 순서를 명시적으로 보장할 수 있지만 HashMap 클래스와 같은 다른 매핑 구현은 순서를 보장하지 않습니다.

참고: 변경 가능한 객체를 맵 키로 사용할 때는 주의해야 합니다. 객체가 맵의 키인 경우 객체의 값이 같음 비교에 영향을 미치는 방식으로 변경되면 맵의 동작이 정의되지 않습니다. 이 금지 사항의 특별한 경우는 맵이 자신을 키로 포함하는 것을 허용하지 않는 것입니다. 맵은 자신을 값으로 포함할 수 있지만 주의하세요. 이러한 맵에서는 equals 및 hashCode 메서드가 더 이상 잘 정의되지 않습니다.

맵 인터페이스:

맵은 키-값 매핑을 제공합니다. Map은 동일한 키를 포함할 수 없으며 각 키는 하나의 값만 매핑할 수 있습니다. Map 인터페이스는 세 가지 종류의 세트 뷰를 제공합니다. 맵의 콘텐츠는 키 세트 세트, 값 세트 세트 또는 키-값 매핑 세트로 간주될 수 있습니다. ​

Hashtable 클래스 ​ ​

Hashtable은 Map 인터페이스를 상속받아 키-값 매핑의 해시 테이블을 구현합니다. null이 아닌 모든 객체는 키나 값으로 사용될 수 있습니다. ​​

데이터를 추가하려면 put(key, value)을 사용하고, 데이터를 제거하려면 get(key)을 사용하세요. 이 두 가지 기본 작업의 시간 비용은 일정합니다. Hashtable은 초기 용량과 부하율이라는 두 가지 매개변수를 통해 성능을 조정합니다. 일반적으로 기본 부하 계수 0.75는 시간과 공간의 균형을 더 잘 유지합니다. 로드 비율을 높이면 공간을 절약할 수 있지만 해당 검색 시간이 늘어나 가져오기 및 넣기와 같은 작업에 영향을 미칩니다.

Hashtable을 사용하는 간단한 예는 다음과 같습니다. 1, 2, 3을 Hashtable에 넣고 키는 각각 "one", "two", "3"입니다.

Hashtable numbers = new Hashtable(); 
numbers.put(“one”, new Integer(1)); 
numbers.put(“two”, new Integer(2)); 
numbers.put(“three”, new Integer(3));

2와 같은 숫자를 꺼내려면 해당 키를 사용하세요.

Integer n = (Integer)numbers.get(“two”); 
System.out.println(“two = ” + n);

키로 사용되는 개체는 다음과 같이 결정됩니다. 값의 위치를 ​​계산하므로 키로 사용되는 모든 개체는 hashCode 및 equals 메서드를 구현해야 합니다. hashCode 및 equals 메소드는 루트 클래스 Object에서 상속됩니다. 사용자 정의 클래스를 키로 사용하는 경우 두 객체가 동일한 경우, 즉 obj1.equals( obj2)=true인 경우 해당 hashCode는 동일해야 하지만 두 개체가 서로 다른 경우에는 hashCode가 반드시 다른 것은 아닙니다. 두 개체의 hashCode가 동일하면 이러한 현상을 충돌이 발생합니다. 해시 테이블 작업에 소요되는 시간 오버헤드가 증가하므로 해시 테이블 작업 속도를 높이기 위해 잘 정의된 hashCode() 메서드를 정의해 보십시오.

동일한 객체에 다른 hashCode가 있는 경우 해시 테이블 작업에서 예상치 못한 결과가 발생합니다(예상된 get 메서드가 null을 반환함). 이 문제를 방지하려면 한 가지만 기억하면 됩니다. 즉, 동시에 복사합니다. time은 메소드와 hashCode 메소드 중 하나만 작성하는 대신에 동일합니다.

해시테이블은 동기식입니다.

HashMap 클래스

HashMap은 HashMap이 비동기식이고 null, 즉 null 값과 null 키를 허용한다는 점을 제외하면 Hashtable과 유사합니다. 그러나 HashMap을 컬렉션으로 처리하는 경우(values() 메서드는 컬렉션을 반환할 수 있음) 반복 하위 작업 시간 비용은 HashMap의 용량에 비례합니다. 따라서 반복 연산의 성능이 매우 중요하다면 HashMap의 초기 용량을 너무 높게 설정하거나 부하율을 너무 낮게 설정하지 마십시오.

WeakHashMap 클래스

WeakHashMap은 키에 대한 "약한 참조"를 구현하는 향상된 HashMap입니다. 키가 더 이상 외부에서 참조되지 않으면 키를 재활용할 수 있습니다. GC로.

위는 Java Map 인터페이스에 대한 소개입니다. Java 프로그래밍을 배우는 학생들이 참고할 수 있습니다.

Java에서 Map의 사용법에 대한 자세한 설명과 관련 글은 PHP 중국어 홈페이지를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.