就从列表尾端开始搜索元素.
散列表可以用于实现几个重要的数据结构,如set类型.
equals与hashCode的定义必须兼容, 如果x.equals(y) 为true,x.hashCode()必须等于y.hashCode()
TreeSet类与散列集十分类似. 排序是由红黑树完成的.如果数中包含n个元素,查找新元素的位置平均需要log2n次比较.
两种方式:
1.需要排序的对象实现Comparable接口,重新compareto方法.
2.实现comparable接口有局限性. 将Comparator对象传给TreeSet构造器(可使用匿名内部类).重新compare方法.
队列可以有效的在尾部添加一个元素,头部删除一个元素.
双端队列可以有效的让人在头尾同时添加或删除元素.不支持在队列中间添加元素.
Queue接口,实现类有ArrayList和ArrayQueue类.这两个类都提供了双端队列.
优先级队列(PriorityQueue)中的元素可以按照任意顺序插入,却总是按照排序的顺序进行检索.与TreeSet一样,可以使用实现了Comparable接口的类,或者构造器中提供比较器的对象.
优先级队列使用的数据结构:堆.
堆是一个可以自我调整的二叉树,对树执行添加和删除操作,可以让最小的元素移动到根,而不必花费时间对元素进行排序.
典型示例是任务调度.每一个任务有一个优先级,任务以随机顺序添加到队列中.每当启动一个新任务时候,都将优先级最高的任务从队列中删除.(习惯将1设为最高优先级,所以会将最小的元素删除)