java中的数组集合常用的遍历方法

来源:互联网 发布:流行网络词语成因例子 编辑:程序博客网 时间:2024/05/22 06:33

1. for循环

2. forEach循环

3. Iterator迭代器

4. Enumeration迭代器



/*  数组,集合的遍历方式:

* */


/* 1. 普通for循环 */

String[] strings = new String[10];

for( inti=0; i<strings.length;i++ ){

strings[i] ="dffff"+i;

}

/* 2. 增强for循环  for( value : collection ) */

System.out.println();

for( String string :strings ){

System.out.println(string);

}

System.out.println();

/*  迭代器:

* 迭代器对象提供了一些方法专门处理集合中的元素。遍历,删除,获取集合中的元素,叫做迭代器;

*   正式由于每一个容器都有取出元素的功能。这些功能定义都一样,只不过实现的具体方式不同,所以对共性的功能进行了抽取,

*   从而出现了Iterator接口。而每一个容器都在内部对该接口进行了内部类的实现。也就是将取出方式的细节进行封装;

*   

*   

* 2.3.1 Iterable (Iterable是协议接口, Iterator是迭代器对象 )

*   jdk1.5之后添加的新接口,Collection的父接口。实现了Iterable的类就是可迭代的,并且支持增强for循环.该接口

*   只有一个方法即获取迭代器的方法iterator(),可以获取每个容器自身的迭代器Iterator; 

*   Collection集合容器都需要获取迭代器(Iterator),于是在5.0之后又进行了抽取将获取容器迭代器的Iterator()方法

*   放入到了Iterable接口中. Collection接口继承了Iterable,所以Collection体系都具备获取自身迭代器的方法,只不

*   过每个子类集合都进行了重写;

*   

*   

*  2.3.2 Iterator ( 迭代器对象 ) 

*   

*  Iterator<T> iterator() 返回该集合的迭代器对象; 

*   

*  Iterator接口定义的方法:

*  Iterator 该接口是集合的迭代器接口类, 定义了常见的迭代方法:

(1) boolean hasNext() 

判断集合中是否有元素,如果有元素可以迭代就返回true,否则返回fasle

*  

(2) E next()

返回迭代的下一个元素,注意:如果美誉哦下一个元素时,调用next(),会抛异常NoSuchElementException

*  

(3) void remove()

从迭代器指向的集合中移除迭代器返回的最后一个元素; 

*  

*  


*  正常的遍历通过 hasNext(),next()方法就可以搞定;

*  但是总有特殊情形,即在遍历的过程中,需要出现删除操作; (即关于 viod remove()方法 )

*  

*   1. 在普通的for循环中,如果调用remove方法,就会导致循环出错,因为循环过程中list.size()的大小发生了变化,

*     所以会导致错误。

*   

*   2. 迭代器的快速失败机制:

*     由于集合在多线程下遍历情形下,具有线程不安全的特性,所以使用起来需要注意遍历过程中被增加删除的问题;

*   在对集合进行迭代过程中,除非通过迭代器自身remove或者add对集合进行修改,否则在其他线程中以任何形式对集合

*      进行修改,java会抛出并发修改异常ConcurrentModificationException, 普通迭代器只支持在迭代过程中的删除动作;

3. 其实还可以通过创建新的集合,将需要的元素添加进新集合的方式来达到添加和删除的目的;

* */

/* 3. 迭代器遍历 */

Collection<String> list = new ArrayList<String>();

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

list.add("java核心技术");

list.add("java语言程序设计");

System.out.println(list);

System.out.println("");

System.out.print("[");

for( Iterator<String> iterator = list.iterator(); iterator.hasNext(); ){

String string = iterator.next();

System.out.print(string+", ");

}

System.out.println("]");


/* List特有的迭代器ListIterator 

* 普通的Iterator 只具备三个接口 boolean hasNext(); void next(); Object remove();

* 而List具有自己特有的迭代器ListIterator:

*  (1) hasNext();

*  (2) next();

*  (3) remove();

*  (4) add(E e);  将指定的元素插入列表,该元素直接插入到next返回的下一个元素的前面;(如果有)

*  (5) set(E o);  用指定元素替换next或者previous返回的最后一个元素;  //替换功能

*  (6) hasPrevious(); 逆向遍历列表,列表迭代器有多个元素,返回true;

*  (7) previous();  逆向遍历列表,返回列表中的前一个元素;

*   add(E e); set(E o); remove()操作的元素都是迭代器的游标当前指向的元素对象;

*   

* */

ArrayList<String> lst  = new ArrayList<String>();

lst.add("11111");

lst.add("22222");

lst.add("33333");

ListIterator<String> iterator = (ListIterator<String>)lst.listIterator();

iterator.next();

iterator.add("12345");

iterator.next();

iterator.remove();

System.out.println( lst );

/* Enumerationd迭代器

* 这是一个被旧版本的迭代器; 但是在servlet中总能见到它的身影;

* 接口:

* (1) boolean hasMoreElements()  询问是否还有下一个元素

* (2) E       nextElement()      获取下一个元素;( 需要hasMoreElements()配合使用 )

*   */

Enumeration<String> enumeration;

while (enumeration.hasMoreElements()) {

String string = (String)enumeration.nextElement();

}

0 0
原创粉丝点击