java 集合框架简介

      java的集合框架包括存放对象的Collection<E>及存放键值对的Map<K,V>两大模块,下面就一一介绍下java集合的整齐框架。

     一:List集合分支

       1.1 Collection<E>分支的分支图:

         

   1.2  上图主要类或者几口的介绍

a) Iterable<T>:  主要提供一个返回一个Iterator<T>对象方法

b)Collection<E>: 集合的根接口,实现了Iterator<T>接口,提供一些集合的基本方法。增加add系列、包含contains系列、移除remove系列、为空、大小、

                                        及转化为iterator迭代器等方法。

c1) List<E>:有序的 collection(也称为序列)。此接口的增加一些有序的插入及检索元素,或者通过元素检索下标的方法,用户可以对列表中每元素的位置

                                进行精确地控制。

c2)Set<E>:一个不包含重复元素的 collection。更确切地讲,set 不包含满足e1.equals(e2) 的元素对e1e2,并且最多包含一个 null 元素。

d1) AbstractList<E>:此类提供 List 接口的骨干实现,实现了接口里迭代器及get(int)、set(int, E)、add(int, E) 和 remove(int)一部分接口里方法,所以它还是个抽象类。

d2) AbstractSet<E>:此类提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作,此类并没有重写AbstractCollection 类中的任何实现,

它仅仅添加了 equalshashCode 的实现。

e1) ArrayList<E>和Vector<E>都是可以有重复对象的具体实体类,ArrayList<E>是非线程安全的,Vector<E>是线程同步的,是线程安全的。

e2) HashSet<E>:此类实现 Set 接口,由哈希表(实际上是一个HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许

使用 null 元素。

f1) LinkedList<E>是链表类型的集合对象,使用碎片内存,插入和删除方便。

f2) LinkedHashSet<E>:具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接

列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代

  1.3Collection<E>分支的介绍

       

      Collection<E>的主要是用来保存对象的可扩展集合抽象接口,主要有两个分支List<E>和Set<E>.List里允许有重复元素,Set里不支持重复元素。


     1.3.1 List<E>分支介绍

         List<E>三个实现子类分别是ArrayList,Vector,LinkedList. ArrayList,Vector都是数组类型的集合对象,区别是ArrayList不是线程同步的,Vector是现场同步的,LinkedList是链表形式的。下面是三个子对象的对比,由于ArrayList,Vector是数组类型的数据对象,获取对应位置的元素直接通过下标就可以获取,插入和删除比较麻烦,要整体移动插入或者删除位置以后的所有元素。LinkedList是链表形式的数据,插入元素只需要改变下指针位置即可,但是获取对应位置的元素就较为麻烦,每次都需要从头遍历。在实际项目里,要合理评估自己需求的特点,合理选择对应的数据结构。

类型

线程同步

优点

缺点

ArrayList

获取对应位置元素方便

插入或者删除元素麻烦

Vector

获取对应位置元素方便

插入或者删除元素麻烦

LinkedList

插入或者删除元素方便

获取对应位置元素麻烦

           (三种List子对象的对比图)

1.3 2 Set分支介绍

   Set<E>有很多子类,上图只画出常用的两个HashSet<E>, LinkedHashSet<E>两种种常用的。

类型

相同

不同

HashSet<E>

无重复元素

元素没有顺序

LinkedHashSet<E>

无重复元素

元素有顺序,内部是双链表

        

 二:Map<K ,V>的分支

  2.1 介绍      

             存放键值对的对象,例如生活中的办的购物卡,手机号是你的key值,你的个人信息就是value,去超市买东西,只要通过手机号们就可以知道你的名字,

             余额,消费记录等信息,像这种有关联关系的就可以使用Map<K ,V>.

      2.2 结构图

         

 

     2.3  主要类及接口的介绍

    a)Map<K,V>: 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
        b)AbstractMap<K,V>: 此类提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作
       c1) HashMap<K,V>:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键,此类不保证映射的顺序。
       c2)TreeMap<K,V>:基于红黑树(Red-Black tree)的 NavigableMap 实现
      c3) WeakHashMap: 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收
      d) LinkedHashMap<K,V>: Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值