Collections

mac2022-06-30  26

collections

Collections.addAll(list,"","",…"")

一次性添加所有元素

ArrayList<String> list=new ArrayList<>(); /*list.add("aaa"); list.add("bbb"); list.add("ccc"); System.out.println(list);*/ //addAll(Collection<? super T> c, T... elements) //将所有指定的元素添加到指定的集合。 Collections.addAll(list,"aaa","bbb","ccc");

Collections.shuffle(list)//乱序

Collections.shuffle(list);

完整代码:

public class Demo01Collections { public static void main(String[] args) { ArrayList<String> list=new ArrayList<>(); /*list.add("aaa"); list.add("bbb"); list.add("ccc"); System.out.println(list);*/ //addAll(Collection<? super T> c, T... elements) //将所有指定的元素添加到指定的集合。 Collections.addAll(list,"aaa","bbb","ccc"); list.add("dd"); System.out.println(list); //shuffle(List<?> list) //使用默认的随机源随机排列指定的列表。 Collections.shuffle(list); System.out.println(list); } }

效果

[aaa, bbb, ccc, dd] [ccc, bbb, aaa, dd]

sort

定义一个Person对象类(已重写tostring方法和compateto方法)

public class Person implements Comparable<Person>{ private String name; private int age; public Person() { } public Person(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 "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } //重写此方法! //this.age=o.age 升序!反过来升序! @Override public int compareTo(Person o) { return this.age-o.age; } }

比较一(用sort重新排列传过去的对象)

public class Demo02Sort { public static void main(String[] args) { ArrayList<String> list=new ArrayList<>(); list.add("ABC"); list.add("def"); list.add("ccc"); System.out.println(list); Collections.sort(list); System.out.println(list); ArrayList<Integer> list1=new ArrayList<>(); list1.add(1); list1.add(3); list1.add(2); list1.add(1); System.out.println(list1); Collections.sort(list1);//默认升序! System.out.println(list1); ArrayList<Person> list2=new ArrayList<>(); list2.add(new Person("张三",16)); list2.add(new Person("李四",22)); list2.add(new Person("王五",13)); System.out.println(list2); Collections.sort(list2);//具体用到了Person类中的compare to方法需要重写 System.out.println(list2); } }

效果

[ABC, def, ccc] [ABC, ccc, def] [1, 3, 2, 1] [1, 1, 2, 3] [Person{name=‘张三’, age=16}, Person{name=‘李四’, age=22}, Person{name=‘王五’, age=13}] [Person{name=‘王五’, age=13}, Person{name=‘张三’, age=16}, Person{name=‘李四’, age=22}]

比较二(利用匿名内部类方法,或者compatator方法)

代码;

public class Demo03Sort { public static void main(String[] args) { ArrayList<Integer> list1=new ArrayList<>(); list1.add(1); list1.add(3); list1.add(2); list1.add(1); System.out.println(list1); Collections.sort(list1,new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // return o1-o2;//升序 return o2-o1;//降序 } }); System.out.println(list1); ArrayList<Person> list2=new ArrayList<>(); list2.add(new Person("张三",16)); list2.add(new Person("李四",22)); list2.add(new Person("王五",13)); System.out.println(list2); Collections.sort(list2, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o1.getAge()-o2.getAge(); } }); System.out.println(list2); ArrayList<Person> list3=new ArrayList<>(); list3.add(new Person("张三",16)); list3.add(new Person("李四",22)); list3.add(new Person("a王五",13)); list3.add(new Person("b张三",13)); System.out.println(list3); Collections.sort(list3, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { int res=o1.getAge()-o2.getAge(); if(res==0) { res=o1.getName().charAt(0)-o2.getName().charAt(0); } return res; } }); System.out.println(list3); } }

效果

[1, 3, 2, 1] [3, 2, 1, 1] [Person{name=‘张三’, age=16}, Person{name=‘李四’, age=22}, Person{name=‘王五’, age=13}] [Person{name=‘王五’, age=13}, Person{name=‘张三’, age=16}, Person{name=‘李四’, age=22}] [Person{name=‘张三’, age=16}, Person{name=‘李四’, age=22}, Person{name=‘a王五’, age=13}, Person{name=‘b张三’, age=13}] [Person{name=‘a王五’, age=13}, Person{name=‘b张三’, age=13}, Person{name=‘张三’, age=16}, Person{name=‘李四’, age=22}]

区别:

/*Comparator与comparable比较

comparable需要调用自己(this)和别人(参数)比较,自己需要实现comparable接口,重写比较的规则CompareTo方法comparator相当于找一个第三方裁判,比较两个*/
最新回复(0)