迭代器、泛型和增强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 ...
随机推荐
- Python实现顺时钟回形矩阵
无意间在网上看到了一个面试题是,写出一个回形矩阵.实现的效果大致如下: [ 1, 2, 3, 4, 5] [16, 17, 18, 19, 6] [15, 24, 25, 20, 7] [ ...
- 凸包(Convex Hull)构造算法——Graham扫描法
凸包(Convex Hull) 在图形学中,凸包是一个非常重要的概念.简明的说,在平面中给出N个点,找出一个由其中某些点作为顶点组成的凸多边形,恰好能围住所有的N个点. 这十分像是在一块木板上钉了N个 ...
- 重拾HTML(一)
一.网页组成 HTML:网页的具体内容和结构,由N个标签(节点,元素,标记)组成 CSS:网页的样式,美化网页 JavaScript:网页的交互效果,比如用户鼠标的点击事件作出响应 二.常见的HT ...
- 解决wamp mysql数据库出现乱码的问题。
一般的乱码情况: 如果在控制台上出现這样的乱码,一般在phpmysqladmin上也会出现乱码,因为他们都一样 一个在控制台出现,一个在页面出现. 首先在mysql.exe上输出 mysql>S ...
- Java创建WebService服务及客户端实现
简介 WebService是一种服务的提供方式,通过WebService,不同应用间相互间调用变的很方便,网络上有很多常用的WebService服务,如:http://developer.51cto. ...
- oracle:jdbcTest
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...
- java(POI):基于模版的Excel导出功能,局部列写保护总结
需求描述: 1.导出的Excel中部分列包含有下拉列表,并没有尝试过用代码实现这种功能,个人感觉比较棘手,故采用了模版的形式,直接导出数据到已经创建好的Excel模版中 2.Excel的第一列需要写保 ...
- C和C++混合编译
关于extern_C 通常,在C语言的头文件中经常可以看到类似下面这种形式的代码: #ifdef __cplusplus extern "C" { #endif /**** som ...
- 在ax中怎么对enum类型循环取其中每一个值
static void test(Args _args) { DictEnum dictEnum; int i,nextPos; EnumId enumId; ; enumId = EnumNum(S ...
- How to search compound files
Last week my friend told me that she made a terrible mistake. She conducted raw serch and found no s ...