JAVA 枚举 迭代器 列表迭代器

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()方法应用于判断迭代器位置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值