Java学习笔记28(集合框架二:Iterator迭代器)
Iterator接口,翻译成中文是迭代器
迭代器的概念通俗解释:
java中有很多的集合,内部有各种存储方法,取出的方式也各不相同,是否可以有一种通用的方式来获取呢?
这种方式类似for循环遍历,
通用获取方式:取出元素之前判断集合中有没有这个元素,如果有,就取出来;继续判断,如果还存在那么继续取出,直到全部取出为止,这种取出就是迭代
迭代器的实现:
(将ArrayList集合换成其他的集合,也可以实现)
package demo; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class IteratorDemo {
public static void main(String[] args) {
Collection<String>c1 = new ArrayList<String>();
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
Iterator<String> it1 = c1.iterator();
boolean b1 = it1.hasNext();//是否有元素可以被取出
System.out.println(b1);//true
//获取元素
while(it1.hasNext()){
String s = it1.next();
System.out.println(s);
}
}
}
集合迭代中的转型:
建议加入类型,但是不加入也可以执行:
package demo; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class CollectionDemo {
public static void main(String[] args) {
//集合可以存储任意类型的对象
//集合中,不指定存储的数据类型,也可以存储
Collection c1 = new ArrayList();
c1.add("abc");
c1.add("def");
Iterator it1 = c1.iterator();
while(it1.hasNext()){
//it.next获取Object类型,强制转换
String s1 = (String)it1.next();
System.out.println(s1.length());
}
}
}
利用迭代器的原理,在JDK1.5之后出现了增强for循环:
增强for循环遍历数组示例:
package demo;
//增强for循环,有固定格式 //好处:代码少了,方便遍历
//弊端:没有索引,不能操作容器里面的元素
public class ForEachDemo {
public static void main(String[] args) {
function1();
function2();
} public static void function1(){
int[] arr = {3,2,5,4,8,9,6};
//遍历输出
for(int i :arr){
System.out.println(i);
}
} public static void function2(){
//遍历的时候,可以调用对象的方法
String[] str1 = {"abc","def","java"};
for(String s:str1){
System.out.println(s);
System.out.println(s.length());
}
}
}
增强for循环遍历集合示例:
package demo; import java.util.ArrayList; //增强for循环,有固定格式
public class ForEachDemo {
public static void main(String[] args) {
function();
} public static void function() {
ArrayList<String> array1 = new ArrayList<String>();
array1.add("abcd");
array1.add("java");
for (String s : array1) {
System.out.println(s);
}
}
}
迭代器并发修改异常:
在面试中偶尔会遇到,这里做简单介绍
package demo; import java.util.ArrayList;
import java.util.Iterator; //迭代器的并发修改异常
//即不允许在迭代过程中修改集合
public class Demo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
Iterator<String> it1 = list.iterator();
while (it1.hasNext()) {
String s1 = it1.next();
/*
* 加入这段代码则会出现异常
*
* if(s1.equals("abc3")){ list.add("abc"); }
*/
System.out.println(s1);
}
}
}
Java学习笔记28(集合框架二:Iterator迭代器)的更多相关文章
- 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素
import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...
- 【Java学习笔记】<集合框架>TreeSet,Comparable,Comparator
public class Person implements Comparable{ private String name; private int age; public Person(){ su ...
- 【Java学习笔记】<集合框架>对字符串进行长度排序
package 测试; import java.util.Comparator; public class ComparatorByLength implements Comparator { //定 ...
- Java学习笔记之---集合
Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...
- java学习笔记之OOP(二)
java学习笔记二.面向对象[OOP]Object Oriented Programming 一.三大特性: 1.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用 ...
- Java基础学习笔记十七 集合框架(三)之Map
Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...
- JavaSE 学习笔记之集合框架(十八)
集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...
- Java学习笔记之集合
集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...
- 【原】Java学习笔记026 - 集合
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...
随机推荐
- SpringJDBC :jdbcTemplate在连接是出现 org/springframeworkbc/core/JdbcTemplate : Unsupported major.minor version 52.0 异常解决
原因是这个在jdk9版本才能使用,需更新jdk版本. 更新jdk9之后在idear的配置: 第一步:File---->Project Structure---->Project 第二步: ...
- mysql学习笔记--列属性
一.是否为空----null || not null 二.默认值----default 三.自动增长----auto_increment 四.主键----primary key 1. 主键:唯一标识表 ...
- 求树的重心 poj 1655
题目链接:https://vjudge.net/problem/POJ-1655 这个就是找树的重心,树的重心就是树里面找一个点,使得以这个点为树根的所有的子树中最大的子树节点数最小.题目应该讲的比较 ...
- [剑指Offer]8-二叉树的下一个节点
链接 https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e?tpId=13&tqId=11210&tPa ...
- NSLog无法使用
iOS/macos 中 #import<foundation/foundation.h> nslog不能用 如果项目中包含c/c++程序代码 将其后缀修改成.m .mm 将项目的build ...
- 【转载】重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...
- angularjs1.x的directive中的link参数element见解
angular.module("APP",[]) .directive("testDw",function () { return{ restrict:&quo ...
- wget(转)
wget(转) wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能和特点:(1)支持断点下传功能:这一点 ...
- 单点登录(SSO)原理与案例
单点登录业务流程 概要 详细流程 单点登录系统一共有三个模块,1.服务端 2.客户端 3.代理模块端 用户发送访问客户端的请求,被客户端的代理模块的拦截器拦截,判断cookie中是否含有token(令 ...
- java 线程池简单例子
package com.hra.riskprice; import com.hra.riskprice.SysEnum.Factor_Type; import com.hra.riskprice.po ...