Java辅助工具类 java.util.Collections使用
工具类,顾名思义,就是辅助工具,类 java.util.Collections 提供了对Set、List、Map操作的工具方法。
部分方法如下:
void sort(List) //对List容器内的元素排序,排序的规则是按照升序进行排序。
void shuffle(List) //对List容器内的元素进行随机排列
void reverse(List) //对List容器内的元素进行逆续排列
void fill(List, Object) //用一个特定的对象重写整个List容器
int binarySearch(List, Object)//对于顺序的List容器,采用折半查找的方法查找特定对象
使用方法,代码如下:
List aList = new ArrayList();
for (int i = 0; i < 5; i++){
aList.add("a" + i);
}
System.out.println(aList);
Collections.shuffle(aList); // 随机排列
System.out.println(aList);
Collections.reverse(aList); // 逆续
System.out.println(aList);
Collections.sort(aList); // 排序
System.out.println(aList);
System.out.println(Collections.binarySearch(aList, "a2"));
Collections.fill(aList, "hello");
System.out.println(aList);
Comparable接口
问题来了,来了,上面的算法根据什么确定集合中对象的“大小”顺序?
其实所有可以“排序”的类都实现了 java.lang.Comparable 接口, Comparable 接口中只有一个方法
public int compareTo(Object obj)
返回0表示 this==obj
返回正数表示 this>obj
返回负数表示 this<obj
下面就由小编来带大家如何使用Comparable接口来重写属于自己定义类对象的排序方法。下面结果排序以年龄从小到大排序
List<Student> list=new ArrayList<Student>();
Student student1=new Student(15, "张三", 70.5);
Student student2=new Student(19, "李四", 45.4);
Student student3=new Student(16, "王五", 60.7);
list.add(student1);
list.add(student2);
list.add(student3);
Collections.sort(list);
for (Student temp:list) {
System.out.println(temp.toString());
}
Student 类
public class Student implements Comparable<Student>{
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public Student(int age, String name, double weight) {
super();
this.age = age;
this.name = name;
this.weight = weight;
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + ", weight=" + weight
+ "]";
}
int age;
String name;
double weight;
@Override
public int compareTo(Student o) {
//0= -1 小 1大
if (this.age==o.age) {
return (this.weight==o.weight)?0:(this.weight>o.weight?1:-1);
}else {
return this.age>o.age?1:-1;
}
}
}
关键点事重写Comparable接口提供的对比方法,只要观察基本类型的比较方法就能简单实现。
Comparator 接口
Comparator比较器,可以根据需要定制特定的比较规则,上面的比较只能实现一种比较规则,如果需要多种比较规则,通过实现Comparator接口,则可以轻松解决。废话不多说,直接上代码:
class A implements Comparator<Student>
{
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.getAge()-o2.getAge();
}
}
这个类实现了Comparator接口提供的compare方法。
Comparator<Student>comparator =new A();
Collections.sort(list, comparator);
for (Student temp:list) {
System.out.println(temp.toString());
}
或者又可以添加另外的规则,上代码:
Collections.sort(list,new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return (int) ((int)o1.getWeight()-o2.getWeight());
}
});
通过匿名方法简单实现了以体重从小到大排序。
所有代码都已经上传,想要学习请自行下载(免费开源0积分)。
总结:工具类可以帮助我们快速的对容器进行各种操作。盛年不重来,一日难再晨。及时宜自勉,岁月不待人
本文地址:https://blog.csdn.net/qq_42121367/article/details/107899330