Java集合框架

集合分为Collection和Map两种体系

Collection接口:单列数据,定义了一组存取对象的方法的集合

  • List接口:元素有序,可重复的集合
  • Set接口:元素无序,不可重复的集合
Collection接口继承图

Map接口:双列数据,保存具有映射关系,key-value对的集合

Map接口继承图

集合

开发中集合的选择

  • List集合
    如果需要保留存储顺序并保存重复元素,推荐使用List集合
  • ArrayList: 若查询较多,推荐使用ArrayList
  • LinkedList:若存取较多,推荐使用LinkedList
  • Vector:若需要线程安全,推荐使用Vector,但开发中一般由程序员来实现集合的线程安全,不常用
  • Set集合
    如果不需要保留存储顺序并需要去除重复的元素,推荐使用Set集合
  • HashSet:若不需要排序时,推荐使用HashSet,HashSet比TreeSet效率高
  • TreeSet:若需要将元素排序,推荐使用TreeSet
  • LinkedHashSet:若需要保留存储顺序,又需要去除重复元素,推荐使用LinkedHashSet

List接口

是用于有序存储可重复元素的集合
List接口继承了Collection接口,声明有序存储对象(对象可重复)功能的公共接口

ArrayList
  • 数组实现,查找快,增删慢
  • 由于是数组实现,在增加或删除时,会牵扯到数组扩容以及元素的拷贝,所以效率慢,数组是可以直接按索引查询,所以查询的时候,较快
LinkedList
  • 链表实现,增删快、查询慢,由于链表实现:
    1、增加时只要让前一个元素记住自己就可以了
    2、删除时,让前一个元素记住后一个元素,后一个元素记住前一个元素,这样增删效率比较高
    3、查询时需要一个一个的遍历,效率比较低
Vector
  • 基于数组实现的,线程同步的遗留集合类,
  • 和ArrayList原理相同,但线程安全,效率比较低,一般来讲,线程安全的东西,效率有点影响
Stack
  • 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除
  • 可以将其类比于下面文件的取放操作:新到的文件会被先取走,这使得每次取走的文件都是最新的
  • 实现栈有以下2种方式
    1、用数组实现栈
    2、用链表实现栈
image.png
Queue
  • 队列属于一种遵循先进先出(FIFO)原则的集合类型
  • 可以将其类比为生活中一些以公平性为原则的服务场景:排成一排的客户等待服务,等待最久即最先入列的客户应该最先提供服务(出列)
  • 实现队列有以下2种方式
    1、用链表实现队列
    2、用循环数组实现队列
image.png

栈遵循后进先出的原则,所以要在数组或链表同一端做添加和删除操作
队列遵循先进先出的原则, 所以要在数组或链表的两端分别做插入和删除的操作

Set接口

  • Set接口继承了Collection接口,声明无序存储对象(对象不可重复)功能的公共接口,不能通过索引方式获取
  • Set接口的实现类,判断两个对象是否相等,不是通过 ==运算符,而是根据equals()方法比较
  • 由于集合元素是不可重复的,如果试图把一个对象存放在Set容器中时,对应的类必须重写equlas()方法和hashCode(Object obj)方法,以实现对象相等规则,插入元素时会进行hash验证
HashSet
  • HashSet无序不可重复
  • HashSet不是线程不安全
  • 基于hash算法来存储集合中的元素,因此具有很好的存取、查找、删除性能
LinkedHashSet
  • LinkedHashSet有序不可重复
  • LinkedHashSet是HashSet的子类
  • LinkedHashSet根据元素的hashCode值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来以插入顺序保存的
  • LinkedHashSet插入性能略低于HashSet,但在迭达访问Set集合元素时有不错的表现
TreeSet
  • TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
  • TreeSet底层使用红黑树结构存储数据
  • TreeSet有两种排序方式:自然排序、定制排序
  • 如果试图把一个对象添加到TreeSet集合时,则该对象的类必须实现Comparable接口

Map接口

  • Map接口用于保存映射关系的数据,key-value
  • Map中的key和value,可以是任何引用类型的数据
  • Map中的key是用Set存放的,不允许重复,即作为key的类,一定要重写hashCode()和equals()方法
  • 一般常用String类型,作为Map集合中的key
HashMap
image.png
LinkedHashMap
image.png
TreeMap
image.png
Hashtable
image.png
Properties
image.png

你可能感兴趣的:(Java集合框架)