当前位置: 移动技术网 > IT编程>开发语言>Java > Java辅助工具类 java.util.Collections使用

Java辅助工具类 java.util.Collections使用

2020年08月10日  | 移动技术网IT编程  | 我要评论
工具类,顾名思义,就是辅助工具,类 java.util.Collections 提供了对Set、List、Map操作的工具方法。部分方法如下:void sort(List) //对List容器内的元素排序,排序的规则是按照升序进行排序。void shuffle(List) //对List容器内的元素进行随机排列void reverse(List) //对List容器内的元素进行逆续排列void fill(List, Object) //用一个特定的对象重写整个List容器int binar

工具类,顾名思义,就是辅助工具,类 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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网