Java的容器类主要由两个接口派生而出——Collection和Map:
TreeMap实现了SortedMap接口,因而是有顺序的
Set、List、Queue继承了Collection接口
TreeMap是基于树的实现,HashMap,HashTable,ConcurrentHashMap是基于hash表的实现
HashMap与TreeMap区别:
- HashMap通过hashcode快速查找插入,TreeMap中所有的元素都保持着某种固定的顺序(实现了SortedMap接口),若需要得到一个有序的结果应该使用TreeMap
- 在Map 中插入、删除和定位元素,HashMap 是最好的选择。使用HashMap要求添加的键类明确定义了hashCode()和equals()的实现。而TreeMap没有调优选项,因为该树总处于平衡状态。
HashTable与HashMap
散列集基本概述
java中,散列表用链表数组实现,每个列表被称为桶,想要获取表中对象的位置,需要先计算其散列码,然后与桶的总数取余,所得结果就是保存这个元素的桶的索引
如果散列表太满,就需要再散列(rehashed,重新计算散列值),创建一个桶数更多的表,并将所有元素插入到表中,丢弃原来的表。装填因子(load factor)就决定了何时对散列表进行再散列,默认值为0.75,表示超过表中75%的位置被填满的时候会进行再散列。
HashSet与TreeSet
HashSet没有顺序,TreeSet则有
队列相关
一些方法的区别
boolean add(E element)
boolean offer(E element)
如果队列没有满,则添加到尾部并且返回true;如果满了,第一个方法抛出IllegalStateException,第二个返回false
E remove()
E poll()
如果队列不空,删除并返回头元素;为空,第一个方法抛出NoSuchElementException,第二个返回null
E element()
E peek()
如果队列不空,返回头元素,但不删除;为空,第一个方法抛出NoSuchElementException,第二个返回null
优先级队列:
优先级队列没有对所有的元素进行排序,而是使用了堆(大顶堆或者小顶堆),典型使用优先级队列的示例是任务调度