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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?