美文网首页
Java容器类

Java容器类

作者: 往事一块六毛八 | 来源:发表于2019-11-05 15:41 被阅读0次
    容器类框架

    从图中可以知道分为:Collection和Map两大类

    Collection

    Collection是List和Set抽象出来的接口,它包含了这些集合的基本操作。是集合的顶层接口

    1.1List

    List接口通常表示一个列表(数组、队列、链表,栈等),其中的元素可以重复,常用的实现类为ArrayList、LinkedList和Vector。

    1.2 Set

    Set接口通常表示一个集合,集合中的元素不允许重复(通过hashCode和equals函数保证),常用的实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap来实现的,而TreeSet则是通过Map中的TreeMap实现的,另外TreeSet还实现了SortedSet接口,因此是有序的集合。

    1.3 List 和 Set 的区别

    Set接口存储的是无序的、不重复的数据
    List接口存储的是有序的、可以重复的数据
    Set检索效率低,删除和插入效率高,插入和删除不会引起元素位置改变。
    List查找元素效率高,删除和插入效率低,List和数组类似,可以动态增长,根据实际存储的长度自动增长List的长度

    Map

    Map是一个映射接口,其中的每个元素都是一个Key-Value键值对,同样抽象类AbstractMap通过适配器模式实现了Map接口的大部分函数,TreeMap、HashMap和WeakHashMap等实现类都通过继承AbstractMap来实现。

    Iterator

    Iterator是遍历集合的迭代器,它可以用来遍历Collection,但是不能用来遍历Map。Collection的实现类都实现了iterator()函数,它返回一个Iterator对象,用来遍历集合,ListIterator则专门用来遍历List。而Enumeration则是JDK 1.0时引入的,作用与Iterator相同,但它的功能比Iterator要少,它只能在Hashtable、Vector和Stack中使用。

    Arrays 和 Collections

    Arrays和Collections是用来操作数组、集合的两个工具类,例如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,当然了,如果要用线程安全的集合类,首选concurrent并发包下的对应的集合类。

    https://www.jianshu.com/p/a8d5d38c6716

    Java中哪些是线程安全的容器?

    同步容器类:使用了synchronized

    1.Vector
    2.HashTable

    并发容器:

    3.ConcurrentHashMap:分段
    4.CopyOnWriteArrayList:写时复制
    5.CopyOnWriteArraySet:写时复制

    Queue:

    6.ConcurrentLinkedQueue:是使用非阻塞的方式实现的基于链接节点的无界的线程安全队列,性能非常好。
    (java.util.concurrent.BlockingQueue 接口代表了线程安全的队列。)
    7.ArrayBlockingQueue:基于数组的有界阻塞队列
    8.LinkedBlockingQueue:基于链表的有界阻塞队列。
    9.PriorityBlockingQueue:支持优先级的无界阻塞队列,即该阻塞队列中的元素可自动排序。默认情况下,元素采取自然升序排列
    10.DelayQueue:一种延时获取元素的无界阻塞队列。
    11.SynchronousQueue:不存储元素的阻塞队列。每个put操作必须等待一个take操作,否则不能继续添加元素。内部其实没有任何一个元素,容量是0

    Deque:

    (Deque接口定义了双向队列。双向队列允许在队列头和尾部进行入队出队操作。)
    12.ArrayDeque:基于数组的双向非阻塞队列。
    13.LinkedBlockingDeque:基于链表的双向阻塞队列。

    Sorted容器:
    14.ConcurrentSkipListMap:是TreeMap的线程安全版本
    15.ConcurrentSkipListSet:是TreeSet的线程安全版本

    https://blog.csdn.net/weixin_41163113/article/details/84976925

    相关文章

      网友评论

          本文标题:Java容器类

          本文链接:https://www.haomeiwen.com/subject/eozsbctx.html