浅谈java中的集合

java集合框架是我们常用的类,今天聊聊我所知道的常用集合类。
java集合类借用下别人的结构图:
浅谈java中的集合_第1张图片
java集合类大体结构介绍:
java集合分为单例集合和双列集合,单例集合它们都实现了Collection接口,双列集合都实现了Map接口,所有集合类都要实现响应的接口。

Collection接口:下面有三个子接口分别是List,Set,Queue。
List:插入有序,可以存储多个null,可以保存重复元素。
Set:存储无序,不允许有重复原色,只允许有一个null。
Queue:一个先进新出的数据结构。
Map:一个k和v的映射关系
Collections:集合类的工具类,针对对集合的操作,里面提供了如排序,将线程不安全的集合类编程安全的。
List的实现类:

  • ArrayList:最常用的实现类,基于数组的实现,线程不安全,默认容量为10,扩容为原来的1.5倍,可用工具类设置成线程安全的。
  • Vector:可以把它理解为线程安全的ArrayList,这也是他们的主要区别。
  • CopyOnWriteArrayList:线程安全版的ArrayList,可以替代Vector,实际上它是JUC(java并发包)下的类,其原理是,在多线程环境下,可以多个线程进行读操作,在多线程进行写操作的时候将会复制一份原数组进行并行写操作,完成写操作后将原引用指向新的数组,是一种读写分离的思想。
  • LinkedList:一个双向链表结构,其优点是插入速度快,查询慢,线程不安全。

Set的实现类:

  • HashSet:底层使用了HashMap的Key,不允许元素重复,判断元素重复是根据自身equals来比较,线程不安全,可用CopyOnWriteArraySet进行替代。
  • TreeSet:可以自动排序且元素不能重复的树形结构。

Map的实现类:

  • HashMap:数组加链表的数据结构,在存储数据时根据key的HashCode算出数组下标,然后将value存入进对应数组下表的链表尾部,默认容量为16,容量超过负载因子0.75时,将扩容为原来的2倍
  • HashTable:线程安全的HashTable。

Queue下有一个子接口BlockingQueue(阻塞队列):
什么是阻塞队列:
一个线程从队列中放入元素,另一个线程从队列中获取元素,当队列中的元素为空时,获取元素的线程将会被阻塞直到队列中有元素,当队列已经满时从队列中存放元素的线程将会阻塞,它是线程安全的队列。
阻塞队列实际上是JUC(java并发包)下的类,由于它也实现了Queue接口,个人觉得也属于集合类。

  • ArrayBlockingQueue:由数组结构组成的有界阻塞队列(先进先出)
  • LinkedBlockingQueue:有链表结构组成的有界队列,但是默认值Integer.MAX_VALUE
  • PriorityBlockingQueue:支持优先级排序的无界阻塞队列
  • DellayQueue:使用优先级队列实现的延迟无界阻塞队列
  • SynchronousQueue:不存储元素的阻塞队列,也就是存一个取一个
  • linkedTransferQueue:由链表结构组成的无界阻塞队列
  • LinkedlockingDequeue:由链表结构组成的双向阻塞队列

懂得不多希望对大家有些帮助,也还请大神多多指点

你可能感兴趣的:(基础)