操作数组我们使用Arrays这个工具类,
操作集合呢?
用Collections!
说说Collections和Collection的区别
Collections是针对集合进行操作的工具类,都是静态方法。
Collection是单列集合的顶层接口,子接口List和Set。
下面是Collection的常用方法:
public static void sort(List list):排序,默认情况下是自然排序
public static int binarySearch(Collection c, T key):二分查找法
public static max(Collection<?> coll):最大值
public static void reverse(List<?> list):反转
public static void shuffle(List<?> list):随机置换
例子:
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
list.add(70);
list.add(80);
list.add(40);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
//集合中的二分查找不需要排序 返回的当前元素所有集合中的索引值
int binarySearch = Collections.binarySearch(list, 50);
System.out.println(binarySearch);
Integer max = Collections.max(list);
System.out.println(max);
Collections.reverse(list);
System.out.println(list);
//逆序输出
Collections.sort(list);
Collections.reverse(list);
System.out.println(list);
//随机置换
Collections.shuffle(list);
System.out.println(list);
}
刚才针对的是ArrayList的集合进行操作,是否可以自定义一个类型也进行这样的操作?
先定义一个Student类,
public class Student {
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
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 "Student [name=" + name + ", age=" + age + "]";
}
接下来进行操作:
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("张学友",16));
list.add(new Student("郭富城",34));
list.add(new Student("刘德华",24));
list.add(new Student("张国荣", 18));
System.out.println(list);
Collections.sort(list);//对集合进行默认排序
System.out.println(list);
Collections.sort(list, new Comparator<Student>() { //使用内部类实现接口,再让自定义对象进行我们所有规定的排序去完成
@Override
public int compare(Student o1, Student o2) {
return o2.getAge()-o1.getAge();
}
});
System.out.println(list);
}