自定义实体判断相等和比较大小

通过实体部分属性判断相等或比较大小

1.    判断自定义的实体的实例相等

a)         重写 hashCode() 和 equals() 两个方法

b)         具体举例:

 1 class Stu{
 2     private String name = null;
 3     private int age = 0;
 4
 5     public Stu(String name, int age){
 6         this.name = name;
 7         this.age = age;
 8     }
 9     //覆写Object中的equals方法
10     public boolean equals(Object obj){
11         if(this == obj){
12             return true;
13         }
14         if(!(obj instanceof Stu)){
15             return false;
16         }
17         Stu stu = (Stu)obj;
18         if((stu.age == this.age) && this.name.equals(stu.name)){
19             return true;
20         }
21         return false;
22     }
23     //覆写Object中的hashCode方法
24     public int hashCode(){
25         return this.name.hashCode() * this.age;
26     }
27 }

2.    通过部分属性(一个或多个字段)比较实体实例的大小

1)     让自定义类实现Comparable接口

实现Comparable接口并重写compareTo()方法, 在compareTo()方法中指明如何排序。

2)     指定Comparator方式排序

传入Comparator并在实例对象中重写compare(Object o1,Object o2)方法,比较o1和o2的大小,如果方法返回正整数,则表示o1大于o2,如果返回0,表示二者相等,如果返回负整数,表示o1小于o2.

i.          实现Comparable接口,具体举例A:

 1 public class Goods implements Comparable {
 2     private String name;
 3     private double price;
 4
 5     public Goods() {
 6     }
 7
 8     public Goods(String name, double price) {
 9         this.name = name;
10         this.price = price;
11     }
12
13     public String getName() {
14         return name;
15     }
16
17     public void setName(String name) {
18         this.name = name;
19     }
20
21     public double getPrice() {
22         return price;
23     }
24
25     public void setPrice(double price) {
26         this.price = price;
27     }
28
29     @Override
30     public String toString() {
31         return "Goods{" +
32                 "name=‘" + name + ‘\‘‘ +
33                 ", price=" + price +
34                 ‘}‘;
35     }
36
37     //指明商品比较大小的方式,按照价格从低到高排序,如果出现价格相同的,再按照产品名称从低到高排序
38     @Override
39     public int compareTo(Object o) {
40         if(o instanceof Goods ){
41             Goods goods =(Goods)o;
42             if (this.price > goods.price) {
43                 return 1;
44             }else if(this.price < goods.price){
45                 return  -1;
46             }else
47                 //return 0;
48                 return this.name.compareTo(goods.name);
49         }
50        throw new RuntimeException("传入的数据类型不一致");
51     }
52 }

ii.          传入Comparator接口,具体举例B

 1 // 运用集合工具类 Collections.sort()
 2 @Test
 3 public void test1(){
 4     Map<Integer,String> map = new TreeMap <>();
 5     map.put(5, "a");
 6     map.put(3, "c");
 7     map.put(4, "b");
 8     map.put(2, "d");
 9     map.put(1, "e");
10     List<Entry<Integer,String>> list = new ArrayList<>(map.entrySet());
11     Collections.sort(list, new Comparator<Entry<Integer,String>>() {
12         @Override
13         public int compare(Entry<Integer,String> o1, Entry<Integer,String> o2) {
14             // TODO Auto-generated method stub
15             return o1.getValue().compareTo(o2.getValue());
16         }
17     });
18     for(Entry<Integer,String> aEntry : list) {
19         System.out.println(aEntry.getKey()+":"+aEntry.getValue());
20     }
21
22     /*
23         运行结果:
24         5:a
25         4:b
26         3:c
27         2:d
28         1:e
29     */
30 }
31
32 // 运用数组工具类 Arrays.sort()
33 @Test
34 public void test2(){
35    Goods[] arr=new Goods[5];
36    arr[0] = new Goods("lenovoMouse",34);
37    arr[1] = new Goods("dellMouse",66);
38    arr[2] = new Goods("xiaomiMouse",50);
39    arr[3] = new Goods("hahaMouse",66);
40    arr[4] = new Goods("hahaMouse",166);
41
42    Arrays.sort(arr, new Comparator() {
43         //指明商品比较大小的方式,按照产品名称从低到高排序,再按照价格从高到低排序
44        @Override
45        public int compare(Object o1, Object o2) {
46           if(o1 instanceof  Goods && o2 instanceof Goods){
47
48               Goods g1=(Goods)o1;
49               Goods g2=(Goods)o2;
50               if(g1.getName().equals(g2.getName())){
51                   return -Double.compare(g1.getPrice(),g2.getPrice());
52               }else {
53                   return g1.getName().compareTo(g2.getName());
54               }
55           }
56            throw new RuntimeException("输入的数据类型不一致");
57        }
58    });
59
60    System.out.println(Arrays.toString(arr));
61
62    /*
63    运行结果:
64    [Goods{name=‘dellMouse‘, price=66.0}, Goods{name=‘hahaMouse‘, price=166.0},
65     Goods{name=‘hahaMouse‘, price=66.0}, Goods{name=‘lenovoMouse‘, price=34.0},
66     Goods{name=‘xiaomiMouse‘, price=50.0}]
67     */
68 }

