5.3类集(java学习笔记)集合的输出
2018-09-29 04:02:54来源:博客园 阅读 ()
一、集合的输出
迭代输出:Iteratror接口
在输出集合时,最标准的方法是使用迭代器迭代输出。
1,List中的迭代器。
Iterator中包含三个方法:
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方法。
它会返回一个迭代器对象。
我么再来看Itr中的内容。
Itr作为一个内部类,并且实现了Iterator接口。
我们来看下Itr类里面的两个变量:
cursor就是游标,由于它在一个私有类中默认为0,
lastRet就是删除时指定的元素。
首先我们来看下里面的hasNext()方法:
多么的简单,就一个判断,判断cursor是否等于数组元素个数。
我们来看第二个next():
首先将cursor给i,然后判断下是否大于数组元素个数,大于则抛出异常。
然后创建一个Object数组,将存储ArrayList元素的数组缓冲区给Object数组。(数组缓冲区的长度是这个ArrayList的容量),大于就抛出异常。
将cursor向后移动一位,返回数组中的第i个元素,并将i给lastRet。
最后我们来看下remove():
如果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
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。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash