Comparable接口和Comparator接口的常见的使用方法

1.创建对象的时候让对象具有可比较的性质,例如让Person实现Comparable接口

示例代码:让Person通过继承Comparable接口使其具有可比较属性—本例中先根据名称字符串从小到大比较,如果名字字符串相同再根据年龄从小到大比较。

class HelloWorld
{
	public static void main(String[] args)
	{
		TreeSet<Person> ts = new TreeSet<Person>();
		ts.add(new Person("Lili",11));
		ts.add(new Person("xiaoming",14));
		ts.add(new Person("zhang",13));
		ts.add(new Person("xiaohong",12));
		ts.add(new Person("xiaoming",11));
		
		Iterator<Person> it = ts.iterator();
		while(it.hasNext())
		{
			Person p = it.next();
			System.out.println(p.name +"....."+p.age);
		}
	}
}

class Person implements Comparable<Person>
{
	String name;
	int age;
	
	Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	@Override
	public int compareTo(Person p) {
		int num = name.compareTo(p.name);
		if(num==0)
		{
			return this.age - p.age;
		}
		return num;
	}
	
}

2.通过实现Comparator接口创建比较器对象,比较器对象可以给TreeSet构造方法使用,也可以在对List集合排序的时候Collections.sort()方法使用

TreeSet的构造方法:

TreeSet(Comparator<? super E> comparator) 
          构造一个新的空 TreeSet,它根据指定比较器进行排序。

对List集合排序Collecions.sort()方法:

sort(List<T> list, Comparator<? super T> c) 
          根据指定比较器产生的顺序对指定列表进行排序。

1)给TreeSet使用示例代码:

class HelloWorld
{
	public static void main(String[] args)
	{
		TreeSet<Person> ts = new TreeSet<Person>(new Mycompare());
		ts.add(new Person("Lili",11));
		ts.add(new Person("xiaoming",11));
		ts.add(new Person("xiaoming",14));
		ts.add(new Person("zhang",13));
		ts.add(new Person("xiaohong",12));
		
		Iterator<Person> it = ts.iterator();
		while(it.hasNext())
		{
			Person p = it.next();
			System.out.println(p.name+"......"+p.age);
		}
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

class Person	//实现了Comparable接口
{
	String name;
	int age;
	Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
		
}

class Mycompare implements Comparator<Object>
{
	public int compare(Object obj1,Object obj2)
	{
		Person p1 = (Person)obj1;
		Person p2 = (Person)obj2;
		//System.out.println(p1.name+p1.age+"compare..."+p2.name+p2.age);
		int num = p1.name.compareTo(p2.name);
		if(num==0)
		{
			return p1.age - p2.age;
		}
		return num;
	}
}

2)给ArrayList链表排序示例代码:

class Person	
{
	String name;
	int age;
	Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
		
}

class Mycompare implements Comparator<Object>
{
	public int compare(Object obj1,Object obj2)
	{
		Person p1 = (Person)obj1;
		Person p2 = (Person)obj2;
		int num = p1.name.compareTo(p2.name);
		if(num==0)
		{
			return p1.age - p2.age;
		}
		return num;
	}
}

class HelloWorld
{
	public static void main(String[] args)
	{
		ArrayList<Person> al = new ArrayList<>();
		al.add(new Person("Lili",11));
		al.add(new Person("xiaoming",11));
		al.add(new Person("xiaoming",14));
		al.add(new Person("zhang",13));
		al.add(new Person("xiaohong",12));
		Collections.sort(al,new Mycompare());     //对集合中的对象进行排序
		for(Person p:al)
		{
			System.out.println(p.name+"....."+p.age);
		}
	}
}

3.对象构成的数组的排序

class TanXin{
	public static void main(String[] args){
		Integer[] g = {5,10,2,9,15,9};		  //Integer类型对象的数组
		Arrays.sort(g,new myComparator());        //对对象的数组排序	
	}
}

class myComparator implements Comparator<Integer>{
	public int compare(Integer a,Integer b){
		return (b-a);
	}
}
说明:这里 g数组中必须是对象,不能是基本类型,例如int[] g = {5,10,2,9,15,9}; 就不能使用sort(T[] a, Comparator<? super T> c)
方法进行排序。

猜你喜欢

转载自blog.csdn.net/chenkaibsw/article/details/80168431
今日推荐