JAVA基礎(第18天 Collection Collections)

Collection

List

  • ArrayList
  • LinkedList
  • Vector
  • Stack

Set

  • HashSet
  • LinkedHashSet
  • TreeSet

Map

  • HashMap
  • LinkedHashMap
  • TreeMap
  • ConcurrentHashMap
  • Hashtable
  • Properties

1.Collection 和 Collections 有什麼區別?

  • Collection 是一個集合接口,它提供了對集合對象進行基本操作的通用接口方法,所有集合都是它的子類,比如 List、Set 等。
  • Collections 是一個包裝類,包含了很多靜態方法,不能被實例化,就像一個工具類,比如提供的排序方法: Collections. sort(list)。

HashMap 和 Hashtable 有什麼區別?
• 存儲:HashMap 運行 key 和 value 允許爲 null,而 Hashtable 不允許。
• 線程安全:Hashtable 是線程安全的,而 HashMap 是非線程安全的。
• 推薦使用:在 Hashtable 的類註釋可以看到,Hashtable 是保留類不建議使用。推薦在單線程環境下使用 HashMap 替代,如果需要多線程使用則用 ConcurrentHashMap 替代。


如何決定使用 HashMap 還是 TreeMap?
對於在 Map 中插入、刪除、定位一個元素這類操作,HashMap 是最好的選擇,因爲相對而言 HashMap 的插入會更快;但如果你要對一個 key 集合進行有序的遍歷,那 TreeMap 是更好的選擇。


說一下 HashMap 的實現原理?
HashMap 基於 Hash 算法實現的,我們通過 put(key,value)存儲,get(key)來獲取。當傳入 key 時,HashMap 會根據 key. hashCode() 計算出 hash 值,根據 hash 值將 value 保存在 bucket 裏。當計算出的 hash 值相同時,我們稱之爲 hash 衝突,HashMap 的做法是用鏈表和紅黑樹存儲相同 hash 值的 value。當 hash 衝突的個數比較少時,使用鏈表,否則使用紅黑樹。


說一下 HashSet 的實現原理?
HashSet 是基於 HashMap 實現的,HashSet 底層使用 HashMap 來保存所有元素,因此 HashSet 的實現比較簡單,相關 HashSet 的操作,基本上都是直接調用底層 HashMap 的相關方法來完成,HashSet 不允許重複的值。


Collections常用用法

package com.wdzl.demo02;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
 * Collections 和 Collection
 *	Collections工具類 ,操作Collection
 *  Collection集合接口
 * Arrays
 */
public class TestCollections {
	public static void main(String[] args) {
		//asList返回一個受指定數組支持的固定大小的列表.
		List<Integer> list = Arrays.asList(4,2,5,6,1,9);
		System.out.println(list);
		//排序
		Collections.sort(list);
		System.out.println("排序爲:"+list);
		//洗牌
		//shuffle()使用默認隨機源對指定列表進行置換。
		Collections.shuffle(list);
		System.out.println("打亂爲隨機數列:"+list);
		//逆序
		//reserve()反轉指定列表中元素的順序。
		Collections.reverse(list);
		System.out.println("逆序爲:"+list);
		//二分查找
		Collections.sort(list);
		System.out.println("重新排序後:"+list);
		//binarySearch(list,a)使用二分搜索法搜索指定列表,以獲得指定對象
		int index = Collections.binarySearch(list, 8);
		System.out.println("索引爲:"+index);
		
		//fill(list,a)使用指定元素替換指定列表中的所有元素。
//		Collections.fill(list, 888);
		//copy(list1,list2)將所有元素從一個列表複製到另一個列表。
//		Collections.copy(dest, src);
		List<String> list1 = Collections.EMPTY_LIST;
		System.out.println("list1:"+list1);
		List<String> list2 = query();
		list2.isEmpty();
		System.out.println("list2:"+list1);
	}
	
	
	public static List<String> query(){
		//如果爲空
		return Collections.EMPTY_LIST;
	}
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章