增强for
for 循环的一种
格式:
for ( 元素数据类型 变量 : 数组或者Collection集合){
使用变量即可,该变量就是元素
}
好处:简化了数组和集合的遍历
弊端:增强for的目标不能为null
解决:先对增强for的目标进行判断
范例:
package cn.itcast_01;
import java.util.ArrayList;
import java.util.List;
/*
* 增强for
* 格式:
for ( 元素数据类型 变量 : 数组或者Collection集合){
使用变量即可,该变量就是元素
}
*/
public class ForDemo {
public static void main(String[] args) {
//定义一个int 数组,并遍历
int[] arr = {1,2,3,4,5};
for(int x=0;x<arr.length;x++){
System.out.println(arr[x]);
}
System.out.println("--------------------");
//增强for
for(int x:arr){
System.out.println(x);
}
System.out.println("---------------------");
//定义一个字符串数组,增强for遍历
String[] strArray = {"唐僧","孙悟空","猪八戒","沙僧"};
for(String s :strArray){
System.out.println(s);
}
System.out.println("---------------------");
//定义一个集合,增强for遍历
ArrayList<String> array = new ArrayList<String>();
array.add("刘德华");
array.add("张学友");
array.add("郭富城");
array.add("黎明");
for(String s1:array){
System.out.println(s1);
}
//需要对增强for的目标进行判断,增强for的目标不能为null
List<String> list =null;
if(list != null){
for(String s : list){
System.out.println(s);
}
}
}
}
————————————————————————————————————————————
静态导入
格式:
import static 包名。。。类名 . 方法名;
可以直接导入到方法的级别
注意事项:
方法必须是静态的
如果有多个同名的静态方法,容易不知道用谁,这个时候要用,必须加前缀。只需要看懂。
————————————————————————————————————————————————
可变参数
定义方法的时候不知道定义多少个参数,就用可变参数
格式:
修饰符 返回值类型 方法名 (数据类型 .......变量名){
}
注意:这里的变量是个数组。
范例:
package cn.itcast_02;
public class ArgsDemo {
public static void main(String[] args) {
// 两个数据求和
int a = 10;
int b = 20;
int result = sum(a, b);
System.out.println(result);
//三个数据的求和
int c = 30 ;
result = sum(a,b,c);
System.out.println(result);
result = sum(a,b,c,40,60,70);
System.out.println(result);
}
private static int sum(int...a){
int s = 0;
for(int x:a){
s +=x;
}
return s;
}
}
Arrays工具类的asList()方法
public static <T> List <T> asList(T... a)
把数组转成集合的方法
注意事项:
虽然可以把数组转成集合,但是集合的长度不能改变,其本质还是数组
范例:
package cn.itcast_02;
import java.util.Arrays;
import java.util.List;
/*
* public static <T> List <T> asList(T... a)
把数组转成集合的方法
*/
public class AsListDemo {
public static void main(String[] args) {
/* //定义一个数组
String[] strArray ={"hello","world","java"};*/
List<String> list = Arrays.asList("hello","world","java"); //可变参数
//遍历
for (String s: list){
System.out.println(s);
}
}
}
练习01:集合嵌套存储和遍历元素的案例:
图解:
代码:
package cn.itcast_03;
import java.util.ArrayList;
/*
* 集合嵌套遍历
* 需求:
* 我们班有学生,每一个学生是一个对象。所以我们可以用一个集合表示班级学生
* 但是我们旁边还有班级,每个班级也是一个集合
* 而我现在有多个集合ArrayList,也要用集合存储。
* 就是:ArrayList<ArrayList<Strudent>>
*/
public class ArrayListDemo {
public static void main(String[] args) {
//创建大集合
ArrayList<ArrayList<Student>> bigArrayList = new ArrayList<ArrayList<Student>>();
//创建第一个班级集合
ArrayList<Student> firstArrayList = new ArrayList<Student>();
Student s1 = new Student("唐僧",30);
Student s2 = new Student("孙悟空", 500);
Student s3 = new Student("猪八戒",200);
Student s4 = new Student("沙僧",100);
Student s5 = new Student("白龙马",80);
//学生进班
firstArrayList.add(s1);
firstArrayList.add(s2);
firstArrayList.add(s3);
firstArrayList.add(s4);
firstArrayList.add(s5);
//把第一个班级添加到学籍系统
bigArrayList.add(firstArrayList);
//创建第二个班级集合
ArrayList<Student> secondArrayList = new ArrayList<Student>();
Student s11 = new Student("朱茵",27);
Student s22 = new Student("周星驰",33);
Student s33 = new Student("吴孟达",30);
//学生进班
secondArrayList.add(s11);
secondArrayList.add(s22);
secondArrayList.add(s33);
//把第二个班级加入学籍系统
bigArrayList.add(secondArrayList);
//创建第三个班级
ArrayList<Student> thirdArrayList = new ArrayList<Student>();
Student s111 = new Student("刘德华",50);
Student s222 = new Student("郭富城",48);
Student s333 = new Student("黎明",37);
Student s444 = new Student("张学友",44);
//学生入班
thirdArrayList.add(s111);
thirdArrayList.add(s222);
thirdArrayList.add(s333);
thirdArrayList.add(s444);
//把第三个班级加入学籍系统
bigArrayList.add(thirdArrayList);
//遍历集合——增强for嵌套
for(ArrayList<Student> array: bigArrayList){
for(Student s :array ){
System.out.println(s.getName()+"----"+s.getAge());
}
}
}
}
练习02:获取10个1~20之间的随机数,要求不能重复
package cn.itcast_04;
import java.util.ArrayList;
import java.util.Random;
/*
* 获取10个1~20之间的随机数,要求不能重复
* 因为长度不好去顶,而数组的长度是固定的,所以数组不合适
* 所以用集合来实现
* 思路:
* A/创建产生随机数的对象
* B/创建一个存储随机数的集合
* C/定义一个统计变量,从0开始
* D/判断统计便利是否小于10
* 是:先产生一个随机数,判断该随机数在集合中是否存在
* 如果不存在,就添加,统计变量++
* 如果存在:就不搭理它
* 否:不搭理他
* E/遍历集合
*/
public class RandomDemo {
public static void main(String[] args) {
//创建随机数对象
Random r = new Random();
//创建一个存储随机数的集合
ArrayList<Integer> array = new ArrayList<Integer>();
//定义一个统计变量,从0开始
int count = 0;
//判断统计遍历是否小于10
while(count <10){
//产生随机数
int number = r.nextInt(20)+1;
//判断随机数在集合中是否存在
if(!array.contains(number)){
array.add(number);
count++;
}
}
//便利集合
for(Integer i : array){
System.out.println(i);
}
}
}
练习03:键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值。
package cn.itcast_05;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
/*
* 思路:
* A / 键盘录入,不知道多少个,所以用集合存储
* B / 以0结束。当键盘录入的是0,就结束
* C / 把集合转成数组,对数组排序,获取该数组中最大索引的值就是最大值
*/
public class ArrayListDemo {
public static void main(String[] args) {
//键盘录入
Scanner sc = new Scanner(System.in);
//键盘录入,不知道有多少个,所以用集合存储
ArrayList<Integer> array = new ArrayList<Integer>();
//判断录入是否为0
while(true){
System.out.println("请输入数据:");
int number = sc.nextInt();
if(number!=0){
array.add(number);
}
else{
break;
}
}
//把集合转成数组
//用public <T> T[ ] toArray(T[] a )方法
Integer[] i = new Integer[array.size()];
array.toArray(i);
//对数组排序
//public static void sort(Object[] a)
Arrays.sort(i);
//获取该数组中的最大索引的值
System.out.println(i[i.length-1]);
}
}