jdk1.5以后的特性以及Arrays类的asList方法和集合的嵌套遍历

Jdk一直在更新,其中的功能也一直在更新,接下来让我们学学jdk1.5版本以后的一些常用的特性:

Jdk5以后的新特性:

   增强for,静态导入,可变参数,泛型,自动拆装箱...

  增强for循环的格式

   for(数据大类型  变量名 : 数组或者集合对象名){

   输出变量即可!

   }

  

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

 

  增强for循环的弊端:如果集合的对象是null,如果再次对集合操作,就会出 现异常

扫描二维码关注公众号,回复: 420849 查看本文章

   对集合进行判断,非空判断解决

下面看看先看看增强for循环:

例如:

package com.jdk;
 
import java.util.ArrayList;
import java.util.List;
 
public class TextDome {
 
public static void main(String[] args) {
//创建集合对象
List<String> list=new ArrayList<String>();
//添加元素
list.add("hello");
list.add("World");
list.add("javaSE");
//对集合进行非空判断,防止集合是空值
if(list!=null) {
//增强for循环
for(String str:list) {
System.out.println(str);
}
}
}
}
运行结果:
hello
World
javaSE

上面学习了增强for循环,接下来再看看静态导入

静态导入的一个重要的前提:被调用的方法必须是静态的,在API中一些类的方法前面有static修饰的,才可以使用静态导入

第二个前提:使用静态导入时必须导入到一个方法的级别,而不是类的级别、

之前我们学过录入键盘对象导入的包是类级别的

例如:Import  java.util.Scanner;

二者是有区别的,不能用错

 

 静态导入的格式:

  import static 包名.类名.方法名;

 

例如: 

package com.静态导入;
 
import static java.lang.Math.abs;
import static java.lang.Math.pow;
 
public class StaticDome {
 
public static void main(String[] args) {
//普通调用Math类方法
System.out.println("普通调用abs方法:"+Math.abs(-100));
//使用静态导入的方法去使用,直接写方法名去使用,但是前提必须使用了静态导入
System.out.println("使用静态导入:"+abs(-100));
// 当一个类中方法和被需要静态导入的方法名名字一致时,必须使用前缀
System.out.println(java.lang.Math.pow(2,3));
}
public static void pow() {

}
}
运行结果:
普通调用abs方法:100
使用静态导入:100
8.0

 

 可变参数

可变参数:当一个方法的参数个数不确定的时候,可以去使用可变参数但是不建议经常使用这个特性,我们了解就好

格式:

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

在上面的方法名后面的括号里的...这三个点一定要写全,不然会无法运行程序

注意:

1)变量名:看成一个数组

2)使用的时候要注意数据类型...

例如:

package com.argsDome;
 
public class argsDome {
 
public static void main(String[] args) {
//可以根据自己需要的参数去输入即可
System.out.println("总和为:"+sum(10,20,30,40));
}
public static int sum(int ...a) {
//在这里将a看作是数组
//先定义result的初始值为0
int result=0;
//增强for循环
for(int i:a) {
result+=i;
}
return result;
}
}
运行结果:
总和为:100

 

 对于数组类Arrays,有一个方法可以直接将数组转换成集合

public static <T> List<T> asList(T... a) :将数组转换成固定大小的集合

但是转换之后,集合的长度就会固定,不能发生改变,要想改变集合的长度,只能先去改变数组的长度,不能直接在集合上添加或者删除集合中的元素,否则会在运行时报错

例如:

package com.argsDome;
 
import java.util.Arrays;
import java.util.List;
 
public class ArraysasListDome {
 
public static void main(String[] args) {
//先创建一个字符串数组
String[] s= {"hello","world","java"};

//也可以直接asList后面输入字符串,不用创建字符串数组
//List<String> list=Arrays.asList("hello","world","java");

//调用asList方法,返回值是集合List
List<String> list=Arrays.asList(s);
for(String str:list) {
System.out.println(str);
}
System.out.println("-------------------------------"); 

//asList方法将数组转换成集合后,它的集合长度就是固定的不能再发生改变了,所以不能使用下面的添加和删除功能,在编译时没有问题,运行时就会报错
//list.add("javaSE");
//list.remove("java");

//虽然我们不可以改变集合的长度,替换集合里面的元素还是可以的
list.set(2, "javaSE");
//增强for循环
for(String str2:list) {
System.out.println(str2);
}
}
}
运行结果:
hello
world
java
-------------------------------
hello
world
javaSE

前面学了好多集合了,接下来我们看看集合的嵌套,并将集合遍历出来

在这里有这样的一个例题:

 需求

集合的嵌套遍历

 

有一个Java基础班,里面有很多学生,创建一个班级:ArrayList<Student>不止一个Java基础班,这个时候就定义大集合:ArrayList<ArrayList<Student>>有三个基础班,分别遍历每一个班里面学生信息:(name,age)

例如:

先创建一个自定义学生类

package com.ArraysListDome;
 
public class Student {
 
private String name;
private int age;

public Student() {
super();
}

public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}

 

再来创建一个测试类去进行集合的嵌套

package com.ArraysListDome;
 
import java.util.ArrayList;
 
public class ArraysListDome {
 
public static void main(String[] args) {
//创建大集合(班级集合)
ArrayList<ArrayList<Student>> list=new ArrayList<ArrayList<Student>>();
//创建第一个小集合(java基础班)
ArrayList<Student> list2=new ArrayList<Student>();
//创建学生对象
Student s1=new Student("迪丽热巴",27);
Student s2=new Student("高雯",25);
Student s3=new Student("赵星星",24);
//将学生对象添加到集合中
list2.add(s1);
list2.add(s2);
list2.add(s3);
//将第一个小集合添加到大集合中去
list.add(list2);
//创建第二个小集合
ArrayList<Student> list3=new ArrayList<Student>();
//创建学生对象
Student s4=new Student("吴宣仪",25);
Student s5=new Student("孟美岐",26);
Student s6=new Student("杨超越",25);
//将学生对象添加到第二个小集合中去
list3.add(s4);
list3.add(s5);
list3.add(s6);
//将第二个小集合添加到大集合中去
list.add(list3);
//创建第三个小集合
ArrayList<Student> list4=new ArrayList<Student>();
//创建学生对象
Student s7=new Student("宋茜",32);
Student s8=new Student("刘亦菲",35);
Student s9=new Student("宋祖儿",24);
//将学生对象添加到第三个小集合中
list4.add(s7);
list4.add(s8);
list4.add(s9);
//将第三个小集合添加到大集合中去
list.add(list4);
//增强for循环,遍历大集合中的学生对象
for(ArrayList<Student> st:list) {
for(Student s:st) {
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
}
运行结果:
迪丽热巴---27
高雯---25
赵星星---24
吴宣仪---25
孟美岐---26
杨超越---25
宋茜---32
刘亦菲---35
宋祖儿---24

 

猜你喜欢

转载自blog.csdn.net/j_better/article/details/80257795