集合类复习总结

ArrayList
线程安全:否
初始大小:首次如果是默认空数组的话,会扩容到默认值大小10;如果是空数组,则会扩充到1;如果是指定大小的数组,看数组大小情况进行决定是否扩容
扩容:每次增加一半 size()+size>>1,
其他:基于数组实现
构造函数:
1.带初始化大小的构造参数,如果参数大于0,则直接指定大小,等于0则将数组赋值一个空的数组(非默认),小于0直接报错
2.无参构造函数,直接将数组赋值一个默认空的数组
3.带集合类参数的构造函数,如果集合不为空,则将集合复制到当前数组中,即数组大小为集合大小


HashMap:
线程安全:否
初始化大小:默认无参的情况下默认为16,指定的情况取大于等于指定值的最小2的整数次幂;如果有参的构造函数,则取当前大小除以0.75再1;
扩容:每次扩容一倍 newCap = oldCap << 1
其他:基于数组和链表的结构,每个元素都是基于Map.Entry实现类实例,如果链表的长度大于等于8则转换为红黑树存储
较之前版本的改进点:1.hash算法,key的hash值的高位(16位)与低位进行异或,增加key值存储的随机性;resize的时候,直接将变化位置的key值加上扩容的大小即为新的位置
好的算法:保证数组长度必为2^n 的算法;

 

HashTable:
线程安全:是
初始化大小:默认无参的大小为11;指定大小的则为指定大小,但如果指定大小为0,则会创建大小为1的数组;传入参数的默认大小为入参map大小的2倍和默认值11比较的最大值
扩容:原来的2倍+1,old*2+1
其他:HashTable要求key和value都不能为null

HashTable与HashMap的区别:
1、 hashmap中key和value均可以为null,但是hashtable中key和value均不能为null。
2、 hashmap采用的是数组(桶位)+链表+红黑树结构实现,而hashtable中采用的是数组(桶位)+链表实现。
3、 hashmap中出现hash冲突时,如果链表节点数小于8时是将新元素加入到链表的末尾,而hashtable中出现hash冲突时采用的是将新元素加入到链表的开头。
4、 hashmap中数组容量的大小要求是2的n次方,如果初始化时不符合要求会进行调整,而hashtable中数组容量的大小可以为任意正整数。
5、 hashmap中的寻址方法采用的是位运算按位与,而hashtable中寻址方式采用的是求余数。
6、 hashmap不是线程安全的,而hashtable是线程安全的,hashtable中的get和put方法均采用了synchronized关键字进行了方法同步。
7、 hashmap中默认容量的大小是16,而hashtable中默认数组容量是11。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值