Java编程思想 第十一章 持有对象(容器)

来源:互联网 发布:nginx 域名 需要申请吗 编辑:程序博客网 时间:2024/05/17 02:57

1. 通过使用泛型,可以在编译期防止将错误类型的对象放置到容器中

2. 容器分为两个不同的类型

1. Collection:一个独立元素的序列;打印出来是方括号;add();    2.  add():确保这个Collection包含指定的元素2. Map:一组成对的“键值对”对象,允许使用键来查找值;打印出来是大括号;put();

3. 添加一组元素

1. Arrays.asList()方法接受一个数组或是一个用逗号分隔的元素序列,将其转换为一个List对象    注:该方法产生的List对象底层和数组是共享内存的,即其实际上是一个对象2. Collections.addAll()方法接受一个Collection对象,以及一个数组或是一个用逗号分隔的元素序列,将元素添加到Collection中

4. List的行为根据equals()的行为而有所变化(两个String只有在内容完全一样的情况下才会是等价的);subList()所产生的列表的幕后就是初始化列表,对所有的列表的修改都会反映到出事列表中;

5. 迭代器Iterator:next(),hasNext(),remove();单向移动;ListIterator双向移动

6. LinkedList

1. 得到首元素:getFirst(),element(),peek()2. 移除首元素:remove(),removeFirst(),poll()3. 增加首元素:addFirst()4. 增加尾元素:add(),offer(),addLast(),removeLast()

7. TextFile:继承自List,其构造器将打开文件

8. PriorityQueue:优先级队列,默认使用对象在队列中的自然顺序;通过提供自己的Comparator来修改这个顺序

9. 当要实现一个不是Collection的外部类的时候,使用Iterator更好;而当是Collection(Iterable类型),使用foreach

10. 任何实现Iterable的类都可以将它用于foreach语句中

11. 当有一个接口并需要另一个接口的时候,编写适配器可以解决问题

12. Iterable接口只需实现iterator()方法;Iterator必须实现hasNext()和next()

13. Arrays.asList()产生的List对象会使用底层数组作为其物理实现,只要你执行的操作会修改这个List,并且你不想原来的数组被修改,那么你就应该在另一个容器中创建一个副本

14. 容器总结

  1. 容器不能持有基本类型,自动包装机制会仔细的执行基本类型到容器中所持有的包装器类型之间的双向转换
  2. List
    1. ArrayList:适合进行大量的随机访问
    2. LinkedList:适合从表中间插入或者删除元素
  3. 各种Queue以及栈的行为,由LinkedList提供支持
  4. Map
    1. HashMap:用来快速访问
    2. TreeMap:保持“键”始终处于排序状态,没有HashMap快
    3. LinkedHashMap:保持元素插入的顺序,通过散列提供快速访问能力
  5. Set
    1. HashSet:提供最快的查询速度
    2. TreeSet:保持元素处于排序状态
    3. LinkedHashSet:以插入顺序保持元素
  6. Map和Collection之间的唯一重叠就是Map可以使用entrySet()和values()方法来产生Collection
0 0
原创粉丝点击