(35)Java学习笔记——集合框架 / 增强for /静态导入 /可变参数

增强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]);
		
	}
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值