1.枚举(Enumeration)
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
public class EnumerationTest {
public static void main(String[] args) {
Enumeration<String> enumeration;
Vector<String> vector=new Vector<>();
vector.add("lkj");
vector.add("ppp");
enumeration=vector.elements();
while (enumeration.hasMoreElements()){
System.out.println(enumeration.nextElement());
}
}
}
Enumeration中提供了
hasMoreElements()方法和nextElement()方法
前者方法用来检查数据结构中下一个元素是否存在
后者方法在下一个元素存在时用来返回下一个元素
2.迭代器(Iterator)
迭代器基本操作如下
import java.util.*;
public class A{
public static void main(String[] args){
//创建集合
ArrayList<String> Z=new ArrayList<>();
Z.add("1");
Z.add("2");
Z.add("3");
//获取迭代器
Iterator<String> i= Z.iterator();
//遍历
while (i.hasNext()){
System.out.println(i.next());
}
i.remove();
System.out.println(Z);
}
}
Iterator中常见的有三种方法
与枚举相同为hasNext()方法和next()方法
与之不同的还有remove()方法
我们可以用一个数组来简述迭代器
有数组如右【0,1,2,3,4,5】其中数字为其下标
迭代器只能在数组其中一个位置
我们调用hasNext()方法可以判断下一个位置是否存在
我们调用next()方法在下一个位置存在时迭代器会移动到下一个位置(第一次移动到0)
并且返回下一位置的值即迭代器只能在-1(未加入状态),0,1,2,3,4之间
我们调用remove()方法会将迭代器调用next()方法返回的下一个值移除
3.列表迭代器(ListIterator)
列表迭代器是迭代器的扩展比迭代器多了一些方法
第一在修改上多了set()方法替换元素add()方法添加元素
import java.util.*;
public class A{
public static void main(String[] args){
//创建集合
ArrayList<String> Z=new ArrayList<>();
Z.add("1");
Z.add("2");
Z.add("3");
//获取迭代器
ListIterator<String> list= Z.listIterator();
//遍历
list.next();
list.remove();
System.out.println(Z);
}
}
以上代码我们可以移除第一个元素
import java.util.*;
public class A{
public static void main(String[] args){
//创建集合
ArrayList<String> Z=new ArrayList<>();
Z.add("1");
Z.add("2");
Z.add("3");
//获取迭代器
ListIterator<String> list= Z.listIterator();
//遍历
list.remove();
System.out.println(Z);
}
}
但删除list.next();后不行
即我们要先调用next()方法此时迭代器在0和-1之间(在数组中)
这样我们才能调用remove()方法同样set()方法也一样
但是add()方法不同
import java.util.*;
public class A{
public static void main(String[] args){
//创建集合
ArrayList<String> Z=new ArrayList<>();
Z.add("1");
Z.add("2");
Z.add("3");
//获取迭代器
ListIterator<String> list= Z.listIterator();
//遍历
list.add("-1");
System.out.println(Z);
}
}
我们可以直接把元素插在-1位置
import java.util.*;
public class A{
public static void main(String[] args){
//创建集合
ArrayList<String> Z=new ArrayList<>();
Z.add("1");
Z.add("2");
Z.add("3");
//获取迭代器
ListIterator<String> list= Z.listIterator();
//遍历
list.add("-1");
list.add("-1");
System.out.println(Z);
}
}
并且我们二次调用仍可以插入但迭代器仍在原来位置
即我们要调用remove()方法和set()方法必须先调用next()方法
而add()方法不用
迭代器只能单向但是列表迭代器添加了previous()方法;可以实现双向
同时列表也为我们提供了 nextIndex()方法和previousIndex()方法应用于判断迭代器位置