Java集合—集合框架

前言

在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework)。

Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率。

 

Java集合和数组的区别

  1. 数组的长度固定,集合长度可变,并且集合可以保存具有映射关系的数据(即关联数组,键值对 key-value)。
  2. 数组元素即可以是基本类型的值,也可以是对象。集合里只能保存对象(实际上只是保存对象的引用变量),基本数据类型的变量要转换成对应的包装类才能放入集合类中。
 

Java集合框架的体系结构

Java中所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:CollectionMap,Collection和Map是Java集合框架的根接口。

体系结构图(虚线为接口):

图中,ArrayList,HashSet,LinkedList,TreeSet是我们经常会有用到的已实现的集合类。

图中,HashMap,TreeMap是我们经常会用到的集合类。

体系结构简介:

  • Collection:存储单个数据或者对象。
    • |-List:有序、重复的集合
      • |-LinkedList :基于链表的List
      • |-ArrayList :基于数组的List
      • |-SubList:一个List的视图
      • |-Vector:一个线程安全的List
        •   |-Stack:
    • |-Queue:队列 ,通常作为数据存储结构,不作为操作容器。集合框架中应用比较少,主要在在并发包(java.util.concurrent)中实现的阻塞队列(消息队列)。
      • |-ArrayDeque:基于数组实现的尾插队列(包含head,tail头尾指针).
      • |-PriorityQueue:基于数组的自排序优先级队列(基于数组实现存储的二叉树堆排)。
    • |-Set:无序、不可重复的集合
      • |-HashSet:基于Hash+数组+链表实现的Set。
        • |-LinkedHashSet:一个基于LinkedHashMap实现的Set。
      • |-TreeSet:一个基于TreeMap实现的Set。
      • |-EnumSet:
        • |-JumboEnumSet
        • |-RegularEnumSet
  • Map:有映射关系的集合
    • |-HashMap:基于Hash+数组+链表实现的Map。
      • |-LinkedHashMap:基于HashMap实现的双向链表。
    • |-HashTable:基于Hash+数组+链表实现的线程安全(sync)Map。
    • |-TreeMap:基于红黑树实现的有序Map。
    • |-WeakHashMap:K为弱引用的HashMap,使用中,若k没有被引用则会自动回收掉。

 

Collection接口

Collection接口是Set,Queue,List的父接口。Collection接口中定义了多种方法可供其子类进行实现,以实现数据操作。

Collection接口定义的方法:

Set集合

Set集合与Collection集合基本相同,没有提供任何额外的方法。实际上Set就是Collection,只是行为略有不同(Set不允许包含重复元素)。
Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。

List集合

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素 。List集合默认按元素的添加顺序设置元素的索引,例如第一个添加的元素索引为0,第二个添加的元素索引为1......

Queue集合

Queue用户模拟队列这种数据结构,队列通常是指“先进先出”(FIFO,first-in-first-out)的容器。队列的头部是在队列中存放时间最长的元素,队列的尾部是保存在队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。

 

Map集合

Map用户保存具有映射关系的数据,因此Map集合里保存着两组数,一组值用户保存Map里的key,另一组值用户保存Map里的value,key和value都可以是任何引用类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false。
 



 
 
参考: