Java的可变参数与Collections类的功能示例解析
作者:玛拉_以琳
1. 可变参数
在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化.
格式:
修饰符 返回值类型 方法名(参数类型... 形参名){ }
底层:
其实就是一个数组
好处:
在传递数据的时候,省的我们自己创建数组并添加元素了,JDK底层帮我们自动创建数组并添加元素了
代码演示:
public class ChangeArgs { public static void main(String[] args) { int sum = getSum(6, 7, 2, 12, 2121); System.out.println(sum); } public static int getSum(int... arr) { int sum = 0; for (int a : arr) { sum += a; } return sum; } }
注意:
1.一个方法只能有一个可变参数
2.如果方法中有多个参数,可变参数要放到最后。
应用场景: Collections
在Collections中也提供了添加一些元素方法:
public static <T> boolean addAll(Collection<T> c, T... elements)
:往集合中添加一些元素。
代码演示:
public class CollectionsDemo { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); //原来写法 //list.add(12); //list.add(14); //list.add(15); //list.add(1000); //采用工具类 完成 往集合中添加元素 Collections.addAll(list, 5, 222, 1,2); System.out.println(list); }
2. Collections类
2.1 Collections常用功能
java.utils.Collections
是集合工具类,用来对集合进行操作。常用方法如下:
public static void shuffle(List<?> list)
:打乱集合顺序。public static <T> void sort(List<T> list)
:将集合中元素按照默认规则排序。public static <T> void sort(List<T> list,Comparator<? super T> )
:将集合中元素按照指定规则排序。
代码演示:
public class CollectionsDemo { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(100); list.add(300); list.add(200); list.add(50); //排序方法 Collections.sort(list); System.out.println(list); } } 结果: [50,100, 200, 300]
我们的集合按照默认的自然顺序进行了排列,如果想要指定顺序那该怎么办呢?
2.2 Comparator比较器
创建一个学生类,存储到ArrayList集合中完成指定排序操作。
Student 类
public class Student{ private String name; private int age; //构造方法 //get/set //toString }
测试类:
public class Demo { public static void main(String[] args) { // 创建四个学生对象 存储到集合中 ArrayList<Student> list = new ArrayList<Student>(); list.add(new Student("rose",18)); list.add(new Student("jack",16)); list.add(new Student("abc",20)); Collections.sort(list, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getAge()-o2.getAge();//以学生的年龄升序 } }); for (Student student : list) { System.out.println(student); } } } Student{name='jack', age=16} Student{name='rose', age=18} Student{name='abc', age=20}
3. 综合练习
练习1:随机点名器
需求:班级里有N个学生,实现随机点名器
代码实现:
public class Test1 { public static void main(String[] args) { /* 班级里有N个学生,学生属性:姓名,年龄,性别。 实现随机点名器。*/ //1.定义集合 ArrayList<String> list = new ArrayList<>(); //2.添加数据 Collections.addAll(list,"范闲","范建","范统","杜子腾","杜琦燕","宋合泛","侯笼藤","朱益群","朱穆朗玛峰","袁明媛"); //3.随机点名 /* Random r = new Random(); int index = r.nextInt(list.size()); String name = list.get(index); System.out.println(name);*/ //打乱 Collections.shuffle(list); String name = list.get(0); System.out.println(name); } }
练习2:带概率的随机
需求:
班级里有N个学生
要求在随机的时候,70%的概率随机到男生,30%的概率随机到女生
代码实现:
public class Test2 { public static void main(String[] args) { /* 班级里有N个学生 要求: 70%的概率随机到男生 30%的概率随机到女生 "范闲","范建","范统","杜子腾","宋合泛","侯笼藤","朱益群","朱穆朗玛峰", "杜琦燕","袁明媛","李猜","田蜜蜜", */ //1.创建集合 ArrayList<Integer> list = new ArrayList<>(); //2.添加数据 Collections.addAll(list,1,1,1,1,1,1,1); Collections.addAll(list,0,0,0); //3.打乱集合中的数据 Collections.shuffle(list); //4.从list集合中随机抽取0或者1 Random r = new Random(); int index = r.nextInt(list.size()); int number = list.get(index); System.out.println(number); //5.创建两个集合分别存储男生和女生的名字 ArrayList<String> boyList = new ArrayList<>(); ArrayList<String> girlList = new ArrayList<>(); Collections.addAll(boyList,"范闲","范建","范统","杜子腾","宋合泛","侯笼藤","朱益群","朱穆朗玛峰"); Collections.addAll(girlList,"杜琦燕","袁明媛","李猜","田蜜蜜"); //6.判断此时是从boyList里面抽取还是从girlList里面抽取 if(number == 1){ //boyList int boyIndex = r.nextInt(boyList.size()); String name = boyList.get(boyIndex); System.out.println(name); }else{ //girlList int girlIndex = r.nextInt(girlList.size()); String name = girlList.get(girlIndex); System.out.println(name); } } }
练习3:随机不重复
需求:
班级里有N个学生,被点到的学生不会再被点到。但是如果班级中所有的学生都点完了, 需要重新开启第二轮点名。
代码实现:
public class Test3 { public static void main(String[] args) { /* 班级里有5个学生 要求: 被点到的学生不会再被点到。 但是如果班级中所有的学生都点完了,需要重新开启第二轮点名。*/ //1.定义集合 ArrayList<String> list1 = new ArrayList<>(); //2.添加数据 Collections.addAll(list1, "范闲", "范建", "范统", "杜子腾", "杜琦燕", "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰", "袁明媛"); //创建一个临时的集合,用来存已经被点到学生的名字 ArrayList<String> list2 = new ArrayList<>(); //外循环:表示轮数 for (int i = 1; i <= 10; i++) { System.out.println("=========第" + i + "轮点名开始了======================"); //3.获取集合的长度 int count = list1.size(); //4.随机点名 Random r = new Random(); //内循环:每一轮中随机循环抽取的过程 for (int j = 0; j < count; j++) { int index = r.nextInt(list1.size()); String name = list1.remove(index); list2.add(name); System.out.println(name); } //此时表示一轮点名结束 //list1 空了 list2 10个学生的名字 list1.addAll(list2); list2.clear(); } } }
练习4:集合的嵌套
需求:
定义一个Map集合,键用表示省份名称province,值表示市city,但是市会有多个。
添加完毕后,遍历结果格式如下:
江苏省 = 南京市,扬州市,苏州市,无锡市,常州市
湖北省 = 武汉市,孝感市,十堰市,宜昌市,鄂州市
河北省 = 石家庄市,唐山市,邢台市,保定市,张家口市
代码实现:
public class Test4 { public static void main(String[] args) { /* 需求 定义一个Map集合,键用表示省份名称province,值表示市city,但是市会有多个。 添加完毕后,遍历结果格式如下: 江苏省 = 南京市,扬州市,苏州市,无锡市,常州市 湖北省 = 武汉市,孝感市,十堰市,宜昌市,鄂州市 河北省 = 石家庄市,唐山市,邢台市,保定市,张家口市*/ //1.创建Map集合 HashMap<String, ArrayList<String>> hm = new HashMap<>(); //2.创建单列集合存储市 ArrayList<String> city1 = new ArrayList<>(); city1.add("南京市"); city1.add("扬州市"); city1.add("苏州市"); city1.add("无锡市"); city1.add("常州市"); ArrayList<String> city2 = new ArrayList<>(); city2.add("武汉市"); city2.add("孝感市"); city2.add("十堰市"); city2.add("宜昌市");
以上就是Java的可变参数与Collections类的功能示例解析的详细内容,更多关于Java可变参数Collections类的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章:
- java.util.Collections类—emptyList()方法的使用
- 浅谈Java中Collections.sort对List排序的两种方法
- Java使用Collections.sort()排序的方法
- java安全之CommonsCollections4详解
- Java中的Collections类的使用示例详解
- Java中Collections.sort的使用
- Java中Collection与Collections的区别详解
- Java Collection和Collections的区别
- Java中的集合工具类Collections详解
- Java中Collections.sort()排序方法举例详解
- Java中Collection和Collections的区别