JAVA集合归纳总结

java集合的归纳

List:

List 是从Collection接口继承过来,也是一个接口  List是一个有序集合 内部的元素存储
 可以按照规定的顺序存储(默认顺序从头到尾依次存储,存储顺序跟添加顺序一致

List的实现有 ArrayList 和 LinkedList

ArrayList:
ArrayList 是基于对象数组的实现,初始容量为10 (不是new出来就是10,在第一次执行add方法时初始),
当容量超出时,会扩容为原来的1.5倍:

由于是基于数组的实现所以ArrayList查找元素效率很快,但是对于从集合中间添加元素,效率很低

ArrayList去重在JDK1.8可以使用sort方法排序, 如果在1.8之前需要使用Collections工具类的sort()
方法对List集合进行排序

LinkedList:
LinkedList是基于链表的List实现 元素之间通过首尾指针连接,在进行修改(增加,删除)时只需要修改
元素的首尾指针即可,修改效率要比ArrayList高, 但是在查询时,由于LinkedList没有像ArrayList的索引,
在查询时需要从链表的第一个元素开始依次向搜索,所以查询效率较低。
ArrayList,LinkedList,Vector区别
ArrayList和LinkedList的区别:
  1. ArrayList是基于对象数组的实现,内部通过数组拷贝实现扩容;
  2. LinkedList是基于链表的实现,同时实现的队列(双端队列)ArrayList由于基于数组实现,因此在搜索元素时可直接通过索引快速定位到元素位置,查询效率较高;LinkedList由于基于链表实现,在查询时需要从链表头开始依次查找,查询效率较低。
  3. 由于数组的长度一旦定义则无法修改,因此在进行非末端更新(插入和删除)时,由于可能涉及到数组拷贝问题,因此修改效率较低;LinkedList在进行元素更新操作时,只需要修改元素首尾指针的指向即可,更新效率较高。
  4. 两者都是线程不同步的实现
ArrayList和Vector的区别:
  1. Vector是老式的集合实现,内部基于对象数组实现;ArrayList是jdk1.2新增的集合实现
  2. Vector容量扩充时,扩充原来容量2倍;ArrayList扩充为原来的1.5倍
  3. Vector是基于线程安全的实现(方法都使用synchronized修饰);ArrayList是非线程安全的实现

Set集合

Set集合也是从Collection扩展而来的子集合,相比List集合来说,Set集合内部存储的数据不是按照添加顺序
存储, 内部不允许出现重复的元素(不允许出现e1.equals(e2)),对null也只允许出现一个,对于set集合常
用的实现主要有以下:
  • HashSet(哈希表-散列表)
  • TreeSet(二叉树-红黑树)
  • LinkedHashSet

HashSet

HashSet是针对于Set集合的实现,内部基于HashMap的实现,在进行元素存储时,会对每一个存储的元素
进行hash(),获取一个哈希地址,通过该hash地址可以找到对象在内存的位置,因此存储方式跟具体得出
的hash值有关系,因此存储顺序可能会跟添加顺序不一致。

HashSet是基于Hash表的实现,去重应该重写过HashCode()和equals()方法

TreeSet

TreeSet集合是基于TreeMap的Set集合实现,内部元素的存储根据元素的自然顺序(存储的元素需要实现
Comparable接口)排序;由于元素是自然顺序排序的实现,因此需要保证集合内部存储的元素必须都是相
同的数据类型。

TreeSet 是基于Comparator或Comparable完成的去重加排序

注意.

  • 内部存储的元素必须是相同的数据类型

  • 元素对应的数据类型应该实现过Comparable接口

  • 如果被添加到TreeSet中的元素没有实现Comparable接口也可以,此时只需要在创建TreeSet时将Comparator当做参数传入也可以

List集合和Set集合区别

List集合是一有序的集合,内部元素存储顺序跟添加的一致,List集合允许重复元素;Set反之;

Map(映射)

Map也称之为映射,内部的元素是以键值对为结构存储,可以通过key获取map中的value;Key不允许重复;但是值是可以重复的,Map集合有一些常见的实现:

  • HashMap
  • TreeMap
  • ConcurrentHashMap

HashMap

HashMap是Map集合一个实现,内部是基于哈希表的排序实现元素存储的,实现原理是链表+数组(JDK8之后
引入红黑树)

TreeMap

Treemap的实现是基于二叉排序树中的红黑树实现,所存储的元素要求键必须是同一种数据类型,并且有实现
过Comparable接口(或者创建TreeMap时指定排序比较器)
HashMap、Hashtable、TreeMap的区别
  1. HashMap是基于hash算法的实现,内不通过数组结合链表实现,允许空键值存在,是线程不同步的实现
  2. TreeMap是基于红黑树的实现,内部元素的存储顺序是由自然顺序对键进行排序之后存储,是线程不同步的实现
  3. Hashtable是从老式的Dictionary类继承而来,内部的实现原理跟HashMap一样,不允许空键值存在,实现线程同步的实现,运行效率较低
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值