Java可变参数和集合工具类Collections的详细介绍
文章目录
- 可变参数
- 集合工具类
可变参数
可变参数:
可变参数用在形参中可以接收多个不确定的数据。
可变参数的格式:
数据类型...参数名称
可变参数作用:
传输参数非常灵活,方便。可以不传输参数,可以传输1个或者多个,也可以传输一个数组
可变参数在方法内部本质上就是一个数组, 因此可以使用数组的方法
public static void main(String[] args) {
add(); // 可以不传参数
add(10); // 可以传一个参数
add(10, 20, 30); // 可以传任意数量的参数
add(new int[]{90, 60, 40}); // 可以传入一个数组
}
public static void add(int ...nums) {
// 可以使用数组的方法
System.out.println("元素的个数: " + nums.length);
System.out.println("元素的内容: " + Arrays.toString(nums));
}
可变参数的注意事项:
一个形参列表中可变参数只能有一个
// 错误演示 public static void add(int ...nums, int ...nums2) { }
如果还有其他参数, 可变参数必须放在形参列表的最后面
public static void main(String[] args) { add(10, 20, 30); } // 可变参数要放在最后面 public static void add(int a, int b, int ...nums) { System.out.println(a); // 10 System.out.println(b); // 20 System.out.println("元素的个数: " + nums.length); // 1 System.out.println("元素的内容: " + Arrays.toString(nums)); // [30] }
假如需要定义一个方法求和,该方法可以灵活的完成如下需求:
计算1个数据的和。
计算2个数据的和。
计算3个数据的和。
计算1个数组的和。
甚至可以支持不接收参数进行调用。
public class ParamsDemo2 {
public static void main(String[] args) {
// 不接受参数
add(); // 0
// 计算1个数据的和
add(10); // 10
// 计算2个数据的和
add(10, 20); // 30
// 计算3个数据的和
add(10, 20, 30); // 60
// 计算1个数组的和
add(new int[] {10, 20, 30, 40}); // 100
}
// 计算和的方法
public static void add(int ...nums) {
int sum = 0;
for (int i : nums) {
sum += i;
}
System.out.println(sum);
}
}
集合工具类
Collections集合工具类:
java.utils.Collections: 是集合工具类, Collections中的方法全部都是静态方法, 无需创建对象直接使用即可
作用:Collections并不属于集合,是用来操作集合的工具类(操作集合的辅助工具)。
Collections常用的基础API:
方法名称 | 说明 |
---|---|
addAll(Collection<? super T> c, T… elements) | 给集合对象批量添加元素 |
shuffle(List<?> list) | 打乱List集合元素的顺序 |
addAll方法批量添加元素
public static void main(String[] args) {
List<String> names = new ArrayList<>();
// 批量添加数据
Collections.addAll(names, "chenyq", "kaisa", "why");
System.out.println(names); // [chenyq, kaisa, why]
}
shuffle方法, 只能打乱List集合的数据, Set集合的顺序无法打乱; 每次执行该方法都会随机打乱数组
public static void main(String[] args) {
List<String> names = new ArrayList<>();
// 批量添加数据
Collections.addAll(names, "chenyq", "kaisa", "why");
System.out.println(names); // [chenyq, kaisa, why]
// 打乱List集合的数据
Collections.shuffle(names);
System.out.println(names); // [kaisa, why, chenyq]
}
Collections排序相关API:
使用范围:只能对于List集合的排序, Set集合有自己的排序规则。
方法名称 | 说明 |
---|---|
sort(List<T> list) | 将集合中元素按照默认规则排序 |
sort(List<T> list,Comparator<? super T> c) | 将集合中元素按照指定规则排序 |
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>();
Collections.addAll(nums, 10, 30, 40, 20, 90, 70);
System.out.println(nums); // [10, 30, 40, 20, 90, 70]
// 按照默认规则排序
Collections.sort(nums);
System.out.println(nums); // [10, 20, 30, 40, 70, 90]
}
sort方法也可以自己指定规则排序
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>();
Collections.addAll(nums, 10, 30, 40, 20, 90, 70);
// 自定义比较规则排序, 例如倒序
Collections.sort(nums, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
System.out.println(nums); // [90, 70, 40, 30, 20, 10]
}