容器类

容器的用法和特点

容器类有2个跟接口,分别是collection和map,collection表示单个元素的集合,map表示键值对的集合

collection定义了一些增,删,查,遍历等方法,没有对其内容进行规范或者约束。

List是collection的子接口,表示有顺序的集合,增加了根据索引位置进行操作的方法,他的2个子类分别是ArrayList和LinkedList。其中ArrayList是基于数组实现的,查找快,增删慢,而LinkedList是基于链表实现的,与ArrayList相反。

Set也是collection的字接口,保证没有重复的数据,他有2个主要实现类,HashSet和TreeSet 。HashSet是基于哈希表实现的,要求键重写hash方法,TreeSet是基于排序二叉树实现的,元素有序,不过要求元素实现Comparable接口,或者创建TreeSet时提供一个Comparator对象。HashSet还有一个子类,LinkedHashSet就按插入排序,还有同一个针对枚举类型的EnumSet(基于位向量

Queue是collection的子接口,表示先进先出出队列,在尾部添加,重头查看或者删除,Deque表示双端队列,有头尾进行查看,添加,删除的方法,普通队列实现方法LinkedList(链表)和ArrayDeque(循环数组);Queue有一个特殊的实现子类PriorityQueue,表示优先级队列,内部用实现的,实现求前K个最大元素,求中值等。

Map接口表示键值对集合,他有2个主要实现类,hashMap和TreeMap,HashMap基于哈希表实现的,操作效率高,无序,TreeMap基于排序二叉树实现的,有序,操作效率低。

LinkedHashMap是HashMap的子类(每个元素插入了双向链表),可以按插入顺序或者访问顺序排序,按访问顺序排序可以实现LRU缓存算法。

如果键为枚举的还有专门的EnumMap,使用数组实现。

除了HashTable,Vector,Stack其余都是线程不安全的。如果实现线程安全,Collection提供的synchronizeXXX方法。

容器在迭代的时候,都会进行结构性变化检测,如果发生了变化,就会抛出ConcurrentModificationException。如果需要啥才能或者添加,使用迭代器提供的方法,

数据结构和算法

1.动态数组:ArrayList,HashMap,ArrayDeque,PriotityQueue

2.链表:LinkedList(双向链表),HashMap,LinkedHashMap

3.哈希表:HashMap,LinkedHashMap,LinkedHashSet,HashSet

4.排序二叉树:TreeMap使用红黑树(基于排序二叉树), TreeSet基于TreeMap

5.堆:PriorityQueue逻辑上是堆,物理上是动态数组

6.循环数组:ArrayDeque

7.位向量:EnumSet ,BitSet

算法

1,。动态拓展算法

2.哈希算法

3.排序二叉树算法

Collection也实现了一些通用查找方法,比如 二分查找,排序,翻转,随机重排,根据容器大小和是否实现RandomAccess接口采用不同方法

 

posted @ 2019-05-06 21:42  wakakaCode  阅读(524)  评论(0编辑  收藏  举报