码迷,mamicode.com
首页 > 编程语言 > 详细

javable之Comparable

时间:2018-06-19 20:40:48      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:操作   方式   怎么   元素   需要   例子   out   tor   问题   

我们知道,在Java的集合类中是有一些可复用的算法的,比如

Collections.sort()从小到大排序,Collections.min(),最小值Collections.max()最大值,

这些对于list操作来说都是非常常见的,也经常需要用到

		List<String> strings = new ArrayList<String>();
		strings.add("ab");
		strings.add("cc");
		strings.add("bc");
		Collections.sort(strings);
		String max =Collections.max(strings);
		String min =Collections.min(strings);
		System.out.println(strings);//[ab, bc, cc]
		System.out.println(max);//cc
		System.out.println(min);//ab

		List<Integer> integers = new ArrayList<Integer>();
		integers.add(2);
		integers.add(1);
		integers.add(3);
		Collections.sort(integers);
		Integer max1 =Collections.max(integers);
		Integer min1 =Collections.min(integers);
		System.out.println(integers);//[1, 2, 3]
		System.out.println(max1);//3
		System.out.println(min1);//1

  那么问题就来了,例子中的String,Integer,都是可比较的元素,如果是自定义的ADT怎么办呢?或者是如何按照我们想的比大小的方式,比如这里String是字典序,Integer是升序,我想要换一种方式,怎么办呢?

这里有两种方法

1实现Comparable 排序接口,并实现public int compareTo(Object o)方法

public class UseAnimals {
	public static void main(String[] args) {

		List<Dog> dogs = new ArrayList<Dog>();
		Dog dog1 = new Dog(1,"Mary");
		Dog dog2 = new Dog(3,"Elizabeth");
		Dog dog3 = new Dog(2,"Anne Boleyn");
		dogs.add(dog1);
		dogs.add(dog2);
		dogs.add(dog3);
		Collections.sort(dogs); 
		Dog max =Collections.max(dogs);
		Dog min =Collections.min(dogs);
		System.out.println(dogs);//[Mary 1, Anne Boleyn 2, Elizabeth 3]
		System.out.println(max);//Elizabeth 3
		System.out.println(min);//Mary 1
	}

}

class Dog implements Comparable<Dog>  {
	int age;
	String name ;
	public Dog (int age,String name)
	{
		this.age=age;
		this.name=name;
	}

	@Override
	public int compareTo(Dog o) {
		// TODO Auto-generated method stub
		return (this.age>o.age)? 1:-1;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return name+" "+age;
	}
	
}

  

2.通过传入参数比较器Comparator来实现

	public static void main(String[] args) {

		List<Dog> dogs = new ArrayList<Dog>();
		Dog dog1 = new Dog(1,"Mary");
		Dog dog2 = new Dog(3,"Elizabeth");
		Dog dog3 = new Dog(2,"Anne Boleyn");
		dogs.add(dog1);
		dogs.add(dog2);
		dogs.add(dog3);
		
	        Comparator<Dog> cia = new  Comparator<Dog>(){
			@Override
	        public int compare(Dog o1, Dog o2) {
	        return o1.age - o2.age;
	        }
		};
		Collections.sort(dogs,cia);
		Dog max =Collections.max(dogs);
		Dog min =Collections.min(dogs);
		System.out.println(dogs);//[Mary 1, Anne Boleyn 2, Elizabeth 3]
		System.out.println(max);//Elizabeth 3
		System.out.println(min);//Mary 1

	}

  

当然也可以简单写成:

		Collections.sort(dogs, new Comparator<Dog>() {

	        @Override
	        public int compare(Dog o1, Dog o2) {
	        return o1.age - o2.age;
	        }
	    });

  这样就可以实现对自定义的ADT以自己想要的方式排序或者一键最大最小值了。

javable之Comparable

标签:操作   方式   怎么   元素   需要   例子   out   tor   问题   

原文地址:https://www.cnblogs.com/blairwaldorf/p/9200919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!