什么是接口?
接口就是表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。
Iterator接口:
Iterator接口,用于遍历集合元素的接口。
在这个接口中定义了三个方法:
- hasNext():返回类型为布尔型,如果仍有元素可以迭代,则返回true。
- next():返回迭代的下一个元素。
- remove():从迭代器指向的collection中移除迭代器返回的最后一个元素。在执行remove操作的时候,不会出现并发修改异常,因为在执行remove操作时,同样会先执行checkForComodification(),然后在执行ArrayList的remove()方法,该方法会将exceptedModCount值加1,使之保持统一。
通过这个接口就能取出Collection集合中的元素,但不用关心每一个具体容器中的数据结构和取出的具体细节,这样就降低了取出元素和具体集合的耦合性。
使用迭代器遍历集合元素:
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
// while循环方式遍历
Iterator it1 = list1.iterator();
while (it1.hasNext()) {
System.out.println(it1.next());
}
// for循环方式遍历
for (Iterator it2 = list1.iterator(); it2.hasNext(); ) {
System.out.println(it2.next());
}
}
ListIterator接口
ListIterator是一个功能更加强大的迭代器,它继承于Iterator接口,只能用于各种List类型的访问。可以通过调用listIterator()方法产生一个指向List开始处的ListIterator,还可以调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
特点:
- 允许我们向前向后两个方向遍历List;
- 在遍历时修改List的元素;
- 遍历时获取迭代器当前游标所在的位置。
常用方法:
add():将指定的元素插入到列表
hasNext():如果此列表迭代器在前进方法还有更多的元素时,返回true。
hasPrevious():如果此列表迭代器在相反方向还有更多的元素时,返回true。
next():返回列表中的下一个元素和光标的位置向后推进。
nextIndex():返回调用next()后返回的元素索引。
previous():返回列表中的上一个元素和光标位置向前移动。
previousIndex():返回调用previous()后返回的元素索引。
remove():删除列表中调用next()或previous()的返回最后一个元素。(删除第一个或者最后一个)
set():用指定元素替换列表中调用next()或previous()的返回最后一个元素。
Collection接口
所有集合类都位于java.util包下。Java的集合类只要有两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
- Collection一次存一个元素,是单列集合;
- Map一次存一对元素,是双列集合。Map存储的一对元素:键-值,键(key)与值(Value)间有对应(映射)关系。