Java-集合(一)比较器

集合比较器

使一个类具备比较的能力需要器实现使其具有比较能力的接口即:

  1. Comparable 使继承该接口的类具有比较能力
  2. Comparator 单独定义一个比较器继承该接口,通常匿名内部类形式的比较器
    并且重写接口的方法

Comparable接口

package testCompartor;

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
//建立一个集合  Stu类型的  有属性id,name, age
//将集合中的元素按照age进行排序
public class TestComparable{
	public static void main(String[] args) {
	
		List<Stu> list = new ArrayList<Stu> ();
		list.add(new Stu(1,"zs",29));
		list.add(new Stu(2,"ww",30));
		list.add(new Stu(3,"ls",31));
		Collections.sort(list);
		System.out.println(list);
	}
	
}
class Stu implements Comparable<Stu>{
	private int id;
	private String name;
	private int age;
	public Stu() {
		super();
	}
	public Stu(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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 "Stu [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	//重写接口的方法
	@Override
	public int compareTo(Stu o) {
		//拿新的对象与几何中的已有对象分别比较
		return this.age-o.age;//按年龄升序
		//进来一个新的元素 放到集合中,分别从左到右比较集合中所有元素,当返回值>=0时,新的元素位置不变,当返回值<0时,位置交换,然后依次比较所有元素
	}
	
}

Comparator

package testCompartor;

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
//建立一个集合  Stu类型的  有属性id,name, age
//将集合中的元素按照age进行排序
public class TestComparator {
	public static void main(String[] args) {
	
		List<Stu> list = new ArrayList<Stu> ();
		list.add(new Stu(1,"zs",29));
		list.add(new Stu(2,"ww",30));
		list.add(new Stu(3,"ls",31));
		//传入自定义的比较器
		Collections.sort(list,new MyComparator());
		//通常会使用匿名内部类
		//Collections.sort(list,new Comparator() {

			//@Override
			//public int compare(Stu o1, Stu o2) {
				//return o1.getAge()-o2.getAge();
			//}
		//});
		System.out.println(list);
	}
	
}
class Stu{
	private int id;
	private String name;
	private int age;
	public Stu() {
		super();
	}
	public Stu(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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 "Stu [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}
//自定义比较器类
class MyComparator implements Comparator<Stu>{

	@Override
	public int compare(Stu o1, Stu o2) {
		return o1.getAge()-o2.getAge();//按年龄升序,返回的是位置关系
		//如果比较的参数不是整数,例如double类型的,name需要判断比较结果
		//double tmp = o1.getAge()-o2.getAge();
		//if(tmp>0){
		//return1;
		//}else if(tmp=0){
		//return 0;
		//}else{
		//return -1;
		//}
	}
	
}

你可能感兴趣的:(Java整理)