[关闭]
@gnudennis 2015-05-19T17:46:48.000000Z 字数 2534 阅读 1760

Core Java笔记 9.集合(I) - 使用

CoreJava


本章重点:

  • Java Collction 设计策略
  • 具体的集合类

Java Collection 设计策略

Java 采用如下策略:
1. Java Collection 也是采用 interface 和 implementation 分离. 接口本身不关心实现的效率,那是选择时考虑的.
2. Java Collection 是核心接口:CollectionIterator.

Interface CollectionIterator

Collection 是 Java Collection Framework 的 super interface.

Collection 核心方法:

  1. public interface Collection<E> extends Iterable<E> {
  2. boolean add(E element);
  3. Iterator<E> iterator();
  4. // other methods ...
  5. }
  6. public interface Iterable<E> {
  7. Iterator<E> iterator();
  8. }

注:
add() -- 增
iterator() -- 迭代器可以完成:查、删操作.

Iterator 定义:

  1. public interface Iterator<E> {
  2. E next();
  3. boolean hasNext();
  4. void remove();
  5. }

Iterator 用于 loop:

  1. Collection<String> c = ...;
  2. Iterator<String> iter = c.iterator();
  3. while (iter.hasNext()) {
  4. String element = iter.next();
  5. // do something with element
  6. }
  7. // Java SE 5.0 for-each loop
  8. // 任何实现了 Iterable 接口的对象一起工作,都支持 for-each 语法
  9. for (String element : c) {
  10. // do something with element
  11. }

具体的集合类

Full Java Collections:

corejava-collections-pic01
corejava-collections-pic02

通过测试代码介绍 Java 核心的集合类的使用.

LinkedList 与 ListIterator

LinkedList: ordered collection(doubly linked list in Java). 它除了拥有普通型的迭代器,还拥有一个增强型迭代器(ListIterator).

ListIterator: 双向迭代器,而且支持:add() 操作.

  1. interface ListIterator<E> extends Iterator<E> {
  2. void add(E element);
  3. E previous();
  4. boolean hasPrevious();
  5. }

测试代码:

  1. public class ListsTest {
  2. public static void main(String[] args) {
  3. List<String> staff = new LinkedList<String>();
  4. staff.add("Amy");
  5. staff.add("Bob");
  6. staff.add("Carl");
  7. System.out.println(staff); // [Amy, Bob, Carl]
  8. // 测试 iterator
  9. // !!!!!迭代器的行为可以想象下:光标 |ABC A|BC AB|C ABC|
  10. Iterator<String> iter = staff.iterator();
  11. // 要点1: 调用 remove() 必须调用 next()[next 和 remove 强关联]
  12. // iter.remove(); // java.lang.IllegalStateException
  13. // 要点2: 禁止重复 remove()
  14. // iter.remove();
  15. // iter.remove(); // java.lang.IllegalStateException
  16. // 要点3: 删除操作
  17. Iterator<String> iter2 = staff.iterator();
  18. String first = iter2.next();
  19. iter2.remove(); // 删除第一个元素
  20. String second = iter2.next();
  21. iter2.remove(); // 删除第二个元素
  22. System.out.println(staff); // [Carl]
  23. // 测试 ListIterator
  24. ListIterator<String> listIter = staff.listIterator();
  25. listIter.add("Tom");
  26. listIter.add("Jerry");
  27. listIter.next(); // skip past first element
  28. listIter.add("Juliet");
  29. System.out.println(staff); // [Tom, Jerry, Carl, Juliet]
  30. while (listIter.hasNext()) {
  31. listIter.next();
  32. }
  33. listIter.add("Jetty");
  34. System.out.println(staff); // [[Tom, Jerry, Carl, Juliet, Jetty]
  35. }
  36. }

ArrayList

Set

Set 两个常用的实现: HashSet 和 TreeSet.
TreeSet 的元素必须实现 Comparable, 或者初始化时 提供一个比较器。

QueueDeque

Queue: 队列. 提供 add(offer), remove(poll), element(peek).
Deque: 双端队列. 扩展自 Queue, 提供 head 和 tail 的add(offer), remove(poll), get(peek)操作.
Deque的典型实现: ArrayDeque 和 LinkedList.

PriorityQueue

PriorityQueue: 优先队列,要求元素是 Comparable 或者提供 Comparator.

Map

Map 的两个常用实现: HashMap 和 TreeMap.
Map 的三个视图.

  1. Set<K> keySet();
  2. Collection<V> values();
  3. Set<Map.Entry<K, V>> entrySet(); // Map 其实是利用Set 实现的,其实就是 元素是 Map.Entry 类型的 Set

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注