目录
增强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+" ");
}
}
}
简化集合遍历
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+" ");
}
}
}
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());
}
}
}
可变参数
可变参数概述
当我们在定义方法的时候,不知道该定义多少个参数时,我们就需要可变参数来帮助我们。
格式
修饰符 返回值类型 方法名(数据类型... 变量名){ 方法体; }
注意
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());
}
});
}
});
}
}