基础复习十、集合框架List,Set,Map

11 篇文章 0 订阅
8 篇文章 0 订阅

在复习集合框架之前,先来分析一下Conllection 与Conllections的区别

          第一眼看可能这两者可能有某种关系,但是。。非也

          Collection是List,Set的父接口(Map不是),是java.util.Collecion接口类

          Collections类是一个用于对集合进行一些常规操作(排序,查找,反转等)的类,也就是说它是一个工具类

List集合

List是java集合框架中最常见的一个集合接口,直接从Collection继承而来;List集合是一个有序集合(内部的元素顺序按照添加顺序存储);List接口中常见的几个实现类:ArrayList、LinkedList、Vector(JDK1.0)

 

ArarryList(数组列表)

-AarryList是一个基于数组的动态数组实现,内部可以存储任何的数据类型的元素,提供了一系列的API用于简单的访问列表数据,在查找元素的时候只需要根据元素的索引即可快速找到,但是在更新时或者插入时,由于数组结构是连续的,元素一旦向中间插入,则后续的元素需要整体后移,效率低。

-AarryList是线程不同步的实现,在多线程并发操作时不能保证数据安全,但是效率高

-AarryList在进行容量扩充是增长原来1.5倍(增长原来长度的一半)

-补充:java.util.concurrent.CopyOnWriteArrayList   这个AarryList类是线程安全的

LinkedList(链表)

LinkedList是基于双链表的实现,集合中元素的组织是通过元素的首尾指针连接,在进行数据修改只需要改动指针的指向即可,但是在进行查询的时候,需要从链表依次搜索,因此修改时,效率较低

Vector(数组列表)

和ArrayList一样也是基于动态数组实现的,但Vector是老式JDK1.0中的一个动态数组类,提供的是一些线程安全(线程同步)的集合操作,因此,在多线程并发时,对数据的安全性有一定保证,但效率低,

Vector当容量不足是会在原来的长度的基础上增长一倍

 

Set集合

set也是Conllection接口的实现类,Set是一个无序集合,元素的存储顺序不是按照添加顺序存储的(具体存储顺序跟使用的实现类有关),无序代表着无法想List一样通过索引取值,这时对于Set集合中元素的获取只能通过迭代器迭代了

set集合中不允许出现重复的元素,若有重复的,后来的会覆盖之前的

Set集合有两个常见的实现:

HashSet

          基于散列算法实现元素存储顺序,内部元素的排序按照hash表中的地址进行排序,内部允许null值出现,但不允许重复元素

     TreeSet

                  基于二叉树中红黑数实现,元素排序方式需要通过实现Comparable或者Comparator接口完成;内部的元素必须是Comparable实现类(或者在创建TreeSet对象时提供Comparator比较器),并且由于比较器内部会使用到集合中的元素,因此元素不允许为nul


Map集合(重点)

Map接口是JDK1.2新增的集合框架中的一种容器,Map集合内部的元素存储采用键值对(Key-Value)结构,key不允许重复,另外每一个key都会对应一个value

Map集合有三个常见的实现类

      HashMap

        是基于hash表的实现,是Map接口的一个实现类,内部的元素存储顺序是根据key的hash地址进行排序,因此,元素的顺序存储顺序可能跟添加的顺序不一致;HashMap使用链表加数组共同来实现元素存储;HashMap允许空键值出现,但是不允许重复的键存在(值可以重复);HashMap是线程不同步的实现,因此在操作数据时效率较高,但是线程并发是不能保障数据的一致性。如果多线程并发下使用建议使用:java.util.concurrent.ConcurrentHashMap****

      TreeMap

         是基于二叉树中的红黑树实现,元素的存储按照键的自然顺序排序(键必须实现Comparable接口,或者在创建TreeMap对象时指定的Comparator比较器),TreeMap中的键必须是相同的数据类型,并且不允许空元素出现,同HashMap一样,TreeMap也是线程不同步的实现。

      Hashtable

         Hashtable是集合框架出现之前的键值对集合解决方案,从Dictionary类(JDK1.0)继承而来,在JDk1.2出现Map接口后,Hashtable又从改接口实现,Hashtable不允许空键值出现,该类的实现是线程同步,因此在多线程并发操作时对数据的一致性有保障,但是效率低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值