for循环遍历的盗版笔记

遍历一个List有如下几种方法   5 6 是 java8

增强for循环底层由Iterator实现

增强for的出现时替代迭代器的,所以在遍历集合或者遍历数组就可以使用增强for去完成

增强for循环的弊端:如果集合的对象是null,如果再次对集合操作,就会出现异常,对集合进行判断,非空判断解决

四种遍历方法:

1:迭代器  2:普通for循环   3:增强for循环   4:(非重点)listiterator(iterator的子接口)两者相类似
(还以一种Vector自带的elements()方法,类似于迭代器的遍历方法)
如果结合为null,抛出:java.lang.NullPointerException
当应用程序试图在需要对象的地方使用 null 时,抛出该异常

public class ForExercise {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
// array=null;
array.add("hello");
array.add("java");
array.add("worlid");
// 迭代器遍历
//优点:自带选择判断语句hasNext()方法,不会出现遍历数量出现错误,书写复杂
// 可以对集合进行删除操作
//缺点:该方法只能遍历集合,比较局限,且需要建立对象,占用空间


Iterator<String> it = array.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
System.out.println("----------------");
//普通for循环
//优点:有判断数组长度的控制语句,并且可以选择遍历长度,
// for循环使用范围广,且使用简单
//缺点:for循环更多适用于循环条件,不能对集合本身进行操作,对于集合遍历稍显不足
for(int x=0;x<array.size();x++){
String s1 = array.get(x);
System.out.println(s1);
}
System.out.println("-----------------");
//增强for循环
//优点:代码简单易读,书写方便
//缺点:不能对集合本身进行操作

 

迭代器(Iterator)

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

迭代器应用:
 list l = new ArrayList();
 l.add("aa");
 l.add("bb");
 l.add("cc");
 for (Iterator iter = l.iterator(); iter.hasNext();) {
  String str = (String)iter.next();
  System.out.println(str);
 }
 /*迭代器用于while循环
 Iterator iter = l.iterator();
 while(iter.hasNext()){
  String str = (String) iter.next();
  System.out.println(str);
 }


for(String b:array) {
System.out.println(b);
}
}
}

增强for循环的格式
for(数据大类型  变量名 : 数组或者集合对象名){
输出变量
}

public static void test1(List<String> list) {
1 for (int i = 0; i < list.size(); i++)
2 for (int i = 0,lengh=list.size(); i < lengh; i++)
{ System.out.println(list.get(i)); }}

3 Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());

4 for(String str:list){
System.out.println(str);

5 list.forEach(str->{
System.out.println(str); });

6 list.forEach(str->{
System.out.println(str);});

1、通过key集合访问,对Key敢兴趣,可以访问与key对应的Value值;

 for(String k:maps.keySet()){
            System.out.println(k+":"+maps.get(k));
        }
2、通过value集合访问,只对value值感兴趣,无法访问key值;

 for(String value:maps.values()){
            System.out.println(value);
        }
3、通过Entry集合访问,对Entry感兴趣,可以访问与key对应的Value值

 for(Entry entry:maps.entrySet()){
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
4、通过迭代Key集合访问Map集合,maps.keySet()返回的是一个Set<String>集合,Set直接继承Collection,所以可以对其进行迭代。

Iterator<String> iterator = maps.keySet().iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println(key+":"+maps.get(key));
        }

5、通过迭代Values集合访问Map集合,maps.values()返回的是Collection<String>,所以可以对其迭代。

Iterator<String> iter= maps.values().iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }

6、通过迭代Entry集合访问Map集合,maps.entrySet()返回的是一个Set<Entry<String, String>>,Set直接继承Collection,所以可以对其迭代。

Iterator<Entry<String, String>> it = maps.entrySet().iterator(); 
        while(it.hasNext()){ 
            Entry<String, String> entry = it.next(); 
            System.out.println(entry.getKey()+":"+entry.getValue()); 

        } 

Java中迭代器Iterator接口是用来对集合中的对象进行遍历或者移除操作的,大多数是遍历操作的

下面介绍迭代器的使用:

ArrayList list=new ArrayList();
  list.add("A");
  list.add("B");
  list.add("H");
  list.add("E");
  list.add("J");
  
  Iterator ite=list.iterator();
  while(ite.hasNext()){
   System.out.println(ite.next());
  }

public class Test2 {
public static void main(String[] args) {
int[][] arr = new int[][]{{10,20,30},{100,200,300}};
//int[] arr0 = arr[0]; // 取得二维数组第一维的第一个数组
//取得二维数组的第一种方法 ,for循环
for (int i = 0; i < arr.length; i++) { //二维数组的长度指的是最外层的数组长度
for (int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
//取得二维数组的第二种方法,增强for循环遍历数组
for (int[] childArr : arr) {
for (int number : childArr) {
System.out.println(number);}}}}

简单的小栗子:

package sample;

public class arry {
public static void main(String[] args) {
// int[] arr = new int[20]; //添加数组个数20
// for(int i=0;i<arr.length;i++)
// arr[i] = i;

int[] scores = new int[] {100,99,98};
for(int i = 0;i<scores.length;i++)
System.out.println(scores[i]);
// for(int score : scores)//增强遍历
// System.out.println(score);

}
}

 

posted @ 2020-07-04 10:18  理性学习  阅读(78)  评论(0编辑  收藏  举报