Java可变参数,Collection集合工具类,shuffle方法,Collections.sort方法
1、可变参数
可变参数:是JDK1.5之后出现的新特性
使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。
使用格式:定义方法时使用
修饰符 返回值类型 方法名(数据类型…变量名){ }
可变参数的原理:
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数。
传递的参数个数,可以是0个(不传递)1,2,3,4…多个
代码举例:
public class Demo01VarArgs {
public static void main(String[] args) {
int i = add(10, 20, 30, 40, 50, 60);
System.out.println(i);
}
/*
定义计算(0—n)整数和的方法
已知:计算整数的和,数据类型已经确定int
但是参数的个数不确定,不知道计算几个整数的和,就可以使用可变参数
add();就会创建长度为0的数组,new int[0]
add(10, 20, 30);就会创建一个长度为3的数组,存储传递的参数:new int[3];
*/
public static int add(int...arr) {
// System.out.println(arr); //[[email protected]
// System.out.println(arr.length);
//定义一个初始化的变量,记录累加求和
int sum = 0;
//遍历数组中的元素
for (int i : arr) {
sum += i;
}
return sum;
}
//定义一个方法,计算两个int整数的和
// public static int add2(int a, int b) {
// return a + b;
// }
//计算三个整数的和
// public static int add3(int a, int b, int c) {
// return a + b + c;
// }
}
可变参数的注意事项:
1、一个方法的参数列表,只能有一个可变参数
2、如果方法的参数有多个,那么可变参数必须写在参数列表的末尾。
终极写法:
public static void method(Object...obj){
}
2、Collection集合工具类
部分常用方法:
public static boolean addAll(Collection c, T…elements);往集合中添加一些元素
public static void shuffle(List<?> list) 打乱顺序:打乱集合的顺序。
public class Demo01Collections {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
//往集合中添加多个元素add方法
// list.add("黄佳林");
// list.add("倪文瀚");
// list.add("高佳林");
// list.add("红佳林");
// System.out.println(list);
//addAll方法
Collections.addAll(list,"a","b","e", "f", "g");
System.out.println(list); //[a, b, e, f, g]
//打乱顺序
Collections.shuffle(list);
System.out.println(list); //[f, b, g, a, e]
}
}
public static void sort(List list):将集合中元素按照默认规则排序。
注意:sort方法使用前提:
被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序中的规则。
Comparable排序规则:
自己(this)- 参数:升序
参数- 自己(this):降序
对象类:
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person() {
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Person(String name, int age) {
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;
}
@Override
public int compareTo(Person o) {
//return 0; //认为元素都是相同的
//自定义比较的规则,比较两个人的年龄(this, 参数Person)
return this.getAge() - o.getAge(); //年龄升序排序
}
}
实现类:
public class Demo02Sort {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(5);
list.add(0);
list.add(8);
list.add(7);
System.out.println(list); //[1, 2, 5, 0, 8, 7]
//sort方法排序
Collections.sort(list);
System.out.println(list); //[0, 1, 2, 5, 7, 8]
ArrayList<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("d");
list1.add("b");
list1.add("c");
System.out.println(list1); //[a, d, b, c]
Collections.sort(list1);
System.out.println(list1); //[a, b, c, d]
ArrayList<Person> list2 = new ArrayList<>();
list2.add(new Person("张三",18));
list2.add(new Person("李四",20));
list2.add(new Person("王五",17));
System.out.println(list2);
//[Person{name='张三', age=18}, Person{name='李四', age=20}, Person{name='王五', age=17}]
Collections.sort(list2);
System.out.println(list2);
//[Person{name='王五', age=17}, Person{name='张三', age=18}, Person{name='李四', age=20}]
}
}
public static void sort(List list, Comparator<? super T> ):将集合中的元素按照指定规则排序
对象类:
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", 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;
}
}
实现类:
public class Demo03Sort {
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(4);
list1.add(2);
list1.add(3);
System.out.println(list1); //[1, 4, 2, 3]
Collections.sort(list1, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
System.out.println(list1); // [1, 2, 3, 4]
ArrayList<Student> list2 = new ArrayList<>();
list2.add(new Student("迪丽热巴", 20));
list2.add(new Student("杨幂", 19));
list2.add(new Student("王雷", 21));
list2.add(new Student("俄哈弗", 15));
Collections.sort(list2, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});
System.out.println(list2);
//[Student{name='俄哈弗', age=15}, Student{name='杨幂', age=19}, Student{name='迪丽热巴', age=20}, Student{name='王雷', age=21}]
}
}
上一篇: 【漫画】JAVA并发编程之并发模拟工具
下一篇: 仅用css和html制作简单动画