第十一章:持有对象

Collection:Collection是描述所有序列容器的共性的根接口。AbstractCollection类提供了该接口的默认实现。List必须按照插入的顺序保存元素,Set不能有重复的元素,Queue按照排队规则确定加入取出的顺序。

Arrays.asList()接受一个数组、用逗号分隔的元素列表、可变参数,将其转换为一个List对象

Collections.addAll(collection, ...) 接受一个Collection对象、数组或者逗号分隔列表,将元素添加到Collection对象中。
Arrays.asList()有时没有Collections.addAll灵活。

class Snow{}
class Powder extends Snow{}
class Light extends Powder{}
class Heavy extends Powder{}
class Crusty extends Snow{}
class Slush extends Snow{}

public static void main(String[] args){
  List snow1 = Arrays.asList( new Light(), new Heavy());
  //以下不会被编译
  //List snow2 = Arrays.asList( new Light(), new Heavy());
  //因为Arrays.asList生成的是List,不符合List
  //Collections.addAll() 不会混淆
  List snow3 = new ArrayList();
  Collections.addAll(snow3, new Light(), new Heavy());

  //可以这样解决问题
  List snow4 = Arrays.asList( new Light(), new Heavy() );
}

List接口:
· ArrayList:擅长随机访问元素,插入和删除较慢
· LinkedList:插入、删除效率高,提供了优化的顺序访问,随机访问较慢,特性集比ArrayList大。

迭代器:
迭代器是一个对象,它的工作是遍历并选择序列中的对象。java的大量类都实现了Iterable接口,接口方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素:
1)使用next()获得序列中的下一个元素
2)使用hasNext()检查序列中是否还有元素
3)使用remove()将迭代器新近返回的元素删除
ListIterator是Interator的强化子类型。它可以双向移动,还可以产生当前位置的前一个和后一个元素的索引,并可以使用set()方法替换访问的最后一个元素。
栈:后进后出(LIFO)的容器,一般使用LinkedList实现栈。有push()推入元素,peek()和pop()(元素会从栈顶移除)返回元素。

Set:不保存重复的元素,和Collection完全一样的接口。
·HashSet :使用了散列,速度快
·TreeSet :将元素存储在红-黑树数据结构中,对元素排序。
·LinkedHashSet:使用散列优化查询速度,使用链表维护元素的插入顺序。

Map:一组成对的键值对。允许我们使用一个对象来查找某个对象。
·HashMap:一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
·TreeMap:保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢。
·LinkedMap:实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

Queue:典型先进先出(FIFO)的容器。LinkedList提供了方法以支持队列的行为,实现了Queue接口。

- 抛出异常 返回值
插入 boolean add(e) boolean offer(e)
删除 e remove() e poll()
获取元素 e element() e peek()

优先级队列PriorityQueue:下一个弹出元素是最需要的元素。接口和Queue一样。

你可能感兴趣的:(第十一章:持有对象)