ArrayList, LinkList, List 차이 & 교체 기 iterator 의 사용 & HashMap, Hashtable, LinkedHashMap, TreeMap

5693 단어 android
리스트 종류
1. 대학 데이터 구조 에서 ArrayList 는 동적 배열 을 바탕 으로 하 는 데이터 구 조 를 실현 하고 LinkList 는 링크 를 바탕 으로 하 는 데이터 구 조 를 실현 한다.
2. 랜 덤 액세스 get 과 set 에 대해 Array List 는 LinkedList 보다 좋 습 니 다. LinkedList 는 지침 을 이동 해 야 하기 때 문 입 니 다.
3. 추가 및 삭제 작업 add 와 remove 에 대해 LinkList 가 우세 합 니 다. ArrayList 가 데 이 터 를 이동 해 야 하기 때 문 입 니 다.
 
위의 세 가지 점 에서 볼 수 있다.
ArrayList 와 LinkList 는 두 개의 집합 클래스 로 일련의 대상 인용 (references) 을 저장 하 는 데 사용 된다.예 를 들 어 우 리 는 Array List 로 일련의 String 이나 Integer 를 저장 할 수 있다.
한편, List 는 Collection 인 터 페 이 스 를 계승 한다.List 는 질서 있 는 집합 입 니 다. List 의 요 소 는 색인 (순서 번호: 요소 가 집합 에 있 는 위치 정보) 에 따라 취득 / 삭제 / 삽입 작업 을 할 수 있 습 니 다.
 
총 결 은 다음 과 같다.
List 는 인터페이스 입 니 다. Array List, LinkList 는 이 인 터 페 이 스 를 계승 하여 이 를 실현 합 니 다.
사용 할 때 이렇게 사용 할 수 있 습 니 다: List list = new ArrayList list = new ArrayList
보충 점:
이 두 가지 유형 은 모두 List 인터페이스 (List 인터페이스 가 Collection 인 터 페 이 스 를 계승 했다) 를 실현 했다. 그들 은 모두 질서 있 는 집합 이다. 즉, 이 두 집합 에 저 장 된 요소 의 위 치 는 모두 순서 가 있 고 동태 적 인 배열 에 해당 한다. 우 리 는 앞으로 위치 색인 번호 에 따라 특정한 요 소 를 추출 할 수 있 고 그 중의 데 이 터 는 중복 을 허용 한다.이것 은 HashSet 과 같은 집합의 가장 큰 차이 점 이다. HashSet 과 같은 집합 은 색인 번호 에 따라 그 중의 요 소 를 검색 할 수 없고 중복 되 는 요소 도 허용 하지 않 는 다.이 어 Array List 와 Vector 의 차 이 를 말 했다. 이것 은 주로 두 가지 측면 을 포함한다. (1) 동기 성: Vector 는 스 레 드 가 안전 하 다. 즉, 그 방법 간 에 스 레 드 가 동기 화 되 고 Array List 는 라인 프로그램 이 안전 하지 않 으 며 그 방법 간 에 스 레 드 가 동기 화 되 지 않 는 다 는 것 이다.하나의 스 레 드 만 집합 에 접근 할 수 있다 면 Array List 를 사용 하 는 것 이 좋 습 니 다. 스 레 드 안전 을 고려 하지 않 고 효율 이 높 기 때 문 입 니 다.집합 에 여러 개의 스 레 드 가 접근 할 수 있다 면 Vector 를 사용 하 는 것 이 좋 습 니 다. 스 레 드 안전 코드 를 더 이상 고려 하고 작성 할 필요 가 없 기 때 문 입 니 다.비고: Vector & Array List, Hashtable & HashMap 에 대해 서 는 스 레 드 안전 문 제 를 기억 해 야 합 니 다. Vector 와 Hashtable 은 오래된 것 이 고 자바 가 태 어 나 자마자 제 공 된 것 입 니 다. 스 레 드 가 안전 합 니 다. Array List 와 HashMap 은 자바 2 일 때 제 공 된 것 입 니 다. 스 레 드 가 안전 하지 않 습 니 다.(2) 데이터 증가: ArrayList 와 Vector 는 모두 초기 용량 크기 를 가지 고 있 습 니 다. 그들 안에 저 장 된 요소 의 개수 가 용량 을 초과 할 때 ArrayList 와 Vector 의 저장 공간 을 늘 려 야 합 니 다. 저장 공간 을 늘 릴 때마다 하나의 저장 단원 만 늘 리 는 것 이 아니 라 여러 개의 저장 단원 을 늘 려 야 합 니 다.매번 증가 하 는 저장 장치 의 개 수 는 메모리 공간 이용 과 프로그램 효율 사이 에 일정한 균형 을 이 루어 야 한다.Vector 는 기본적으로 원래 의 두 배로 증 가 했 고 Array List 의 성장 전략 은 문서 에 명확 하 게 규정 되 어 있 지 않 았 다.ArrayList 와 Vector 는 초기 공간 크기 를 설정 할 수 있 고 Vector 는 증가 하 는 공간 크기 를 설정 할 수 있 으 며 ArrayList 는 성장 공간 을 설정 하 는 방법 을 제공 하지 않 습 니 다.요약: 즉, Vector 는 원래 의 배, Array List 는 원래 의 0.5 배 증가 한 것 이다.
 
