一、集合的输出

迭代输出: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();
l.add();
l.add();
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。

5.3类集(java学习笔记)集合的输出的更多相关文章

  1. java学习笔记—集合之Map集合

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0p ...

  2. Java学习笔记——集合

    类集简介 从JDK1.2开始Java引入了类集开发框架,所谓的类集指的就是一套动态对象数组的实现方案,在实际开发之中没有有何一项开发可以离开数组,但是传统的数组实现起来非常的繁琐.而且长度是其致命伤, ...

  3. java学习笔记 --- 集合(续)

    1.map集合 1.1.特点:将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1.2.Map集合和Collection集合的区别? Map集合存储元素是成对出现的,Map集 ...

  4. 0015 Java学习笔记-集合-TreeMap集合

    主要的方法 构造方法: TreeMap(); TreeMap(Comparator<?super K> comparator); TreeMap(Map<? extends K,? ...

  5. 0014 Java学习笔记-集合-HashMap集合

    主要的方法 + 构造方法: * HashMap(); - 默认大小16,负载因子0.75 * HashMap(int initialCapacity); * HashMap(int initialCa ...

  6. Java学习笔记--集合元素的比较Comparable,Comparator

    原文见: http://www.cnblogs.com/sunflower627/p/3158042.html 1. Comparator 和 Comparable 相同的地方 他们都是java的一个 ...

  7. java学习笔记 --- 集合

    1.定义:集合是一种容器,专门用来存储对象 数组和集合的区别?   A:长度区别  数组的长度固定 集合长度可变 B:内容不同  数组存储的是同一种类型的元素  而集合可以存储不同类型的元素  C:元 ...

  8. java学习笔记-集合set

    equals指内容(值)相等,== 指地址相等 ===============set类 set继承自collection,但set没有新增方法,只是set里的元素不重复,下面是set常用方法 ==== ...

  9. 3.3常用类(java学习笔记)Runtime与Process

    一.Runtime 我们来看下文档中对Runtime的说明: 每一个java程序都有一个属于Runtime类的实例,它允许程序连接到程序运行环境. 当前runtime可以用getRuntime()方法 ...

  10. 3.2常用类(java学习笔记)String与StringBuffer

    一.String String又称不可变字符序列. 我们看JDK源码中用于字符存储的数组有final修饰,final修饰变量就代表变量不能改变. 我们可以看API文档中对String的描述. Stri ...

随机推荐

  1. Idea 怎么远程debug

    注意的问题:远程debug别人的服务器只能开一个debug,所以当你的同事比你先远程debug同一台服务器时,你应该报Error running 某某ip地址 .unable to open debu ...

  2. IOS 学习资料整理{非常有用,强烈推荐}

    绝地地的资源博客:我是雷锋不用谢~~啦啦啦 https://blog.csdn.net/kunga0814/article/details/82117090

  3. 慕课网javascript 进阶篇 第九章 编程练习

    把平常撸的码来博客上再撸一遍既可以加深理解,又可以理清思维.还是很纯很纯的小白,各位看官老爷们,不要嫌弃.最近都是晚睡,昨晚也不例外,两点多睡的.故,八点起来的人不是很舒服,脑袋有点晕呼呼,鉴于昨晚看 ...

  4. TCP(二)

    TCP半连接和全连接问题 TCP握手过程详解 如上图所示,关键部分:syns queue(半连接队列)和accept queue(全连接队列) 正常情况下的处理过程如下: 1)当server端收到cl ...

  5. 【BZOJ】1708: [Usaco2007 Oct]Money奶牛的硬币

    [算法]DP [题解] 如果每个排列算一种,则令f[i]表示凑成面值为i的方案数,容易推出f[i]+=f[i-a[j]]. 现在是每个组合才算一种,令f[i][j]第二维表示只使用前j种面值,f[i] ...

  6. Chocolatey 使用

    最近空了下来不干点什么就感觉脑袋热,可是出过的问题挖过的坑还是要自己去解决. 一直网络不好安装choco一直都是报错,今天又建立了chocolatey 在windows上来用,网络问题解决了,类似于m ...

  7. 微信小程序登录流程图

    一. 官方登录时序图 官方的登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端- 微信服务器端 1. 客户端获得code,并 ...

  8. react+webpack+babel+eslint+redux+react-router+sass 环境快速搭建

    本文中的例子支持webpack-dev-server自动刷新及react热替换,使用了redux管理state,用react-router切换路由,用babel实现ES6语法书写,同时支持async/ ...

  9. python 监控redis的进程与端口

    #!/usr/bin/python # -*- coding:utf-8 -*- import glob,psutil import json,os,datetime import collectio ...

  10. 查找(二分、hash、桶)

    先上一个最简单的题 1230 元素查找 给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过. 输入描述 Input Description 第一行两个整数 n 和m. ...