Collections集合
Collections:是针对集合进行操作的工具类,都是静态方法。
代码人,代码走起。
package CollectionsDemo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
* Collections:是针对集合进行操作的工具类,都是静态方法。
*
* Collection和Collections的区别?
* Collection:是单列集合的顶层接口,有子接口List和Set
* Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法。
*
* 要知道的方法:
* public static <T> void sort(List<T> list):排序。默认情况下是自然顺序。
* public static <T> int birarySearch(List<T> list,T key):二分查找
* public static <T> T max(Collection<?> coll):最大值
* public static void reverse(List<?> list) :反转
* public static void shuffle(List<?> list):随机置换
*
* */
public class Initialization {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(30);
list.add(20);
list.add(10);
list.add(50);
list.add(40);
System.out.println("list:" + list);
// public static <T> void sort(List<T> list):排序。默认情况下是自然顺序。
// Collections.sort(list);
//
// System.out.println("list:"+list);
// public static <T> int binarySearch(List<T> list,T key):二分查找
// System.out.println(Collections.binarySearch(list,30));
// System.out.println(Collections.binarySearch(list, 60));//6
// public static <T> T max(Collection<?> coll):最大值
// System.out.println(Collections.max(list));
// public static void reverse(List<?> list) :反转
// Collections.reverse(list);
// System.out.println(list);
// public static void shuffle(List<?> list):随机置换
Collections.shuffle(list);
System.out.println(list);
}
}
对集合进行自定义排序
package com.wenhua.project.Day1121;
import java.util.Objects;
/**
* 自定义学生类,实现在hashSet和treeSet的存储
*/
public class Student implements Comparable<Student> {
// 学生类中的属性
private String name;
private Integer age;
// 带参构造方法,必须赋值
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
// 存储在HashSet中的类型,通过hashCode先判断,如果hash相等,则通过equals方法进行比较
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return name.equals(student.name) &&
age.equals(student.age);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
// toString方法可以理解为一种视图,让人们更直观
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", grade=" + age +
'}';
}
// 存储在treeSet中时,就必须实现Comparable接口,重写compareTo方法
@Override
public int compareTo(Student o) {
// return this.name.compareTo(o.name); 比较字符串的大小
return this.age - o.age;// 当判断集合中已经有了,那么不会覆盖只会丢弃,保留原来的值
}
}
按多个关键字依次排序
注意先按年龄排序,在按姓名排序,都相等时才显示一个,否则全显示。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionDemo {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
// 创建对象
Student student = new Student("Java",22);
Student student1 = new Student("JDK",21);
Student student2 = new Student("JRE",22);
Student student3 = new Student("JVM",20);
Student student4 = new Student("HTML",23);
// Ctrl + D 直接赋值一行
list.add(student);
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
// 自定义排序,不会覆盖
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// 先按照年龄排序,如果年龄相同,那么比较姓名,这样就不会覆盖掉相同的对象
int num = o1.getAge() - o2.getAge();
int result = num == 0 ? o1.getName().compareTo(o2.getName()):num;
return result;
}
});
System.out.println(list);
}
}