欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

5.3类集(java学习笔记)集合的输出

程序员文章站 2023-01-19 09:39:29
一、集合的输出 迭代输出:Iteratror接口 在输出集合时,最标准的方法是使用迭代器迭代输出。 1,List中的迭代器。 Iterator中包含三个方法: hasNex()t判断集合内是否有元素存在。 next()返回当前元素,并让游标指向下一元素。 remove删除next返回的当前元素。 我 ......

一、集合的输出

迭代输出:iteratror接口

在输出集合时,最标准的方法是使用迭代器迭代输出。

 

1,list中的迭代器。

iterator中包含三个方法:

5.3类集(java学习笔记)集合的输出

hasnex()t判断集合内是否有元素存在。

next()返回当前元素,并让游标指向下一元素。

remove删除next返回的当前元素。

 

我们首先来看前两个方法。

import java.util.arraylist;
import java.util.iterator;
import java.util.list;

public class testite {
    public static void main(string[] args) {
        list <integer>l = new arraylist<>();
        l.add(1);
        l.add(2);
        l.add(3);
        iterator ite = l.iterator();//调用iterator实例化一个迭代器对象。
        while(ite.hasnext()){    //判断集合中是否有元素
            system.out.println(ite.next());//返回当前元素,并让游标指向下一元素。
        }
    }
}
运行结果:
1
2
3

我们来看l.iterator这句,这句调用的是arratlist中的iterator方法。

5.3类集(java学习笔记)集合的输出

它会返回一个迭代器对象。

我么再来看itr中的内容。

5.3类集(java学习笔记)集合的输出

itr作为一个内部类,并且实现了iterator接口。

我们来看下itr类里面的两个变量:

 5.3类集(java学习笔记)集合的输出

cursor就是游标,由于它在一个私有类中默认为0,

lastret就是删除时指定的元素。

 

首先我们来看下里面的hasnext()方法:

5.3类集(java学习笔记)集合的输出

多么的简单,就一个判断,判断cursor是否等于数组元素个数。

 

我们来看第二个next():

5.3类集(java学习笔记)集合的输出

首先将cursor给i,然后判断下是否大于数组元素个数,大于则抛出异常。

然后创建一个object数组,将存储arraylist元素的数组缓冲区给object数组。(数组缓冲区的长度是这个arraylist的容量),大于就抛出异常。

将cursor向后移动一位,返回数组中的第i个元素,并将i给lastret。

最后我们来看下remove():

5.3类集(java学习笔记)集合的输出

如果lastret小于0则抛异常,删除数组中第lastret个元素。

然后将lastret给cursor(删除元素后游标要向前挪动一位,所以讲lastret给cursor)

举个例子,例如此时cursor=2,则lastret=1,如果我删除了第1个元素,那么这时第2个元素就挪到第1个元素的位置了,

cursor之前指向的第二个元素其实是删除后的第一个元素。

然后将lastret变成-1,所以如果两次连续的使用remove()会出现错误,因为第二次使用时lastret还没有被cursor赋值。

 

2.set集合的输出

set与上面的list类似,基本方法没有太大差别;

import java.util.arraylist;
import java.util.hashset;
import java.util.iterator;
import java.util.list;
import java.util.set;

public class testite {
    public static void main(string[] args) {
        set <integer>l = new hashset<>();
        l.add(1);
        l.add(2);
        l.add(3);
        iterator ite = l.iterator();
        while(ite.hasnext()){//判断集合中是否有元素
            system.out.println(ite.next());
        }
    }    
}
运行结果:
1
2
3

 

3.map集合的输出

map中存放的是一对值k,v,而迭代器每次只能找到一个值,所有如果要用迭代器输出map的话需要按一下步骤。

1.map对象调用entruset()方法,返回一个set对象。

2.用set实例化一个iterator

3.通过map.entry进行k,v分离。

import java.util.arraylist;
import java.util.hashmap;
import java.util.hashset;
import java.util.iterator;
import java.util.list;
import java.util.map;
import java.util.map.entry;
import java.util.set;

public class testite {
    public static void main(string[] args) {
        map <integer,string>m = new hashmap<>();
        m.put(1, "a");
        m.put(2, "b");
        m.put(3, "c");
        set<map.entry<integer, string>> sm = m.entryset();//调用entryset方法变为set对象,该方法返回值是set<map.entry<k,v>>
        iterator<map.entry<integer, string>> mite =  sm.iterator();//为转化为set的map,实例化迭代器
        while(mite.hasnext()){//判断集合中是否有元素
            map.entry<integer, string> mo = mite.next();//将取出的值转换为map.entry
            system.out.println(mo.getkey() + mo.getvalue());//调用map.entry中的方法,取得k,v的值
        }
    }    
}
运行结果:
1a
2b
3c

5.3类集(java学习笔记)集合的输出

entryset返回一个set<map.entru<k,v>>.

map.entry是map内部定义的一个接口,专门用来保存key-value的值。

map.entry接口中定义了获取k,v的方法。

可以这样理解,把k,v想象成两个小盒子,map.entry就是放两个小盒子的大盒子。

 一开始将装k,v的小盒子的大盒子map.entry作为一个类型,放入set中,这时把k,v看出一个整体。

然后通过set的迭代器来实现输出,输出时又将其转换为map.entry,然后取出k,v。