Java粗浅认识-容器简介

容器简介

java.util.Collection java 1.2

集合,表示一组对象,在里面的对象称为元素,有些有序,有些无序,有些可以重复,有些不能重复,有些可以添加null,有些不能添加null,有些是线程安全的,有些线程不安全
contains(Object o),调用元素的equals(e)
线性集合:数组,链表,数据随机访问时间复杂度O(1),链表访问元素O(n)
Collection直接子接口,Set , List, Queue,由线性集合加上特定的规则(算法)构成,Map,键值对

java.util.Set java 1.2

不能包含重复元素,有些有序,有些无序,有些实现可以有一个null元素,有些不能包含null元素,可以实现线程安全,可实现线程不安去

java.util.List java 1.2

有序集合,可以有重复元素,有些实现可以有null元素,有些实现不能包含null元素,可实现线程安全,可实现线程不安全

java.util.Queue java java1.5

提供两种形式存取,一种抛错,一种返null,获取头节点,可排序,每个元素必须有排序规则,通常是先进先出(FIFO),有些根据规则计算,如优先级队列,用树结构,队列有另为的属性,有界,无界,通常不能插入null


java.util.Map java1.2

键值对,key不能为空,可实现有序TreeMap,可实现无序HashMap


java.util.Deque extends Queue java1.6

双端队列,每种操作提供两种模式,抛出和返null,*Last,*First

java.util.Vector java1.0,在java1.2 extends List

可伸缩的线性集合,线程安全(同步器实现),如果要使用非线程安全,可以使用ArrayList,oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);capacityIncrement默认为空,也可以传入


java.util.Comparator java1.2

工具,对集合提供总排序,Collections.sort(),Arrays.sort(),c.compare(x,y)<0 升序,c.compare(x,y)>0降序,与equals()结果一致,支持null排序


java.lang.Comparable java1.2

属性,对类实现自然总排序,不支持null排序,实现了Comparable的类都具有自然排序功能,a.equals(b) 结果应该保持一致 a.compareTo(b)


java.lang.Iterable java1.5

属性,可迭代,实现了迭代器,允许for-each操作,for(int i: list);


java.util.Iterator java1.2

工具,集合中的迭代器,可以在遍历中删除元素,如Map.keySet().Iterator();


java.util.SortedMap java1.2

可排序的Map,对key排序,key必须有Comparable属性,或提供Comparator工具


java.util.SortedSet java1.2

可排序的Set,必须有Comparable属性,或提供Comparator工具


java.util.Hashtable implements Map java1.0 在java1.2实现Map

线程安全的hash表(同步器实现),不支持,null key和null value


java.util.HashMap java1.2

时间复杂度O(1),线程不安全,支持null key和null value,用在多线程场景中,会出现100%cpu飙升


java.util.TreeMap java1.2

操作的时间复杂度O(nlogn),内部红黑树实现


java.util.ArrayList java1.2

线程不安全,可扩容,时间复杂度O(1),扩容每次,oldCapacity + (oldCapacity >> 1);


java.util.LinkedList implements List<E>, Deque<E> java1.2

双向链表


工具类型

java.util.Collections java1.2

提供多个静态方法,其中unmodifiable*()构造不可改变类,synchronized*(),包装模式,实现构造同步容器,checked*(),返回一个视图,empty*()构造一个空集合,singleton*()构造单例
其他api,addAll(),sort()


java.util.Arrays java1.2

数组类型工具,提供静态方法,sort(),parallelSort()多核并行sort,binarySearch()二分查找,fill()填充,copyOf()复制,System.arraycopy实现,stream(),spliterator()流式处理(java8)

 

线程安全容器 java1.5

三类,Blocking*(基于锁,性能低,fail-fast,遍历时容器发生修改会抛错,),Concurrent*(free-lock,性能高,较低遍历性,容器发生改变依然可以遍历,size()不一定精准),CopyOnWrite*(快照,性能低),三种实现方式不同,性能也不相同

Blocking*

java1.6
java.util.concurrent.BlockingDeque

java1.6
java.util.concurrent.LinkedBlockingDeque implements BlockingDeque,双端操作,Blocking需要等待

java1.5
java.util.concurrent.BlockingQueue 接口,线程池中使用

java1.5
java.util.concurrent.ArrayBlockingQueue implements BlockingQueue,有界

java1.5
java.util.concurrent.LinkedBlockingQueue,有界或无界,其实是有界,最大值Integer.MAX_VALUE,也可以说是无界,因为很大

java1.5
java.util.concurrent.SynchronousQueue implements BlockingQueue,容量始终是0,获取时,必须等待进入

java1.5
java.util.concurrent.DelayQueue implements BlockingQueue,无界

java1.5
java.util.concurrent.PriorityBlockingQueue 优先级,无界

java 1.7
java.util.concurrent.TransferQueue extends BlockingQueue 接口,

java1.7
java.util.concurrent.LinkedTransferQueue 无界

Concurrent*

java 1.5
java.util.concurrent.ConcurrentHashMap,无序操作,O(1)的时间复杂度

java1.7
java.util.concurrent.ConcurrentLinkedDeque,双端操纵

java1.5
java.util.concurrent.ConcurrentLinkedQueue,CAS无锁操作

java1.6
java.util.concurrent.ConcurrentSkipListMap,(与TreeMap非线程安全,红黑树)有序操作,底层使用跳表,O(nlogn)时间复杂度,用跳表实现而不用红黑树,原因是跳表实现同步比红黑树实现同步简单

java1.6
java.util.concurrent.ConcurrentSkipListSet,(与TreeSet非线程安全,红黑树)同理

CopyOnWrite*

java1.5
java.util.concurrent.CopyOnWriteArrayList,copy副本操作,操作完后拷贝回去

java1.5
java.util.concurrent.CopyOnWriteArraySet,同理

总结

本章主要简介了一下java中的常见容器,包括非线程安全,和线程安全,后续会陆续更新他们的使用,原理,下一篇,多线程相关内容,包括线程、状态、状态转移、线程间通信(各种基于AQS的的同步器)、线程池等。

猜你喜欢

转载自blog.csdn.net/bpz31456/article/details/85161560