您当前的位置: 首页 >  Java

星夜孤帆

暂无认证

  • 2浏览

    0关注

    626博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java学习笔记(32)-Comparable接口

星夜孤帆 发布时间:2018-05-24 21:36:32 ,浏览量:2

package day03;
/**
 * 可比较的点
 * 若我们定义的类想在数组或集合中可以排序,我们需要将当前类实现
 * Comparable接口,并定义比较规则
 * @author Administrator
 *
 */
public class ComparablePoint
	implements Comparable{
	/**
	 * 属性定义
	 */
	private int x;
	private int y;
	public ComparablePoint(int x,int y){
		this.x = x;
		this.y = y;
	}
	/**
	 * 比较方法,该方法由Comparable接口定义
	 * 所有子类均需要实现该方法来定义比较规则
	 * 比较规则:
	 * 比较点到原点的距离,谁的距离长谁大
	 */
	public int compareTo(ComparablePoint o) {
		//自身点到原点的距离
		int r = x*x+y*y;
		//参数点到原点的距离
		int other = o.x*o.x+o.y*o.y;
		/**
		 * 返回结果大于0,自身比参数大
		 * 小于0,自身比参数小
		 * 等于0,自身和参数相等
		 * 需要注意:
		 * equals返回true的时候,
		 * comparaTo的返回值应该为0
		 * 反过来也一样
		 */
		return r - other;
	}
	public String toString(){
		return "x="+x+",y"+y;
	}

}

Collection与Collections的区别?

Collection是集合的接口

Collection类

集合的工具类。提供了对集合操作的若干方法

sort():该方法可以对集合中的元素做自然排序

package day03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 测试集合工具类对集合元素进行的自然排序
 * 要确保集合中的元素是Comparable的子类!
 * @author Administrator
 *
 */
public class DemoComparable {
	public static void main(String[] args) {
		List list  = new ArrayList();
		//向集合中存放3个对象
		list.add(new ComparablePoint(1,5));
		list.add(new ComparablePoint(3,4));
		list.add(new ComparablePoint(2,2));
		
		System.out.println(list);//输出顺序与存放时一致
		/**
		 * 使用集合工具类对集合进行自然排序
		 * 该方法会一次调用集合中每个元素的compareTo方法进行比较
		 */
		Collections.sort(list);
		System.out.println(list);
	}
}

Comparator比较器

它是一个接口。实现该接口的类需要实现一个抽象方法int compareTo(E o1,E o2)

该方法返回值大于0:o1比o2大

该方法返回值小于o: o1比o2小

该方法返回值等于o: o1与o2相等

比较器可以用于比较集合中的元素。

Collections提供了sort的重载方法,支持传入一个比较器对集合进行比较 。

如何用eclipse自动公开属性值?

空白处右键source->generator getters and setters

package day03;
/**
 * 可比较的点
 * 若我们定义的类想在数组或集合中可以排序,我们需要将当前类实现
 * Comparable接口,并定义比较规则
 * @author Administrator
 *
 */
public class ComparablePoint
	implements Comparable{
	/**
	 * 属性定义
	 */
	private int x;
	private int y;
	public ComparablePoint(int x,int y){
		this.x = x;
		this.y = y;
	}
	
	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}

	/**
	 * 比较方法,该方法由Comparable接口定义
	 * 所有子类均需要实现该方法来定义比较规则
	 * 比较规则:
	 * 比较点到原点的距离,谁的距离长谁大
	 */
	public int compareTo(ComparablePoint o) {
		//自身点到原点的距离
		int r = x*x+y*y;
		//参数点到原点的距离
		int other = o.x*o.x+o.y*o.y;
		/**
		 * 返回结果大于0,自身比参数大
		 * 小于0,自身比参数小
		 * 等于0,自身和参数相等
		 * 需要注意:
		 * equals返回true的时候,
		 * comparaTo的返回值应该为0
		 * 反过来也一样
		 */
		return r - other;
	}
	public String toString(){
		return "x="+x+",y"+y;
	}

}
package day03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 测试集合工具类对集合元素进行的自然排序
 * 要确保集合中的元素是Comparable的子类!
 * @author Administrator
 *
 */
public class DemoComparable {
	public static void main(String[] args) {
		List list  = new ArrayList();
		//向集合中存放3个对象
		list.add(new ComparablePoint(1,5));
		list.add(new ComparablePoint(3,4));
		list.add(new ComparablePoint(2,2));
		
		System.out.println(list);//输出顺序与存放时一致
		/**
		 * 使用集合工具类对集合进行自然排序
		 * 该方法会一次调用集合中每个元素的compareTo方法进行比较
		 */
		Collections.sort(list);
		System.out.println(list);
		/**
		 * 在排序集合元素时,我们不想根据元素的比较规则来进行
		 * 排序:按照x值自小至大的顺序排序集合元素
		 * 自定义的比较规则实现需要以下步骤:
		 * 1:定义一个类并实现Comparator接口
		 * 2:实现接口中的抽象方法compareTo(E o1,E o2)
		 * 3:实例化这个比较器
		 * 4:调用Collections的重载方法
		 * sort(Collection c,Comparator comparator)
		 * 进行排序
		 * 
		 * 使用匿名类方式创建一个实例来定义比较器
		 */
		Comparator c = new Comparator(){
			/**
			 * 自定义的比较规则
			 * o1
			 * o2
			 * 
			 * return 大于0:o1>o2,小于0:o1            
关注
打赏
1636984416
查看更多评论
0.0381s