list,set,map和array的最全总结(1)

      有很多人对集合框架不是很清楚明了,今天,我来谈一谈对四种集合框架的理解。
      下面给出一张我自己画的图,有助于帮助我们更清晰的理解集合框架。

这里写图片描述

一.四种集合框架的特征

  • array:数组

可以存储对象和和基本数据类型,长度固定。

  • Collection:集合(接口)

      Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法。Set和List都继承了Conllection,Map
      用于存储对象,不能存储基本数据类型(int,char等),但可以存储基本数据类型包装类(int-Integer,char-Character等),长度可变

  • List(接口)
    特征:
    1.List 允许有重复元素。任何数量的重复元素都可以在不影响现有重复元素的值及其索引的情况下插入到 List。
    2.List 允许任意数量的空值
    3.List有序。List 及其所有实现类保持了每个元素的插入顺序。
    实现类
    1.ArrayList:数组。
          特点:有索引(脚标),所以查找快,增删后每个元素的索引都发生改变,所以增删慢,而且数组越长增删越慢
    2.LinkedList:链表。
          特点:无索引,每个元素都包含下一元素地址,查找需要逐一进行,所以查找慢,但是增删快只需要改变元素后面的地址。
    3.Vector:线程同步数组 基本抛弃使用。

  • Set(接口)
    特征:
    1.Set 不允许重复。Set 以及所有实现了 Set 接口的类都不允许重复值的插入。
    2.Set 最多允许一个空值的出现。
    3.Set 中的元素都是无序的。但某些 Set 的实现类以某种顺序对其中的元素进行排序,比如 LinkedHashSet 按照元素的插入顺序进行排序。
    实现类
    1.HashSet:哈希表
          特点:线程非同步,保证元素唯一性原理:判断hashCode是否相同,如果相同再判断equals方法是否为true。
    2.TreeSet:二叉树
          特点:可对用两种方法对集合中元素排序,1.实现comparable接口,覆盖compareTo方法。2.集合建立时规定,并自定义比较类。
    3.LinkedHashSet哈希表
          特点:LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
          LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

  • Map(接口)
    特征:
    1.Map 以键值对的形式对元素进行存储。Map 不允许重复键但允许重复值
    2.Map 只允许出现一个空键但允许任意数量的空值
    3.Map 跟 Set 一样对元素进行无序存储,但其某些实现类对元素进行了排序。比如,TreeMap 依据键对其中的元素进行升序排序而 LinkedHashMap 则按照每个元素的插入次序进行排序。
    实现类
    1.HashMap:基于哈希表实现
          特点:
        非线程安全
        使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。
    2.TreeMap:基于红黑树实现
          特点:非线程安全基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。 慢,但是增删快只需要改变元素后面的地址。
    3.WeakHashMap
          弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值