교체 기
교체 기 는 일반적으로 범 형 배열 Array List, 범 형 링크 List 와 함께 사용 하여 순서대로 옮 겨 다 니 는 효 과 를 얻 습 니 다.
먼저 다음 두 단락 의 코드 를 살 펴 보 겠 습 니 다. 설명 은 코드 주석 에 적 혀 있 습 니 다.
private ArrayList getChecked()
	{
		/**
		 * ArrayList        
		 */
		private ArrayList mPhotolist = null;

		/**
		 * new  ArrayList,         path
		 */
		ArrayList list = new ArrayList();

		/**
		 *  mPhotolist     ,          ,     !it         
		 */
		Iterator it = mPhotolist.iterator();
		while (it.hasNext())
		{
			/**
			 *       PhotoItem       PhotoItem    temp
			 */
			PhotoItem temp = it.next();
			if (temp.isChecked)
			{
				String path = getRealPath(temp.ImageID);
				if (path != null)
				{
					list.add(path);
				}
			}
		}
		return list;
	}

 
두 번 째 코드 는 사실 첫 번 째 코드 가 실현 하 는 기능 과 같 습 니 다. 참고 하여 비교 해 보 세 요!
@Override
	protected void onResume()
	{
		List> list = new ArrayList>();

		Iterator iterator = mp3Infos.iterator();
		while (iterator.hasNext())
		//for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();)
		{
			Mp3Info mp3Info = iterator.next();
			HashMap map = new HashMap();
			map.put("mp3_name", mp3Info.getMp3Name());
			map.put("mp3_size", mp3Info.getMp3Size());
			list.add(map);
		}
	}

 3. HashMap, Hashtable, LinkedHashMap, TreeMap
지도 에는 네 가지 실현 유형 이 있 는데, 각각 HashMap 이다.  Hashtable   링크 드 해시 맵 과  TreeMap.
 
맵 은 주로 건 치 쌍 을 저장 하 는 데 사용 되 며 키 에 따라 값 을 얻 기 때문에 키 중복 은 허용 되 지 않 지만 중복 은 허용 되 지 않 습 니 다.
Hashmap 는 키 의 HashCode 값 에 따라 데 이 터 를 저장 하고 키 에 따라 직접 값 을 얻 을 수 있 으 며 빠 른 접근 속도 가 있 으 며 시간 이 지나 면 데 이 터 를 얻 는 순 서 는 완전히 무 작위 입 니 다.HashMap 은 최대 한 개의 기록 키 만 Null 로 허용 합 니 다.여러 개의 기록 값 을 Null 로 허용 하기;HashMap 은 스 레 드 의 동기 화 를 지원 하지 않 습 니 다. 즉, 언제든지 여러 스 레 드 가 동시에 HashMap 을 쓸 수 있 습 니 다.데이터 가 일치 하지 않 을 수 있 습 니 다.동기 화가 필요 하 다 면 Collections 의 synchronizedMap 방법 으로 HashMap 을 동기 화 할 수 있 거나 ConcurrentHashMap 을 사용 할 수 있 습 니 다.
 
Hashtable 은 HashMap 과 유사 합 니 다. Dictionary 류 에서 계승 합 니 다. 다른 것 은 기 록 된 키 나 값 이 비어 있 는 것 을 허용 하지 않 습 니 다.이것 은 스 레 드 의 동기 화 를 지원 합 니 다. 즉, 어느 순간 에 하나의 스 레 드 만 Hashtable 을 쓸 수 있 기 때문에 Hashtable 은 기록 할 때 느 립 니 다.
 
링크 드 하 쉬 맵 은 하 쉬 맵 의 하위 클래스 로 기록 의 삽입 순 서 를 저장 합 니 다. Iterator 로 링크 드 하 쉬 맵 을 옮 겨 다 닐 때 먼저 얻 은 기록 은 먼저 삽 입 된 것 이 분명 합 니 다. 구조 할 때 파 라 메 터 를 사용 하여 응용 횟수 에 따라 정렬 할 수도 있 습 니 다.옮 겨 다 닐 때 HashMap 보다 느 릴 수 있 지만 예외 적 으로 HashMap 의 용량 이 크 고 실제 데이터 가 적 을 때 옮 겨 다 니 는 속도 가 LinkedHashMap 보다 느 릴 수 있 습 니 다. 왜냐하면 LinkedHashMap 의 옮 겨 다 니 는 속 도 는 실제 데이터 와 만 관련 이 있 고 용량 과 무관 하 며 HashMap 의 옮 겨 다 니 는 속 도 는 그의 용량 과 관계 가 있 기 때 문 입 니 다.
 
TreeMap 은 SortMap 인 터 페 이 스 를 실현 합 니 다. 저 장 된 기록 을 키 에 따라 정렬 할 수 있 습 니 다. 기본 값 은 버튼 값 의 오름차 순 으로 정렬 할 수도 있 고 정렬 된 비교 기 를 지정 할 수도 있 습 니 다. Iterator 로 TreeMap 을 옮 겨 다 닐 때 얻 은 기록 은 정렬 된 것 입 니 다.
 
일반적인 상황 에서 우리 가 가장 많이 사용 하 는 것 은 HashMap 이다. Map 에 요 소 를 삽입 하고 삭제 하 며 포 지 셔 닝 하 는 것 이 가장 좋 은 선택 이다.하지만 자 연 스 러 운 순서 나 사용자 정의 순서 로 키 를 옮 겨 다 니 려 면 트 리 맵 이 좋 습 니 다.출력 순서 가 입력 과 같 아야 한다 면 링크 드 HashMap 으로 이 루어 질 수 있 고 읽 기 순서 로 배열 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기