一、集合接口
设计意义:数据类型的一种(源于数据结构),一般语言所必须具备的;
1.集合的接口与实现分离(与普通的数据结构类似),也就是每一个实现的集合都有一个相应的接口,示例如下:
/*接口例子*/ interface Queue<E> { void add(E element); E remove(); int size(); } /*对应实现的例子*/ class CirularArrayQueue<E> implements Queue<E> { CircularrArrayQueue(int capacity){......}; public void add(E element){......}; public E remove(){......}; ...... }
接口与实现分离目的:使用多态减少代码的修改量(“增加内聚,降低耦合”思想);示例如下:
/*结合中使用接口的意义*/ Queue<Customer> expressLane = new CirularArrayQueue<>(100); expressLane.add(new Customer("Harry")); /*多态随时替换子类*/ Queue<Customer> expressLane = new LinkedListQueue<>(); expressLane.add(new Customer("Harry"));
2.java类库的集合接口和迭代器接口
迭代器:用于访问对应集合的每个元素的一个工具;
迭代器有自己的接口,使用其中的方法可以有效遍历元素,且有一种简写方法:如下:
1 /*迭代器接口中的方法*/ 2 public interface Iterator<E> 3 { 4 E next(); //通过反复使用next可以访问集合中的每个元素 5 boolean hasNext(); 6 void remove(); 7 } 8 9 /*经典迭代器遍历元素方法*/ 10 Collection<String> c = ...; 11 Iterator<String> iter = c.itertor(); 12 while(iter.hasNext()){ 13 String element = iter.next(); 14 ... 15 } 16 17 /*Iterator简写的for each方法*/ 18 for(String elements : c){ 19 /*做一些对每个元素的处理*/ 20 }
关于for each使用的解释:for each可以在任何实现了Iterable接口的对象中使用,而Iterable接口中调用了泛型的Iterator方法,而所有集合类的基础接口Collection则扩展了Iterable接口,所以标准类库中的任何接口都可以使用“for each”循环;
需要注意一点:集合分为了有序集合和无序集合,所以遍历的时候,有序集合会根据相应顺序遍历,而无序集合则是随机的;但是都可以遍历到所有的元素;