Java集合08
15.HashTable
15.1HashTable的基本介紹
- 存放的元素是鍵值對:即K-V
- HashTable的鍵和值都不能為null
- HashTable的使用方法基本上和HashMap一樣
- HashTable是執行緒安全的(synchronized),HashMap是執行緒不安全的
- HashTable是無序的
例子:
Hashtable的底層
-
底層有陣列 HashTable$Entry [ ] 的初始化大小為 11
-
臨界值 threshold 8=11*0.75
-
擴容:原來容量*2+1
package li.map.hashtable;
import java.util.Hashtable;
@SuppressWarnings("all")
public class HashTableExercise {
public static void main(String[] args) {
Hashtable table = new Hashtable();
table.put("john",100);//ok
//table.put(null,100);//例外
//table.put("john",null);//例外
table.put("likk",100);//ok
table.put("likk",99);//替換
System.out.println(table);//{likk=99, john=100} 無序
}
}
如下圖:初始容量為11,臨界值為8
如下圖:當陣列容量使用到8時,要添加下一個元素時,陣列會先擴容到23,臨界值變為17


15.2HashTable擴容
簡單說一下HashTable的底層
-
底層有陣列 HashTable$Entry[ ] 初始化大小為 11
-
臨界值 threadhold 8 = 11 * 0.75
-
擴容:
3.1 執行方法
addEntry(hash, key, value, index)添加K-V對封裝到Entry3.2 當
if (count >= threshold)滿足時 ,就進行擴容3.3 按照
int newCapacity = (oldCapacity << 1) + 1;的大小進行擴容


HashTable和HashMap的對比
| 版本 | 執行緒安全(同步) | 效率 | 允許null鍵null值 | |
|---|---|---|---|---|
| HashMap | 1.2 | 不安全 | 高 | 可以 |
| HashTable | 1.0 | 安全 | 較低 | 不可以 |
16.Properties
16.1Properties基本介紹
-
Properties類繼承自HashTable類,并實作了Map介面,也是使用鍵值對的形式來保存資料
-
Properties使用特點和HashTable類似
-
Properties還可以用于 從xxx.properties檔案中,加載資料到Properties類物件并進行讀取和修改
-
說明:在作業后xxx.properties檔案通常作為組態檔,這個知識點在IO舉例,
Java 讀寫Properties組態檔 - 旭東的博客 - 博客園 (cnblogs.com)
16.2基本使用
例子:
package li.map.properties;
import java.util.Properties;
@SuppressWarnings("all")
public class Properties_ {
public static void main(String[] args) {
Properties properties = new Properties();
// 因為 Properties 繼承了 HashTable,因此 Key\Value 都不能為空
// 1.增加
// properties.put(null,100);//拋出空指標例外
// properties.put("join",null);//拋出空指標例外
properties.put("join",100);//k-v
properties.put("jack",100);
properties.put("lili",80);
properties.put("lili",123);//如果有相同的key,則value被替換
System.out.println(properties);//{jack=100, lili=123, join=100} 同樣是無序的
// 2.洗掉
properties.remove("jack");
System.out.println(properties);//{lili=123, join=100}
// 3.查找:通過 key 獲取對應的value
System.out.println(properties.get("lili"));//123
// 4.修改(就是直接覆寫原來的值)
properties.put("join",999);
System.out.println(properties);//{lili=123, join=999}
}
}
17.集合選型規則(開發中如何選擇集合實作類)(記住)
在開發中,選擇什么集合實作類,主要取決于業務操作特點,然后根據集合實作類特性進行選擇,分析如下:
-
先判斷存盤資料的型別[一組物件[單列]或者一組鍵值對[雙列]]
-
一組物件[單列]:Collection介面
? 允許重復:List
? 增刪多:LinkedList [底層維護了一個雙向鏈表]
? 改查多:ArrayList [底層維護了Object型別的可變陣列]
? 不允許重復:Set
? 無序:HashSet [底層是HshMap,維護了一個哈希表,即:陣列+鏈表+紅黑樹]
? 有序:TreeSet
? 插入順序和取出順序一致:LinkedHashSet [底層是LinkedHashMap 陣列+雙向鏈表]
-
一組鍵值對[雙列]:Map
? 鍵無序:HashMap [底層是:哈希表-->jdk7:陣列+鏈表 jdk8:陣列+鏈表+紅黑樹]
? 鍵排序:TreeMap
? 鍵插入和取出順序一致:LinkedHashMap
? 讀取檔案:Properties

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502627.html
標籤:其他
下一篇:Rust-陳述句和運算式
