当前位置: 首页>后端>正文

JAVA集合

java集合分类

Java集合大致可以分为Set、List、Queue和Map四种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合,Java 5 又增加了Queue体系集合,代表一种队列集合实现。Java集合就像一种容器,存放的是对象的引用

集合和数组

数组长度不可变,集合只能存放对象

List

  • List有序、可重复,遍历方法很多
  • ArrayList
    数组结构,查询快,增删慢。
    线程不安全,效率高
  • LinkedList
    链表结构,查询慢,增删快。
    线程不安全,效率高
  • Vector
    数组结构,查询快,增删慢。
    线程安全,效率低

Set

  • Set无序、不可重复
    需要hashCode()和equals()实现不可重复
    只能使用迭代器遍历
  • HashSet
    哈希表结构
    无序,不可重复
    需要实现hashCode()和equals()实现不可重复
  • LinkedHashSet
    插入遍历顺序一致
    链表和哈希表结构
    FIFO插入有序,唯一
    由链表保证元素有序
    需要hashCode()和equals()实现不可重复
  • TreeSet
    红黑树结构,有序
    自然排序
    比较器排序
    不可重复根据比较的返回值是否是0来决定(compareTo)

Queue

  • Queue用于模拟队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。
  • 阻塞方法 take put
  • 双向、单向
  • LinkedList
    阻塞、非线程安全、无边界
  • PriorityQueue
    非阻塞、非线程安全、无边界
    支持优先级队列实现类。
  • ConcurrentLinkedQueue
    非阻塞、线程安全、无边界
    基于链接节点的队列实现类。
  • ArrayBlockingQueue
    阻塞、线程安全、有边界,
    创建的时候指定大小,一旦创建容量不可改变实现类
    默认是不保证线程的公平性,不允许向队列中插入null元素。
  • LinkedBlockingQueue
    阻塞、线程安全、可选有边界,
    一个由链表结构组成的可选有界阻塞队列实现类,如果未指定容量,那么容量将等于Integer.MAX_VALUE。
  • PriorityBlockingQueue
    阻塞、线程安全、无边界,
    支持优先级排序的无边界阻塞队列实现类。
  • DelayQueue
    阻塞、线程安全、无边界,
    使用优先级队列实现的无界阻塞队列实现类,只有在延迟期满时才能从中提取元素。
  • SynchronousQueue
    阻塞、线程安全、无数据队列,不存储元素、没有内部容量的阻塞队列实现类。
  • LinkedBlockingDeque
    阻塞、线程安全、无边界,由链表结构组成的可选范围双向阻塞队列实现类,如果未指定容量,那么容量将等于 Integer.MAX_VALUE

Map

  • TreeMap是有序的,HashMap和HashTable是无序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

补充

一般来说,由于数组以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好,所有的内部以数组作为底层实现的集合在随机访问时性能都比较好;而内部以链表作为底层实现的集合在执行插入、删除操作时有较好的性能。但总体来说, ArrayList 的性能比 LinkedList 的性能要好,因此大部分时候都应该考虑使用ArrayList 。

如何选择

JAVA集合,第1张

https://www.xamrdz.com/backend/3h51941285.html

相关文章: