您现在的位置是:主页 > news > 如何提高网站打开速度/百度数据研究中心

如何提高网站打开速度/百度数据研究中心

admin2025/6/27 18:47:08news

简介如何提高网站打开速度,百度数据研究中心,安徽亳州建设厅网站,网站开发及建设费用/** * 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. 与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()方法删除元素,所导致的迭代次数变化,对于迭代器对象本身而言是可以预知的!只有儿子是亲的,才会让进门!  啊哈哈哈哈!