day25--Java集合08

打印 上一主题 下一主题

主题 934|帖子 934|积分 2802

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
  1. package li.map.hashtable;
  2. import java.util.Hashtable;
  3. @SuppressWarnings("all")
  4. public class HashTableExercise {
  5.     public static void main(String[] args) {
  6.         Hashtable table = new Hashtable();
  7.         table.put("john",100);//ok
  8.         //table.put(null,100);//异常
  9.         //table.put("john",null);//异常
  10.         table.put("likk",100);//ok
  11.         table.put("likk",99);//替换
  12.         System.out.println(table);//{likk=99, john=100} 无序
  13.     }
  14. }
复制代码
如下图:初始容量为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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表