Connection & Map 집합 클래스
Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap
2.Connection 2.1.List (1) Vector: Array 를 기반 으로 한 List 는 Array 가 갖 추 지 못 한 일부 기능 을 우리 가 사용 하기에 편리 하도록 봉 인 했 기 때문에 Array 의 제한 에 들 어 갈 수 없습니다. 성능 도 Array 를 뛰 어 넘 을 수 없습니다. 따라서 가능 한 한 Array 를 많이 사용 해 야 합 니 다. 또 중요 한 것 은 Vector 'sychronized' 입 니 다. 이것 도 Vector 와 Array List 의 유일한 차이 점 입 니 다. (2) Stack: 이 종 류 는 Vector 에서 파생 되 었 고 스 택 을 실현 하 는 방법 을 추 가 했 습 니 다. (3) ArrayList: Vector 와 마찬가지 로 Array 기반 링크 이지 만 다른 것 은 ArrayList 가 동기 화 되 지 않 습 니 다. 따라서 성능 은 Vector 보다 좋 지만 다 중 스 레 드 환경 에서 실 행 될 때 는 자체 적 으로 필요 합 니 다.
스 레 드 동기 화 문 제 를 관리 하고 있 습 니 다. (4) LinkedList: LinkedList 는 앞의 두 가지 List 와 다 릅 니 다. Array 기반 이 아니 기 때문에 Array 성능 에 제한 을 받 지 않 습 니 다. 모든 노드 (Node) 는 두 가지 내용 을 포함 합 니 다. 1. 노드 자체 의 데이터 (data), 2. 다음 노드 의 정보 (nextNode)........................................................................................................
리스트 요약: a. 모든 List 에 서 는 키 - Value 키 가 아 닌 하나의 서로 다른 유형의 대상 으로 구 성 된 표 만 수용 할 수 있 습 니 다. 예 를 들 어 [tom, 1, c]; b. 모든 List 에는 같은 요소 가 있 을 수 있 습 니 다. 예 를 들 어 Vector 에는 [tom, koo, too, koo] 가 있 습 니 다. c. 모든 List 에 null 요소 가 있 을 수 있 습 니 다. 예 를 들 어 [tom, null, 1]; d. Array 기반 List (Vector, Array List) (순서 표) 는 조회 에 적합 하고 LinkedList (링크 표) 는 추가, 삭제 작업 에 적합 합 니 다.
메모: Array List 와 Vector 의 차이 점 a. 동기 성: Vector 는 스 레 드 가 안전 합 니 다. 즉, 동기 화 된 것 이 고 Array List 는 라인 프로그램 이 안전 하지 않 으 며 동기 화 된 것 이 아 닙 니 다. b. 데이터 증가: 증가 가 필요 할 때 Vector 는 기본적으로 원래 의 1 배 로 증가 하고 Array List 는 원래 의 절반 이다. 2.2.Set (1) HashSet: Set 과 List 는 Collection 인 터 페 이 스 를 실 현 했 지만 이들 의 실현 방식 은 크게 다르다. List 는 기본적으로 Array 를 기반 으로 한다. 그러나 Set 은 HashMap 을 바탕 으로 이 루어 진다. 이것 이 Set 과 List 의 근본 적 인 차이 이다. HashSet 의 저장 방식 은 HashMap 의 Key 를 Set 의 대응 저장 항목 으로 한다. HashSet 의 add (Object obj) 를 보 자.방법의 실현 은 일목요연 할 수 있다. public boolean add(Object obj) { return map.put(obj, PRESENT) == null; }이것 도 set 에서 List 에서 처럼 중복 되 는 항목 이 없 는 근본 적 인 이유 입 니 다. HashMap 의 key 는 중복 되 지 않 기 때 문 입 니 다. (2) LinkedHashSet: HashSet 의 하위 클래스, 체인 테이블. (3) TreeSet: SortedSet 의 하위 클래스 는 HashSet 과 는 달리 근본적으로 TreeSet 이 질서 가 있 습 니 다. SortedMap 을 통 해 이 루어 집 니 다.
집합 요약: a. set 실현 의 기 초 는 Map (HashMap) 이다. b. set 의 요 소 는 중복 할 수 없습니다. add (Object obj) 방법 으로 존재 하 는 대상 을 추가 하면 앞의 대상 을 덮어 씁 니 다.
2.3. 교체 기 iterator 보통 List 와 Set 를 옮 겨 다 니 면서 교체 기 iterator 를 사용 합 니 다.
Iterator it = list.iterator();
while(it.hasNext())
{
Object o=(Object)it.next();
...
}
또한 list 와 set 의 일반적인 방법 에 주의 하 십시오.
boolean add(Object)// 。 false。
boolean addAll(Collection)// 。 true。
void clear( )// .
boolean contains(Object)// true
boolean containsAll(Collection)// true
boolean isEmpty( )// true
Iterator iterator( )// Iterator, 。
boolean remove(Object)// , 。 true。
boolean removeAll(Collection)// 。 true.
boolean retainAll(Collection)// Collection true.
int size( )//
Object[] toArray( )// , 。
Object[] toArray(Object[] a)// , , a , Object
3.Map 3.1. 지도 소개 (1) HashTable: 하나의 이미 지 를 실현 하려 면 모든 키 가 비어 있어 야 합 니 다. 효율 적 인 작업 을 위해 서 는 키 를 정의 하 는 클래스 가 hashcode () 방법 과 equal () 방법 을 실현 해 야 합 니 다. 이 클래스 는 앞의 자바 가 실현 하 는 계승 이 며, 일반적으로 이미 지 를 실현 하 는 다른 클래스 에서 더 잘 사용 할 수 있 습 니 다. (2) HashMap: 하나의 이미 지 를 실현 하여 빈 대상 을 저장 할 수 있 고 허용 키 가 비어 있어 야 합 니 다. (키 가 유일 해 야 하기 때문에 당연히 하나만 있 을 수 있 습 니 다.) (3) Weak HashMap: 이러한 이미 지 를 실현 합 니 다. 일반적으로 하나의 키 가 한 대상 에 게 더 이상 인용 되 지 않 으 면 키 / 대상 은 버 려 집 니 다. 이것 은 HashMap 과 대조 되 며, 이미지 의 키 유지 키 / 대상 이 맞 는 수명 주기 입 니 다. 이미 지 를 사용 하 는 프로그램 은 더 이상 키 에 대한 인용 이 없 으 며, 따라서 대상 을 검색 할 수 없습니다. (4) TreeMap: 이러한 이미 지 를 실현 하고 대상 은 버튼 을 누 르 고 오름차 순 으로 배열 합 니 다. 주의: HashMap 과 HashTable 의 차이 점: a. 역사적 원인: Hashtable 은 오래된 Dictionary 류 를 바탕 으로 하 는 것 이 고 HashMap 은 자바 1.2 에서 도입 한 Map 인터페이스의 실현 이다. b. 동기 성: Hashtable 은 스 레 드 가 안전 합 니 다. 즉, 동기 화 된 것 입 니 다. HashMap 은 라인 프로그램 이 안전 하지 않 고 동기 화 된 것 이 아 닙 니 다. c. 값: HashMap 만 이 표 의 항목 의 key 나 value 로 빈 값 을 사용 할 수 있 습 니 다.
3.2. Map 인터페이스 상용 방법 소개 우 리 는 먼저 맵 인터페이스 자 체 를 소개 하여 모든 실현 의 공통점 을 알 수 있 도록 합 니 다. 맵 인 터 페 이 스 는 네 가지 유형의 방법 을 정 의 했 고 모든 맵 에는 이러한 방법 이 포함 되 어 있 습 니 다. (1) 덮어 쓰 고 비교 하 는 방법 equals (Object o): 지정 대상 과 이 맵 의 등가 성 비교 hashCode (): 이 맵 의 해시 코드 를 되 돌려 줍 니 다. (2) 구축 및 업데이트 방법 put (Object key, Object value): 지정 한 값 을 지정 한 키 와 연결 합 니 다. putAll (Map t): 지정 한 맵 의 모든 맵 을 이 맵 으로 복사 합 니 다. remove (Object key): 맵 에서 키 와 연 결 된 값 을 삭제 합 니 다. clear (): 맵 에서 모든 맵 삭제 (3) 교체 와 검색 방법 교체 맵 은 가장 직접적인 방법 이 없습니다. 보통 다음 세 가지 보 기 를 통 해: Set entry Set (): 키 쌍 이 있 습 니 다. Iterator keyValuePairs = aMap.entrySet().iterator(); Set keySet (): 모든 키 Iterator keys = aMap.keySet().iterator(); 연결 값 (): 모든 값 Iterator values = aMap.values().iterator();
int mapsize = aMap.size();
Iterator keyValuePairs1 = aMap.entrySet().iterator();
for (int i = 0; i < mapsize; i++)
{
Map.Entry entry = (Map.Entry) keyValuePairs1.next();
Object key = entry.getKey();
Object value = entry.getValue();
...
}
Object[] keyValuePairs2 = aMap.entrySet().toArray();
for (int i = 0; i < rem; i++) {
{
Map.Entry entry = (Map.Entry) keyValuePairs2[i];
Object key = entry.getKey();
Object value = entry.getValue();
...
}
//( )
(4) 접근 및 테스트 방법 get (Object key): 지정 한 키 와 연 결 된 값 을 되 돌려 줍 니 다. containsKey (Object key): 맵 에 지정 한 키 의 맵 이 포함 되 어 있 으 면 true 로 돌아 갑 니 다. contains Value (Object value): 만약 맵 이 하나 이상 의 키 를 지정 한 값 에 비 추 면 true (contains Value 가 contains Key 보다 훨씬 오래 걸 립 니 다) isEmpty (): 맵 에 키 - 값 맵 이 포함 되 어 있 지 않 으 면 true 로 돌아 갑 니 다. size (): 맵 의 키 - 값 맵 의 수 를 되 돌려 줍 니 다. 3.3. 내부 해시: 해시 맵 기술
거의 모든 유 니 버 설 맵 은 해시 맵 을 사용 합 니 다. 이것 은 요 소 를 배열 에 투사 하 는 매우 간단 한 메커니즘 입 니 다. 맵 을 충분히 이용 할 수 있 도록 해시 맵 의 작업 원 리 를 알 아야 합 니 다.
해시 맵 구 조 는 요 소 를 저장 하 는 내부 배열 로 구성 되 어 있 습 니 다. 내 부 는 배열 로 저장 되 어 있 기 때문에 임의의 키 로 배열 에 접근 하 는 색인 체 제 를 확인 할 수 있 습 니 다. 실제로 이 체 제 는 배열 크기 보다 작은 정수 색인 값 을 제공 해 야 합 니 다. 이 기 계 는 해시 함수 라 고 합 니 다. 자바 기반 해시 맵 에서 해시 함 수 는 대상 을 변환 합 니 다.내부 배열 에 적합 한 정수 입 니 다. 사용 하기 쉬 운 해시 함 수 를 찾기 위해 크게 고민 할 필요 가 없습니다. 대상 마다 전체 수 치 를 되 돌려 주 는 hashCode () 방법 이 포함 되 어 있 습 니 다. 이 값 을 배열 에 비 추 려 면 하나의 정수 로 변환 한 다음 이 값 을 배열 크기 로 나 눈 후에 나머지 를 취하 면 됩 니 다. 다음은 간단 하고 모든 것 에 적 용 됩 니 다.
대상 의 자바 해시 함수
int hashvalue = Maths.abs(key.hashCode()) % table.length;
(% 2 진 연산 자 (모드 라 고 함) 는 왼쪽 값 을 오른쪽 값 으로 나 눈 다음 정수 형식의 나머지 를 되 돌려 줍 니 다.) 실제로 1.4 버 전이 발표 되 기 전에 이것 은 해시 기반 맵 클래스 에 사용 되 는 해시 함수 입 니 다. 단, 코드 를 살 펴 보면 int hashvalue = (key. hashCode () & 0x7FFFFF) 를 볼 수 있 습 니 다.% table. length; 실제 적 으로 더 빠 른 메커니즘 을 사용 하여 정 치 를 가 져 오 는 같은 함수 입 니 다. 1.4 버 전에 서 HashMap 류 는 다 르 고 복잡 한 해시 함 수 를 사용 합 니 다. 이 함 수 는 기반 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 다 중 스 레 드 메커니즘 의 스 레 드 생 성target 을 실행 대상 으로 지정 한 name 을 이름 으로 하고 group 에서 참조 하 는 스 레 드 그룹의 일원 으로 새 Thread 대상 을 할당 합 니 다. 이 스 레 드 가 독립 된 Runnable 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.