可变参数
可变参数用在形参中可以接收多个数据。
可变参数的格式:
数据类型...参数名称
public static void sum(int...nums){
}
可变参数的作用
:
package com.app.d4_params;
import java.util.Arrays;
/**
目标:理解可变参数的作用,并学会使用可变参数解决实际需求。
需求:
假如需要定义一个方法求和,该方法可以灵活的完成如下需求:
计算1个数据的和;
计算2个数据的和;
计算3个数据的和;
计算n个数据的和,甚至可以支持不接收参数进行调用。
*/
public class ParamsDemo1 {
public static void main(String[] args) {
sum(); // 1、可以不传输参数
sum(10); // 2、可以传输一个参数
sum(15, 5, 20); // 3、可以传输多个参数
sum(new int[]{10, 5, 15, 30}); // 4、可以传输一个数组
}
public static void sum(int...nums){
// 注意:可变参数在方法内部其实就是一个数组。nums
System.out.println("元素个数:" + nums.length);
System.out.println("元素内容:" + Arrays.toString(nums));
}
}
元素个数:0
元素内容:[]
元素个数:1
元素内容:[10]
元素个数:3
元素内容:[15, 5, 20]
元素个数:4
元素内容:[10, 5, 15, 30]
Process finished with exit code 0
可变参数必须放在形参列表的最后面。
方法 | 说明 |
---|---|
public static < T > boolean addAll(Collection< ? super T> c, T… elements) | 给集合对象批量添加元素 |
public static void shuffle(List> list) | 打乱List集合元素的顺序(通俗点讲:洗牌) |
使用范围:只能对于List集合的排序。
排序方式一:
方法 | 说明 |
---|---|
public static < T > void sort(List< T > list) | 将集合中元素按照默认规则排序 |
排序方式二:
方法 | 说明 |
---|---|
public static < T > void sort(List< T > list, Comparator super T> c) | 将集合中元素按照指定规则排序 |
package com.app.d5_Collections;
/**
自定义类:猫类。
让自定义的类实现Comparable接口重写里面的compareTo方法,来自定义比较规则。
*/
public class Cat implements Comparable<Cat>{
/**
* 重写Comparable接口的compareTo方法,来自定义比较规则。
* @param o 接收一个猫对象
* @return
*/
@Override
public int compareTo(Cat o) {
/*
关于返回值的规则:
- 如果认为第一个元素大于第二个元素,返回正整数即可。
- 如果认为第一个元素小于第二个元素,返回负整数即可。
- 如果认为第一个元素等于第二个元素,返回0即可。
*/
// 自定义比较规则:按照猫的重量来排序
// 升序
return this.weight - o.weight; // List集合存储相同大小的元素,会保留!因为List集合是可重复的
}
/**
猫的属性:昵称、毛色、价格、重量
*/
private String name;
private String color;
private double price;
private int weight;
public Cat(){
}
public Cat(String name, String color, double price, int weight) {
this.name = name;
this.color = color;
this.price = price;
this.weight = weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
", price=" + price +
", weight=" + weight +
'}';
}
}
package com.app.d5_Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
目标:掌握Collections工具类的常用API
*/
public class CollectionsDemo1 {
public static void main(String[] args) {
// 1、给任意集合批量添加元素
List<String> names = new ArrayList<>();
// 之前的添加元素,只能一个一个的加
// names.add("楚留香");
// names.add("胡铁花");
// names.add("张无忌");
// names.add("陆小凤");
Collections.addAll(names, "楚留香", "胡铁花", "张无忌", "陆小凤");
System.out.println(names);
System.out.println("----------------------------------");
// 2、打乱List集合顺序(每次执行都会打乱)。
// 注意不是打乱Set集合的顺序,因为Set集合本身就是无序的
Collections.shuffle(names);
System.out.println(names);
System.out.println("----------------------------------");
// 3、将List集合中的元素按照默认规则排序。
List<Integer> numbers = new ArrayList<>();
Collections.addAll(numbers, 33, 12, 3, 2);
System.out.println("排序前:" + numbers);
Collections.sort(numbers);
System.out.println("排序后:" + numbers);
System.out.println("----------------------------------");
// 4、将List集合中的元素按照指定规则排序
List<Cat> cats = new ArrayList<>();
Collections.addAll(cats,
new Cat("胖球", "花白色", 899.9, 40),
new Cat("咪咪", "白色", 666.5, 40),
new Cat("小黑", "黑色", 899.8, 25),
new Cat("虾皮", "黄色", 566.9, 33)
);
System.out.println("排序前:");
for (Cat cat : cats) {
System.out.println(cat);
}
System.out.println();
// Collections.sort(cats); // 可以的,因为Cat类已经重写了比较规则
// 指定规则排序方式二:直接在Collections的sort方法设置Comparable接口对应的比较器对象(推荐)
/*Collections.sort(cats, new Comparator() {
@Override
public int compare(Cat o1, Cat o2) {
// 自定义比较规则:按照猫的重量降序排序
return o2.getWeight() - o1.getWeight(); // List集合存储相同大小的元素,会保留!因为List集合是可重复的
}
});*/
// 简化:Lambda表达式——>按照猫的重量降序排序
Collections.sort( cats, (o1, o2) -> Double.compare(o2.getPrice(), o1.getPrice()) );
System.out.println("排序后:");
for (Cat cat : cats) {
System.out.println(cat);
}
}
}
[楚留香, 胡铁花, 张无忌, 陆小凤]
----------------------------------
[楚留香, 陆小凤, 张无忌, 胡铁花]
----------------------------------
排序前:[33, 12, 3, 2]
排序后:[2, 3, 12, 33]
----------------------------------
排序前:
Cat{name='胖球', color='花白色', price=899.9, weight=40}
Cat{name='咪咪', color='白色', price=666.5, weight=40}
Cat{name='小黑', color='黑色', price=899.8, weight=25}
Cat{name='虾皮', color='黄色', price=566.9, weight=33}
排序后:
Cat{name='胖球', color='花白色', price=899.9, weight=40}
Cat{name='小黑', color='黑色', price=899.8, weight=25}
Cat{name='咪咪', color='白色', price=666.5, weight=40}
Cat{name='虾皮', color='黄色', price=566.9, weight=33}
Process finished with exit code 0