Java基础——可变参数,集合操作工具类Collections
(1)可变参数:
1.特点:
- 可变参数用在形参中可接收多个数据;
- 可变参数的格式:数据类型...参数名称;
2.作用:
- 传输参数灵活,方便。可不传参数,可传1个或多个,可传数组;
- 可变参数在方法内部本质上就是一个数组;
3.注意事项:
- 一个形参列表中可变参数只能有一个;
- 可变参数必须放在形参列表的最后;
import java.util.Arrays;/* 可变参数*/
public class MethodDemo {public static void main(String[] args) {sum();//不传参数sum(10);//1个参数sum(11,22,33);//多个参数sum(new int[]{11,22,33});//传数组sum1(10);//1个参数sum1(111,22,33);//多个参数}/* 一个形参列表中可变参数只能有一个;* @param num 可变参数*/public static void sum(int...num){//可变参数在方法内部本质上就是一个数组;System.out.println("元素个数:" + num.length);System.out.println("元素的内容" + Arrays.toString(num));}/*可变参数必须放在形参列表的最后;* @param age 形参列表* @param num 可变参数*/public static void sum1(int age,int...num){//可变参数在方法内部本质上就是一个数组;System.out.println("元素个数:" + num.length);System.out.println("元素的内容" + Arrays.toString(num));}
}
(2)集合操作工具类Collections:
- java.utils.Collections:是集合工具类;
- 作用:Collections并不属于集合,是用来操作集合的工具类。
1.Collections排序相关的API:
- 使用范围:只能对于List集合的排序
方法名称 |
说明 |
public static <T> void sort(List< T> List, Comparator<? super T> c) | 将集合按照指定规则排序 |
public static <T> void sort(List<T> list) | 将集合中的元素按照默认规则排序,注意:本排序方式不可以直接对自定义类型的List集合排序,除非自定义类型实现了比较规则Comparable接口 |
2.Collections常见的API:
方法名称 | 说明 |
public static <T> boolean addAll(Collection<? super T> c, T...elements) | 给集合对象批量添加元素 |
public static void shuffle(List<?> List) | 打乱集合顺序 |
3.API使用代码如下:
import java.util.*;/* 目标:Collections工具类使用,常见API* 1.给集合对象批量添加元素* -public static <T> boolean addAll(Collection<? super T> c, T...elements)* 2.打乱集合顺序* public static void shuffle(List<?> List)* 3.将集合元素按照默认规则排序* public static <T> void sort(List<T> list)* 4.将集合元素按照制定规则排序* public static <T> void sort(List<T> list.Comparator<? super T>)*/
public class CollectionsDemo01 {public static void main(String[] args) {List<String> names = new ArrayList<>();//1.给集合对象批量添加元素
// names.add("大大");
// names.add("小小");
// names.add("青青");Collections.addAll(names,"大大","小小","青青");System.out.println(names);//[大大, 小小, 青青]//2.打乱集合顺序Collections.shuffle(names);System.out.println(names);//[青青, 小小, 大大]//3.将集合元素按照默认规则排序(排值特性的元素)List<Integer> list = new ArrayList<>();Collections.addAll(list,11,35,22,10);System.out.println(list);//[11, 35, 22, 10]Collections.sort(list);System.out.println(list);//[10, 11, 22, 35]//4.将集合元素按照制定规则排序List<Apple> apples1 = new ArrayList<>();apples1.add(new Apple("苹果1","红色",9.9,500));apples1.add(new Apple("苹果2","绿色",19.9,500));apples1.add(new Apple("苹果3","青色",29.9,300));apples1.add(new Apple("苹果4","黄色",39.9,200));//4.方式一:public static <T> void sort(List<T> list)Collections.sort(apples1);//Apple类已经重写了比较规则System.out.println(apples1);//4.方式2:sort方法自带比较器对象// public static <T> void sort(List< T> List, Comparator<? super T> c)
//
// Collections.sort(apples1, new Comparator<Apple>() {
// @Override
// public int compare(Apple o1, Apple o2) {
// return Double.compare(o1.getPrice(), o2.getPrice());
// }
// });//代码简化Collections.sort(apples1, ( o1, o2) -> Double.compare(o1.getPrice(), o2.getPrice()));System.out.println(apples1);}
}class Apple implements Comparable<Apple>{private String name;private String color;private Double price;private int weight;public Apple() {}public Apple(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;}@Overridepublic String toString() {return "Apple{" +"name='" + name + '\\'' +", color='" + color + '\\'' +", price=" + price +", weight=" + weight +'}';}/* 自定义制定规则:方式一* o1.compareTo(o2)* @param o* @return如果认为第一个元素大于第二个元素返回正整数即可。* 如果认为第一个元素小于第二个元素返回负整数即可。* 如果认为第一个元素等于第二个元素返回0即可,此时TreeSet集合只会保留一个元素,认为两者重复。*/@Overridepublic int compareTo(Apple o) {return this.weight - o.weight;//List集合重复会保留//List集合允许元素重复不需要以下步骤
// //如:按照重量进行比较
// //return this.weight - o.weight;//会去掉重量重复的元素
// return this.weight - o.weight >= 0 ? 1 : -1;//可以保留重量重复的元素}
}