Connection & Map 집합 클래스

1. 집합 류 개요   데 이 터 를 저장 할 개 수 를 미리 모 르 거나 배열 아래 표 시 된 액세스 체제 보다 더 유연 한 방법 이 필요 할 때 집합 류 를 사용 해 야 합 니 다.집합 유형 은 주로 3 가지 가 있 습 니 다. set (집합), list (목록) 와 map (맵), set 와 list 는 connection 인 터 페 이 스 를 계승 하여 자바 util 패키지 에 저 장 됩 니 다. Collection 은 가장 기본 적 인 집합 인터페이스 이 고 하나의 Collection 은 Object, 즉 Collection 의 요소 (Elements, Map 은 key 에서 value 까지 의 맵 을 제공 합 니 다.
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 류 는 다 르 고 복잡 한 해시 함 수 를 사용 합 니 다. 이 함 수 는 기반 입 니 다.
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기