1、可变参数
假设定义一个方法求和,该方法可以灵活的完成如下需求:
- 计算1个数据的和
- 计算2个数据的和
- 计算3个数据的和
- 计算n个数据的和,甚至可以支持不接收参数进行调用。
1.1、可变参数
- 可变参数用在形参中可以接收多个数据。
- 可变参数的格式:数据类型...参数名称。
- 注意:可变参数在方法内部其实就是一个数组。
1.2、可变参数的作用
- 传输参数非常灵活,方便。可以不传输参数,可以传输1个或者多个,也可以传输一个数组
- 可变参数在方法内部本质上就是一个数组。
1.3、可变参数的注意事项:
- 一个形参列表中可变参数只能有一个
- 可变参数必须放在形参列表的最后面
package collection;import java.util.Arrays;public class MethodDemo {public static void main(String[] args) {sum();sum(10);sum(10, 20, 30);sum(new int[]{10, 20, 30, 40, 50});}public static void sum(int... nums) {System.out.println("元素个数:" + nums.length);System.out.println("元素内容:" + Arrays.toString(nums));}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=20034:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\jdk8 collection.MethodDemo
元素个数:0
元素内容:[]
元素个数:1
元素内容:[10]
元素个数:3
元素内容:[10, 20, 30]
元素个数:5
元素内容:[10, 20, 30, 40, 50]Process finished with exit code 0
2、Collections集合工具类
- java.util.Collections:
- 作用:Collections并不属于集合,是用来操作集合的工具类。
- Collections是一个操作Set、List、Map等集合的工具类
- Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法。
- Collections类中提供了多个synchronizedXxx()方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。
2.1、Collections常用的API
方法名称 | 说明 |
---|
- public static <T> boolean addAll(Collection<? super T> c,T...elements)
| |
- public static void shuffle ( List<?> list )
| - 打乱List集合元素的顺序
- 最常见的场景是洗扑克牌模拟洗牌的动作
- 斗地主洗牌
|
2.2、Collections排序相关API
排序方式1:
方法名称 | 说明 |
---|
- public static <T> void sort(List<T> list)
| - 将集合中元素按照默认规则排序
- 如果存储的类型是自定义类型,被排序的集合里边存储的元素,(自定义类型)必须实现Comparable接口,重写接口中的方法compareTo定义排序的规则
|
- 注意:本方式不可以直接对自定义类型的List集合排序,除非自定义类型实现了比较规则Comparable接口。
排序方式2:
方法名称 | 说明 |
---|
- public static <T> void sort( List<T> list, Comparator<? super T> c)
| - 将集合中元素按照指定规则排序
- 重写compare方法
|
- public static void reverse(List<?> list)
| |
- public static void swap(List<?> list,int i,int j)
| - 将指定list集合中的 i 处元素和 j 处元素进行交换
|
2.3、Comparator和Comparable的区别
- Comparable:自己(this)和别人(参数)比较,自己需要实现comparable接口,重写比较的规则CompareTo方法
- Comparator:相当于找一个第三方的裁判,比较两个