迭代器、泛型和增强For
Iterator
hasNext next
Iterator 迭代器
Collection提供了一个遍历集合的通用方式,迭代器(Iterator)。
获取迭代器的方式是使用Collection定义的方法:
不同的集合迭代器的实现不完全相同
Iterator是接口
1. hasNext与next方法
迭代器用于遍历集合的两个主要方法:
boolean hasNext(): 判断集合是否还有元素可以遍历。
E next(): 返回迭代的下一个元素
遍历集合应遵循“先问后取”的方式,也就是说,应当在确定hasNext()方法的返回值为true的情况下再通过next()方法取元素。
由此可以看出,使用迭代器遍历集合是通过boolean值驱动的,所以它更适合使用while循环来遍历。
public class TestIterator {
/*
* 问取删
* 遍历集合
*/
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("object-c");
//获取迭代器
Iterator it = c.iterator();
//问
while(it.hasNext()){
//获取元素
String str = (String)it.next();
System.out.println(str);
}
System.out.println("while over");
for(;it.hasNext();){ for循环也能实现 可以写一个 ,一个都不写 是死循环
//获取元素
String str = (String)it.next();
//删除包含c的字符串
if(str.indexOf("c")!=-1){
it.remove();
}
System.out.println(str);
}
System.out.println("for over"); 这里只遍历一次 iterator 询问 完了 没有了 for在询问也是一样的结果
}
}
增强for循环
Java5.0之后推出了一个新的特性,增强for循环,也称为新循环。该循环不通用于传统循环的工作,其只用于遍历集合或数组。
语法:
for(元素类型 e : 集合或数组){
循环体
}
新循环并非新的语法,而是在编译过程中,编译器会将新循环转换为迭代器模式。所以新循环本质上是迭代器。
class TestNewfor{
public static void main(String[] args) {
Collection c =new ArrayList();
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("object-c");
//顺序的从集合c中取出元素 赋值给o 进入循环
for(Object X : c ){
String str = (String)X;
System.out.println(str);
}
//遍历数组
String[] array ={"a","b","c","d"};
for(String str : array){
System.out.println(str);
}
}
}
泛型机制
泛型在集合汇总的应用
泛型是Java SE 5.0引入的特性,泛型的本质是参数化类型。在类、接口和方法的定义过程中,所操作的数据类型被传入的参数指定。
Java泛型机制广泛的应用在集合框架中。所有的集合类型都带有泛型参数,这样在创建集合时可以指定放入集合中的对象类型。
Java编译器可以据此进行类型检查,这样可以减少代码在运行时出现错误的可能性。
我们来举个例子,比如ArrayList,其在定义时是这样的:
public class ArrayList<E> {
… … …
public boolean add(E e) {…};
public E get(int index) {…};
}
由此我们可以看出,再声明ArrayList时,类名的右侧有一个<E>。"<>"表示泛型,而其中可以使用数字字母下划线(数字不能的第一个字符)来表示泛型的名字。(通常我们使用一个大写字母来表示,当然这个不是规定。)这时,在类中声明的方法的参数,返回值类型可以被定义为泛型。这样在创建对象时可以将类型作为参数传递,此时,类定义所有的E将被替换成传入的参数。
例如:
/**
* 在使用一个类的时候,动态的传人一个或多个类型
* 来指定该类属性,参数,以及返回值的类型
* @author Administrator
*
*/
public class TestColl {
public static void main(String[] args) {
//泛型 在集合中的使用时用来约束集合元素的类型
Collection<String> c = new ArrayList<String>(); c.add("a");
c.add("b");
c.add("c");
for(String str : c){
System.out.println(str);
}
/*
* 迭代器也支持泛型,我们为迭代器指定泛型的类型
* 应该与他遍历的集合的泛型类型一致
*/
Iterator<String> it = c.iterator();
while(it.hasNext()){
String str = it.next();
System.out.println(str);
} }
迭代器、泛型和增强For的更多相关文章
- JAVA基础之集合、Iterator迭代器、泛型及增强for循环
个人理解: 对于集合,首先要明确的是最顶层的接口是Collection接口类,其包含一些基本的方法以便子类调用,不过在定义的时候最好定义好数据类型,以免遍历时还得必须进行向上转型:特别注意的是其没有关 ...
- java-ArrayList中去重复字符串或重复对象、LinkedList集合、泛型、增强for、静态导入、可变参数、asList()方法、集合嵌套
1.去除ArrayList中重复字符串元素方式 * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 思路:创建新集合方式 /** * A:案例演示 * 需求 ...
- -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器
集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别? A:长度区别 ...
- 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义
今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...
- java基础第十二篇之集合、增强for循环、迭代器和泛型
Collection接口中的常用方法: * 所有的子类子接口都是具有的 * 集合的方法:增删改查 * * public boolean add(E e);//添加元素 返回值表示是否添加成功 * pu ...
- day002-List类、泛型
1. 集合 集合是容器,可以存储任意类型的数据,集合的长度可变. 1.1 集合和数组的比较 1.2 集合分类 单列集合:每次存储时,存储一个元素(Collection),包括:list.set 双列集 ...
- 简单来说一下java中的泛型,ssh中dao层使用会简化代码量
原来仅仅是听老师说泛型特别好用,但是后来一直弄android用的泛型就比較少了.但是感觉它真的非常重要,于是花了一下午的时间写了个demo.好,老规矩.上代码: 首先,sysout是个工具,可是用着不 ...
- Java中的泛型
1:泛型(掌握) (1)泛型概述 是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型. (2)格式: <数据类型> 注意:该数据类型只能是引用类型. (3)好处: ...
- Java List中迭代器遍历
在java中,List接口从Collection接口中继承了 iterator()函数,返回值是一个T类型的迭代器(泛型),T是List中元素的类型 public class TestListAndI ...
随机推荐
- Android打造带透明圆弧的ImageView
这几天因为项目需求,需要在ImageView上面叠加一层透明圆弧,并且在沿着圆弧的方向显示相应的文字,效果如下图所示: 拿到这个需求,首先想到的是自定义一个ImageView来实现此功能,即在onDr ...
- js的replace方法
今天在项目中发现,js的replace方法,其实只是替换第一个匹配的字符: 比如 backstreetboy.replace('b','B') 得到的结果是Backstreetboy,只是替换了第一个 ...
- [mysq]ERROR 2006 (HY000) at line xx: MySQL server has gone away 解决方法
vi /etc/my.cnf wait_timeout=2880000interactive_timeout = 2880000max_allowed_packet = 100M 完整配置文件 [my ...
- devexpress中ASPxGridView控件初始化赋值
写在ASPxGridView中OnCellEditorInitialize="ASPxGridView_progoods_CellEditorInitialize" 事件中: / ...
- Linux下搭建Lotus Domino集群
Linux下搭建Lotus Domino 集群 本文内容是Linux平台下Lotus Domino服务器部署案例(http://chenguang.blog.51cto.com/350944/1334 ...
- cordova android ios
一 . cordova android 中js 调用JAVA 方法: 二 . cordova ios --->js 调用object (一); 三 .cordova ios --->OC ...
- .NET 命名规范 代码示例
class Person { /// <summary> /// 公有字段.属性 首字母大写 /// </summary> public string FirstName; p ...
- SpringData JPA 排除 扫描 exclude-filter 不能使用解决
在加上JPA的配置外,还需要再加上 : xmlns:repository="http://www.springframework.org/schema/data/repository&quo ...
- ping 以及 traceroute 用法
目的:学习linux命令ping,traceroute的用法 1:ping的用法: man ping ping:判断某个主机是否有响应 linux-8o9i:~ # 119.29.29.29 PING ...
- Android WebRTC 音视频开发总结(五)-- webrtc开发原型
这些天基于WebRTC做了个 手机视频监控 的程序,分享出来,供想了解这方面内容的朋友参考. 这个程序最早是广州一家智能穿戴设备公司请我们做的(他们不需要底层源码,也不需要ios版本),之后我们在这个 ...