Collections集合工具类和可变参数
Collections常用的API:
public static <T> boolean addAll(Collection<? super T> c, T... elements) 给集合对象批量添加元素
public static void shuffle(List<?> list) 打乱集合顺序(只能打乱List集合)
public static <T> void sort(List<T> list ) 将集合中元素按照默认规则排序(给List集合升序排序)
public static <T> void sort(List<T> list, Comparator<? super T> ) 将集合中元素按照
import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; public class CollectionsDemo1 { public static void main(String[] args) { //给集合批量添加元素 Collection<String> name=new ArrayList<>(); Collections.addAll(name,"喜羊羊","懒洋洋","美羊羊"); System.out.println(name); // [喜羊羊, 懒洋洋, 美羊羊] //打乱集合顺序(有序集合) List<String> name1=new ArrayList<>(); Collections.addAll(name1,"灰太狼1","红太狼2","小灰灰3"); Collections.shuffle(name1); //每次打乱都不一样 System.out.println(name1); // [红太狼2, 灰太狼1, 小灰灰3] //升序排序(List),根据首字符ACAII码值 List<String> name2=new ArrayList<>(); Collections.addAll(name2,"apple","pear","orange","banana","78","A"); Collections.sort(name2); System.out.println(name2); } }
------------------------------------------------------------------------------------------------------------------------------------------------
注意:如果类有比较规则,而这里有比较器,优先使用比较器
package com.day04.practice2; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class CollectionDemo2 { public static void main(String[] args) { List<Human> l=new ArrayList<>(); Collections.addAll(l,new Human("张三",66),new Human("李四",28), new Human("毛六",27)); Collections.sort(l); System.out.println(l); //第二种为集合设置比较器Compartor对象,重写比较方法 List<Human> ll=new ArrayList<>(); Collections.addAll(ll,new Human("张三",66),new Human("李四",28), new Human("毛六",27)); Collections.sort(ll, new Comparator<Human>() { @Override public int compare(Human h1,Human h2){ return h2.getAge()-h1.getAge(); } }); System.out.println(ll); } } class Human implements Comparable<Human>{ //第一种为对象的类实现比较器接口Comparable,重写比较方法 private String name; private int age; @Override public int compareTo(Human h){ if(this.age>h.age)return 1; if(this.age<h.age)return -1; return 0; } Human(){ } Human(String name,int age){ this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Human{" + "name='" + name + '\'' + ", age=" + age + '}'; } } //输出结果 //[Human{name='毛六', age=27}, Human{name='李四', age=28}, Human{name='张三', age=66}] //[Human{name='张三', age=66}, Human{name='李四', age=28}, Human{name='毛六', age=27}]
可变参数在方法内部本质是就是一个数组
可变参数的格式:数据类型...参数名称
注意:1.一个 形参列表可变参数只能有一个!!
2.可变参数必须放在形参列表的最后面!!
public class KeBian { public static void main(String[] args) { sum(15); sum(125,78,45); sum(new int[]{78,45,12,78}); System.out.println("-------------------"); sum1("yyyy"); sum1("hhhh",89,45); sum1("21564",new int[]{787,6,8,7}); } public static void sum(int...nums){ System.out.println("长度:"+nums.length); System.out.println("内容:"+Arrays.toString(nums)); } public static void sum1(String str,int...nums){ System.out.println("长度:"+nums.length); System.out.println("内容:"+Arrays.toString(nums)); } }
输出结果:长度:1
内容:[15]
长度:3
内容:[125, 78, 45]
长度:4
内容:[78, 45, 12, 78]
-------------------
长度:0
内容:[]
长度:2
内容:[89, 45]
长度:4
内容:[787, 6, 8, 7]