您现在的位置是:主页 > news > 如何提高网站打开速度/百度数据研究中心
如何提高网站打开速度/百度数据研究中心
admin2025/6/27 18:47:08【news】
简介如何提高网站打开速度,百度数据研究中心,安徽亳州建设厅网站,网站开发及建设费用/** * author StormWangxhu * version 创建时间:2017年11月3日 下午9:17:34 * */ 常用遍历集合元素方式 两种: 1、Iterator接口 2、foreach循环 Iterator接口 程序开发中经常需要遍历集合元素,Java jdk 专门提供一接口iterator. 与Coll…
/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午9:17:34
*
*/
常用遍历集合元素方式
两种:
1、Iterator接口
2、foreach循环
Iterator接口
程序开发中经常需要遍历集合元素,Java jdk 专门提供一接口iterator. 与Collection、Map接口主要用于存储元素不同,iterator接口主要用于迭代访问(即遍历)Collection中的元素。因此iterator也被称为迭代器。
案例:
package com.stormwang.cycle;import java.util.ArrayList;
import java.util.Iterator;/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午9:12:42
*
*/
/*** 练习使用迭代器 遍历集合元素* */
public class IteratorDemo {public static void main(String[] args) {// TODO Auto-generated method stubArrayList arrayList = new ArrayList<>();arrayList.add("day_1");arrayList.add("day_2");arrayList.add("day_3");arrayList.add("day_4");Iterator iterator =arrayList.iterator();//获取Iterator对象while (iterator.hasNext()) { //判断ArrayList中是否存在下一个元素Object object = (Object) iterator.next(); //取出ArrayList集合中的元素System.out.println(object);}}}
解释代码
遍历过程如下:
1、首先调用ArrayList集合的iterator()方法获得迭代器对象。
2、然后 hasNext()方法判断集合中是否有下一个元素。
3、若存在; 则next()方法获取元素。
否则: 说明已到达了集合末尾,停止遍历元素。
注意:next()方法获取元素时,必须保证获取元素的存在,否则,回抛出NoSuchElementException .
需要特别说明的是:
当通过迭代器获取ArrayList集合元素时,都会将这些元素当做Object类型看待,如果要得到特定类型的元素。需要进行强制类型转换。
- iterator迭代器对象在遍历集合时,内部采用指针方式来跟踪集合中的元素。
hasNext()方法返回false时,终止迭代器。 - 迭代器注意:
在集合进行迭代过程中,不允许出现迭代器以外的对象操作。
比如:
package com.stormwang.cycle;import java.util.ArrayList;
import java.util.Iterator;/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午9:12:42
*
*/
/*** 练习使用迭代器 遍历集合元素* */
public class IteratorDemo {public static void main(String[] args) {// TODO Auto-generated method stubArrayList arrayList = new ArrayList<>();arrayList.add("day_1");arrayList.add("day_2");arrayList.add("day_3");arrayList.add("day_4");Iterator iterator =arrayList.iterator();//获取Iterator对象while (iterator.hasNext()) { //判断ArrayList中是否存在下一个元素Object object = (Object) iterator.next(); //取出ArrayList集合中的元素System.out.println(object);arrayList.add("Java"); //出现迭代器以外的对象操作元素}}}
我们看一下结果:
因为在迭代过程中。出现了迭代器以外的对象操作元素。
会抛出java.util.ConcurrentModificationException异常。
所以:
Iterator在迭代是,只能对元素进行获取(next())和删除(remove())操作。
下面来说说foreach循环:
虽然Iterator可以用来遍历集合元素,但写法上比价繁琐,为了简化书写,jdk5。0开始提供了foreach循环。foreach循环是一种更加简洁的for循环,也称为增强for循环。
- foreach循环用途:
用于遍历 : 数组 或 集合 - 语法格式:for(容器中元素类型 临时变量 : 容器变量 ){
执行语句;
} - 与for循环区别:
不需要获取容器的长度
不需要根据索引访问容器中的元素,但会自动遍历容器中的每一个元素。
没有循环条件
没有迭代语句
先来看看用foreach循环编辑集合:
package com.stormwang.cycle;import java.util.LinkedList;/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午9:17:34
*
*/
public class ForEachDemo {public static void main(String[] args) {// TODO Auto-generated method stubLinkedList linkedList = new LinkedList<>();//增操作System.out.println("增加元素:");linkedList.add("stu1");linkedList.add("stu2");linkedList.add("stu3");linkedList.add("stu4");for (Object object : linkedList) {System.out.println(object);}}}
结果:
再来看看利用简单的 for循环遍历集合:
package com.stormwang.cycle;import java.util.LinkedList;/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午9:17:34
*
*/
public class ForEachDemo {public static void main(String[] args) {// TODO Auto-generated method stubLinkedList linkedList = new LinkedList<>();//增操作System.out.println("增加元素:");linkedList.add("stu1");linkedList.add("stu2");linkedList.add("stu3");linkedList.add("stu4");/*for (Object object : linkedList) {System.out.println(object);}*/int length ;length= linkedList.size();System.out.println(length);for(int i =0;i<length;i++) {System.out.println(linkedList.get(i));}}}
运行结果:
可以看到,运行结果一样,但是foreach循环操作更简单。
foreach遍历集合的局限性
方便的同时,有其局限性:
在遍历数组或者集合时,只能访问集合里元素,不能对其进行修改。接下来以一个String 类型的数组为例进行演示:
package com.stormwang.cycle;
/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午11:44:55
*
*/
/*** foreach循环局限性演示:* 不能修改元素* */
public class SpecialForeach {public static void main(String[] args) {// TODO Auto-generated method stubString[] str = {"aaa","bbb","ccc"};for (String string : str) {string = "ddd";}System.out.println("foreach循环修改后的数组"+str[0]+", "+str[1]+", "+str[2]);//for循环遍历叔祖for (int i = 0; i < str.length; i++) {str[i] = "ddd";}System.out.println("for循环修改后的数组"+str[0]+", "+str[1]+", "+str[2]);}}
看一下结果:
foreach循环没有改变数组元素,for循环改变。
解释:
这段代码只是将临时变量str指向了一个新的字符串,对数组元素没有任何影响。
而for循环,可以通过索引的方式来引用数组中的元素并将其修改。
Iterator遍历集合元素得坑(局限性)!
首先给出结论:
结论:在Iterator迭代器对集合元素遍历时,不允许其他对象引用自身的 remove()方法进行删除!若想删除,须用迭代器自身的remove()方法。否则会抛出异常。
用代码来演示一下:
package com.stormwang.cycle;import java.util.ArrayList;
import java.util.Iterator;/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午11:59:17
*
*/
/*** 迭代器Iterator在遍历过程中remove()操作* * */
public class SpecialIterator {public static void main(String[] args) {ArrayList arrayList = new ArrayList<>();//实现集合的增删改查arrayList.add("hello!");arrayList.add("I am java!");arrayList.add("今天是11月3号!,我在图书馆学习!");arrayList.add("我也会很牛逼的对吗!");arrayList.add(3, "我是指定位置插入的元素");//现在进行迭代Iterator iterator =arrayList.iterator();while (iterator.hasNext()) {Object object = (Object) iterator.next();if (("hello!").equals(object)) {//注意: 使用arraylist对象的remove()方法arrayList.remove(object);}}System.out.println(arrayList);}}
看看运行一下:
抛出了异常!!!!
这个异常是迭代器对象抛出的。
原因:
集合中删除了的元素,会导致迭代器预期的迭代次数发生改变,导致迭代器结果不准确!
那么有什么措施吗?就不能删除了是吧! 不不不,有的!
措施:
1、从业务逻辑上分析,只想将一个元素删除,至于后面的元素不去管他们,则删除该元素后,我们跳出循环,即 break ; 。
package com.stormwang.cycle;import java.util.ArrayList;
import java.util.Iterator;/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午11:59:17
*
*/
/*** 迭代器Iterator在遍历过程中remove()操作* * */
public class SpecialIterator {public static void main(String[] args) {ArrayList arrayList = new ArrayList<>();//实现集合的增删改查arrayList.add("hello!");arrayList.add("I am java!");arrayList.add("今天是11月3号!,我在图书馆学习!");arrayList.add("我也会很牛逼的对吗!");arrayList.add(3, "我是指定位置插入的元素");//现在进行迭代Iterator iterator =arrayList.iterator();while (iterator.hasNext()) {Object object = (Object) iterator.next();if (("hello!").equals(object)) {//注意: 使用arraylist对象的remove()方法arrayList.remove(object);break;}}System.out.println(arrayList);}}
运行后:
2、若需要在集合的迭代期间对集合的元素进行删除,可使用迭代器自身的删除方法。 即 iterator.remove()。
看一下代码:
package com.stormwang.cycle;import java.util.ArrayList;
import java.util.Iterator;/**
* @author StormWangxhu
* @version 创建时间:2017年11月3日 下午11:59:17
*
*/
/*** 迭代器Iterator在遍历过程中remove()操作* * */
public class SpecialIterator {public static void main(String[] args) {ArrayList arrayList = new ArrayList<>();//实现集合的增删改查arrayList.add("hello!");arrayList.add("I am java!");arrayList.add("今天是11月3号!,我在图书馆学习!");arrayList.add("我也会很牛逼的对吗!");arrayList.add(3, "我是指定位置插入的元素");//现在进行迭代Iterator iterator =arrayList.iterator();while (iterator.hasNext()) {Object object = (Object) iterator.next();if (("hello!").equals(object)) {//注意: 使用arraylist对象的remove()方法iterator.remove();}}System.out.println(arrayList);}}
再来看看运行:
这次在迭代器迭代期间删除成功!
再次申明一下结论:
结论: 调用迭代器对象的remove()方法删除元素,所导致的迭代次数变化,对于迭代器对象本身而言是可以预知的!只有儿子是亲的,才会让进门! 啊哈哈哈哈!