Core Java笔记 9.集合(I)

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

Core java笔记 9.集合(I) - 使用本章重点:Java Collction 设计策略具体的集合类Java Collection 设计策略Java 采用如下策略:

Java Collection 也是采用 interface 和 implementation 分离. 接口本身不关心实现的效率,那是选择时考虑的.Java Collection 是核心接口:Collection 和 Iterator.Interface Collection 和 IteratorCollection 是 Java Collection Framework 的 super interface.

Collection 核心方法:

public interface Collection<E> extends Iterable<E> { boolean add(E element); Iterator<E> iterator(); // other methods ...}public interface Iterable<E> { Iterator<E> iterator();}

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

Iterator 定义:

public interface Iterator<E> { E next(); boolean hasNext(); void remove();}

Iterator 用于 loop:

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

具体的集合类Full Java Collections:

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

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

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

interface ListIterator<E> extends Iterator<E> { void add(E element); E PRevious(); boolean hasprevious();}

测试代码:

public class ListsTest { public static void main(String[] args) { List<String> staff = new LinkedList<String>(); staff.add("Amy"); staff.add("Bob"); staff.add("Carl"); System.out.println(staff); // [Amy, Bob, Carl] // 测试 iterator // !!!!!迭代器的行为可以想象下:光标 |ABC A|BC AB|C ABC| Iterator<String> iter = staff.iterator(); // 要点1: 调用 remove() 必须调用 next()[next 和 remove 强关联] // iter.remove(); // java.lang.IllegalStateException // 要点2: 禁止重复 remove() // iter.remove(); // iter.remove(); // java.lang.IllegalStateException // 要点3: 删除操作 Iterator<String> iter2 = staff.iterator(); String first = iter2.next(); iter2.remove(); // 删除第一个元素 String second = iter2.next(); iter2.remove(); // 删除第二个元素 System.out.println(staff); // [Carl] // 测试 ListIterator ListIterator<String> listIter = staff.listIterator(); listIter.add("Tom"); listIter.add("Jerry"); listIter.next(); // skip past first element listIter.add("Juliet"); System.out.println(staff); // [Tom, Jerry, Carl, Juliet] while (listIter.hasNext()) { listIter.next(); } listIter.add("Jetty"); System.out.println(staff); // [[Tom, Jerry, Carl, Juliet, Jetty] }}

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

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

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

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

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航