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对封装到Entry
3.2 当if (count >= threshold) 满足时 ,就进行扩容
3.3 按照int newCapacity = (oldCapacity jdk7:数组+链表 jdk8:数组+链表+红黑树]
键排序:TreeMap
键插入和取出顺序一致:LinkedHashMap
读取文件:Properties

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |