增强for循环 集合嵌套

目录

增强for循环

格式

增强for循环特点及优缺点

简化数组遍历

简化集合遍历

ArrayList存储自定义对象并使用增强for遍历

可变参数

可变参数概述

格式

Arrays工具类的asList()方法的使用

集合嵌套


增强for循环

格式

 for(元素数据类型 变量 : 数组或者Collection集合){
     使用变量即可;
 }

增强for循环特点及优缺点

1)简化了遍历的方法;

2)增强for循环的目标要判断是否为null;

3)增强for循环在迭代集合的中途,不能增删元素,否则会报并发修改异常。

简化数组遍历

 public class Test {
     public static void main(String[] args) {
         int[] arr = {21, 54, 224, 2, 16, 123, 54};
         for (int i : arr) {
             System.out.print(i+" ");
         }
     }
 }

增强for循环 集合嵌套

简化集合遍历

 import java.util.ArrayList;
 import java.util.Collection;
 ​
 public class Test2 {
     public static void main(String[] args) {
         Collection<Integer> list = new ArrayList<>();
         list.add(12);
         list.add(19);
         list.add(78);
         list.add(15);
         list.add(112);
         list.add(56);
         list.add(15);
         for (Integer ele : list) {
             System.out.print(ele+" ");
         }
     }
 }

增强for循环 集合嵌套

ArrayList存储自定义对象并使用增强for遍历

 //自定义对象Student
 public class Student {
     private String name;
     private int age;
 ​
     public Student(String name, int age) {
         this.name = name;
         this.age = age;
     }
 ​
     @Override
     public String toString() {
         return "Student{" +
                 "name='" + name + '\'' +
                 ", age=" + age +
                 '}';
     }
 }
 ​
 //测试类
 import java.util.ArrayList;
 ​
 public class Test3 {
     public static void main(String[] args) {
         ArrayList<Student> list = new ArrayList<>();
         list.add(new Student("Alice",18));
         list.add(new Student("Helen", 19));
         list.add(new Student("Jack", 20));
 ​
         for (Student student : list) {
             System.out.println(student.toString());
         }
     }
 }

增强for循环 集合嵌套

可变参数

可变参数概述

当我们在定义方法的时候,不知道该定义多少个参数时,我们就需要可变参数来帮助我们。

格式

 修饰符 返回值类型 方法名(数据类型... 变量名){
     方法体;
 }

注意

1)这里的变量其实是一个数组

2)如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个。

例如

 public void fun(String s,int... a){
     方法体;
 }

案例:求数组中所有元素之和,需使用可变参数

 public class Test4 {
     public static void main(String[] args) {
         int[] arr = {21, 54, 224, 2, 16, 123, 54};
         int add = add(arr);
         System.out.println(add);
     }
     //定义有可变长参数的add()方法,来获取元素之和
     public static int add(int... arr) {
         int sum = 0;
         for (int i : arr) {
             sum += i;
         }
         return sum;
     }
 }

Arrays工具类的asList()方法的使用

 public static <T> List<T> asList(T... a) ;

该方法的作用是将数组转换为集合,但是,通过此方法得到的集合长度是不可变的,即不能对集合进行增删操作,只能获取元素。

代码实现

 import java.util.Arrays;
 import java.util.List;
 ​
 public class Test6 {
     public static void main(String[] args) {
         //定义一个String类型的数组
         String[] strings = {"one", "two", "three", "four", "five", "six"};
         //将定义好的String数组当做参数整体传进去
         List<String> list = Arrays.asList(strings);
         //list即为获得的集合
     }
 }

集合嵌套

ArrayList嵌套ArrayList

 案例:班里的每个学生都是一个Student对象,所以使用ArrayList<Student>表示;年级有许多个班,而每个班都是一个ArrayList<Student>对象,那么就可以创建一个更大的集合ArrayList<ArrayList<Student>>来存放每个班的小集合。

定义Student类,定义成员变量name和age,重写toString()方法,满足输出的格式。

 public class Student {
     private String name;
     private int age;
 ​
     public Student(String name, int age) {
         this.name = name;
         this.age = age;
     }
 ​
     @Override
     public String toString() {
         return "\""+this.name+
                 "\""+","+this.age ;
     }
 }
 import java.util.ArrayList;
 import java.util.function.Consumer;
 ​
 public class Test7 {
     public static void main(String[] args) {
         ArrayList<Student> studentArrayList1 = new ArrayList<>();
         studentArrayList1.add(new Student("s11", 18));
         studentArrayList1.add(new Student("s12", 19));
         ArrayList<Student> studentArrayList2 = new ArrayList<>();
         studentArrayList2.add(new Student("s21", 20));
         studentArrayList2.add(new Student("s22", 19));
         ArrayList<Student> studentArrayList3 = new ArrayList<>();
         studentArrayList3.add(new Student("s31", 18));
         studentArrayList3.add(new Student("s32", 20));
 ​
         ArrayList<ArrayList<Student>> classArrayList = new ArrayList<>();
         classArrayList.add(studentArrayList1);
         classArrayList.add(studentArrayList2);
         classArrayList.add(studentArrayList3);
 ​
         classArrayList.forEach(new Consumer<ArrayList<Student>>() {
             @Override
             public void accept(ArrayList<Student> students) {
                 System.out.println();
                 students.forEach(new Consumer<Student>() {
                     @Override
                     public void accept(Student student) {
                         System.out.println(student.toString());
                     }
                 });
             }
         });
     }
 }

上一篇:JAVA练习148-返回倒数第 k 个节点


下一篇:C++ 语言学习入门--链表、队列与栈