数据结构:是数据存储时各个元素之间的关系。
分4种基本类型:集合、线性结构、树形结构、图状结构;
JDK中的集合类:List、Set、Queue、Stack、Map
基本特点:
1、List/Set/Queue都继承Collection接口,Map是单独的接口
2、List存储类型一致数据可以保证存储的顺序,但不保证元素是否重复;
Set存储类型一致的数据,不保证数据的存储顺序,但保证存储的元素唯一;
Queue保证数据先进先出的顺序;
Map存储key-value类型的数据,key不重复(若重复会覆盖原key对应的value值).
实现类:
ArrayList:实现List接口,是动态数组实现的顺序表。数组实现,访问速度快,占用空间小,不适合频繁的增删节点。
Vector:实现List接口,动态数组实现,元素有序,线程同步的
LinkedList:实现List接口,是基于链表实现的顺序表。链表实现,适合长度不固定、元素增删频繁时使用。
HashSet:存储元素可自动去重复,无序访问,存储对象必须实现hashcode()方法(这就是为什么不能存储基本数据类型)
TreeSet:可对元素去重,保证元素的插入顺序,可对元素排序(保存的元素需要实现Comparable接口,重写compareTo方法)
HashMap:实现Map接口,是由数组+链表实现的(依据key的hash值决定在数组上的存储位置,若hash冲突时保存到链表子节点上)
WeakHashMap:继承AbstarctMap,实现Map接口;key对象弱引用
LinkedHashMap:继承HashMap,会保存数据的插入顺序
ConcurrentHashMap:实现Map接口,自带同步锁(线程安全,在多线程情况下可以使用)
HashTable:线程安全的map
TreeMap:继承AbstarctMap,实现Map接口;可以key值自动排序
Stack(栈):继承Vector;元素后进先出(有入栈和出栈操作);线程安全
Queue(队列):继承List接口;可进行出队、入队操作(LinkedList也可以实现)
ConcurrentLinkedQueue:
SynchronizedQueue:
BlockingQueue:阻塞队列,继承Queue;线程安全(可执行先进先出或后进先出操作);
子类还有ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue、PriorityBlockingQueue、
SynchronousQueue
BlockingDeque:双端阻塞队列,继承BlockingQueue;
实现类有LinkedBlockingDeque
TransferQueue:继承BlockingQueue;
实现类有LinkedTransferQueue