java list、set和map集合总结

一、java list、set和map集合总结

这是对collection下面的list、set,map总结
!
1.ArrayList
①.ArrayList可为null,并且可以多个null,有序。
②.ArrayList的数据存储是由数组来实现的,改查快。
③.ArrayList是不安全的,一般用于单线程,多线程不建议使用。
④.ArrayList维护了一个Object类型的数组elementData。
⑤.创建ArrayList对象时,如果使用的是无参构造器,那么elementData的容量是0,当第一次添加,扩容为10,容量到达10,则按当前大小的1.5倍扩。
⑥.创建ArrayList对象时,如果使用指定大小的构造器,就是给elementData指定大小,如果容量超过指定大小,则按现有大小的1.5倍扩。

2.Vector
①.Vector底层是一个对象数组。
②.Vector是线程同步的,即线程安全,因为Vector方法带有synchronized。
③.一般在多线程中,考虑到安全问题,可以使用Vector。
④.创建Vector对象时,如果是无参,则默认是10,容量到达10时,按现有容量的2倍扩容。

ArrayList和Vector比较
在这里插入图片描述
3.LinkedList
①.LinkedList底层是双向链表和双端队列的特点。
②.可以添加可重复元素,包括null。
③.线程不安全
④.LinkedList底层中维护了两个属性first和last,分别指向头结点和尾节点,每个节点是一个node对象,里面维护了prev、next、item三个属性,prev指向前一个,next指向后一个节点,实现双向链表。
⑤.LinkedList对元素的增删快,改查慢(可以使用ArryList,改查速度)

LinkedList和ArrayList比较
在这里插入图片描述
4.HashSet 和HashMap
①.HsahSet底层和HashMap一样,可以存放null,但是只能存放一个。
②.HsahSet不能存放重复的元素。
③.在HsahSet中添加元素时,会的到hash值,然后转换成对应的索引值。然后找到存储数据的table表,看这个索引位置是否有数据,如果没有,直接加入,如果有,则调用equals方法比较,如果相同,则放弃添加,不同就添加。
④.在java8中,如果HsahSet中一条链表的大小到达8,并且table的大小到达64,就会转化为红黑树,如果链表长度已经到达8,table表没有到达64,会进行扩容让table表容量到达64进行树化。
⑤.第一次在HsahSet中添加元素时,table数据扩容到16,它的扩容机制是table表容量到达临界值时会提前扩容。临界值=16*0.75(加载因子),到达这个大小会触发扩容。
⑦.线程不安全。
5.LinkedHashSet 和LinkedHashMap
①.LinkedHashSet是HashSet的子类。
②.LinkedHashSet底层是LinkedHashMap,底层是数组+双向链表
③.LinkedHashSet根据元素的hashCode值来确定元素的存储位置,使用链表来确定元素的次序,是插入的元素顺序有序。LinkedHashSet不允许添加重复的元素。
④.LinkedHashSet存放元素时,第一次添加是扩容为16,每个节点有pre和next属性,这样可以形成双向链表,添加机制和hashSet一样。

6.Map
①.用于保存具有映射关系的数据:Key-Value,存在一对一关系,通过指定的key能找到对应的value。
②.Map中的key不允许重复,但是value可以重复。
③.map的key可以为null,value也可以为null,key为null只能有一个,value为null可以多个。

7.HashTable
①.存放的键值对:key-value。
②.HashTable的键和值都不能为null,null会抛空指针异常。
③.HashTable的线程是安全的,底层的数组大小初始值是11,超过临界值会触发扩容机制,临界值=11*0.75(加载因子).

HashTable和HashMap比较
在这里插入图片描述
8.Properties
①.Properties类继承自HashTable类实现Map接口,按Key-value存放数据
②.特点和HashTable相似。
③.Properties还可以用于XXX.Properties配置文件中,加载数据到Properties类对象。

9.treeSet和TreeMap
①.可以指定排序规则。
②.使用无参构造器创建对象时是无序的

学习中的总结:不积跬步无以至千里

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值