3)     Comparable接口与Comparator接口的使用的对比

Comparable接口的方式一旦指定,保证Comparable接口实现类的对象在任何位置都可以比较大小。

Comparator接口属于临时性的比较。

引用资料:

1.如何判断两个对象是否完全相等

2.Java中比较对象大小的两种实现方式

原文地址:https://www.cnblogs.com/bridgestone29-08/p/11258457.html

时间: 2024-11-03 09:05:59

自定义实体判断相等和比较大小的相关文章

比较两个数的大小,自定义比较两个整数的大小的方法

比较两个数的大小,自定义比较两个整数的大小的方法: 如果第一个数大,返回1 如果相等返回0 如果第一个数小,返回-1 在Main()方法中输入两个数,调用这个方法 示例: 请输入两个数: 45 56 第二个数大 按任意键继续...... 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 n

自定义实体类在三层架构之间传递数据

自定义实体类是专门承载业务实体数据的类,一般将方法分离出来,只包含属性和字段的定义.每个实体类对应数据库中的一个表,每个属性对应表中的一个相应的字段.使用实体类属于面向对象编程的思想,将每个表封装成对应的类. 1. 为什么使用自定义实体类 (1)使程序更加灵活.如果数据库发生了更改,只需要修改数据实体类的代码,其他层的代码修改量很小. (2)使用面向对象思想将数据库中的表抽象为类,消除了关系数据与类的差别,使程序维护和扩展更方便. (3)更有利于分层架构设计. 2. 使用自定义实体类作为三层架构

crm2011创建自定义实体Entity

using System; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; using Microsoft.Xrm.Sdk.Metadata; using Microsoft.Crm.Sdk.Messages; /// <summary> /// crm创建自定义实体 /// </summary> public class CreateEntityHelper { public void Create(IOrga

不使用if switch 各种大于 小于 判断2个数的大小

哥们写的代码: dword big; __asm { mov eax,a mov ebx,b cmp eax,ebx jle HOHO big =ebx HOHO: big = eax } 网上搜了一些,还有的说直接printf出来... 不使用if switch 各种大于 小于 判断2个数的大小,布布扣,bubuko.com

if 判断两个数值大小--多分支if语句实现对参数的严格判断

if 判断两个数值大小--多分支if语句实现对参数的严格判断 #!/bin/bash print_usage(){ printf"你输入的参数个数不对或者有误,请按照下面语法执行:\n" echo -e "$0 数字1 数字2" exit1 } if[ $# -ne 2   ] then print_usage exit1 fi [  -n "`echo $1|sed 's/[0-9]//g'`" -a-n "`echo $2|sed

CAD控件使用教程 自定义实体的实现

自定义实体的实现 1 .       自定义实体... 3 1.1      说明... 3 1.2      类的类型信息... 3 1.3      worldDraw.. 4 1.4      getGripPoints 4 1.5      moveGripPointsAt 5 1.6      getGeomExtents 6 1.7      getOsnapPoints 6 1.8      explode. 7 1.9      dwgInFields 8 1.10    dwg

JavaScript客户端判断文件类型及大小

<html><head><title>潜水式无堵塞排污泵</title> <meta http-equiv="content-type" content="text/html;charset=gb2312"></head><body>以下是一个客户端控制file上传图片类型和大小的示例(注意:由于是客户端限制,所以用户可以绕过这个限制):<script language=&qu

【CAD】自定义实体的步骤(转)

本文介绍了构造自定义实体的步骤.必须继承的函数和必须注意的事项 1.新建一个从AcDbEntity继承的类,如EntTest,必须添加的头文件: "stdarx.h","acadstrc.h", "geassign.h". 2.在该类头文件的类声明中添加宏:ACRX_DECLARE_MEMBERS(EntTest); 3.在该类的cpp文件中,类的前面添加宏: ACRX_DXF_DEFINE_MEMBERS(EntTest, AcDbEntity

JAVA 判断给定目录的大小

题目:给定一个目录,判断该目录的大小,单位为G 思路: 递归拿到目录的子文件,然后取长度,累加 public class FileDemo02 { public static void main(String[] args) { FileDemo02 demo = new FileDemo02(); long size = demo .printDirSize(new File("D:/视频/极客学院知识体系/Java/4.Java语言进阶")); System.out.println