无锡集团网站建设公司最便宜的网站建设公司
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:15
当前位置: 首页 > news >正文
无锡集团网站建设公司,最便宜的网站建设公司,网站建设中html 下载,网站建设开票是几个点引入的背景 我们知道基本数据类型的数据#xff08;除boolean类型外#xff09;需要比较大小的话#xff0c;直接使用比较运算符即可#xff0c;但是引用数据类型是不能直接使用比较运算符来比较大小的。那么#xff0c;如何解决这个问题呢#xff1f; 在Java中经常会涉…引入的背景 我们知道基本数据类型的数据除boolean类型外需要比较大小的话直接使用比较运算符即可但是引用数据类型是不能直接使用比较运算符来比较大小的。那么如何解决这个问题呢 在Java中经常会涉及到对象数组的排序问题那么就涉及到对象之间的比较问题。 Java实现对象排序的方式有两种 自然排序java.lang.Comparable定制排序java.util.Comparator 自然排序java.lang.Comparable Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。 实现 Comparable 的类必须实现 compareTo(Object obj) 方法两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。 如果当前对象this大于形参对象obj则返回正整数。 如果当前对象this小于形参对象obj则返回负整数。 如果当前对象this等于形参对象obj则返回零。 package java.lang;public interface Comparable{int compareTo(Object obj); }Comparable 的典型实现(默认都是从小到大排列的) String按照字符串中字符的Unicode值进行比较Character按照字符的Unicode值来进行比较数值类型对应的包装类以及BigInteger、BigDecimal按照它们对应的数值大小进行比较Booleantrue 对应的包装类实例大于 false 对应的包装类实例Date、Time等后面的日期时间比前面的日期时间大 测试String 代码示例 Testpublic void test1(){//测试String已经写好的String [] a new String[]{Jack, Tom, Lucy};//排序之前for (int i 0; i a.length; i) {System.out.print(a[i]\t);}System.out.println();//使用Arrays进行排序Arrays.sort(a);//排序之后进行展示for (int i 0; i a.length; i) {System.out.print(a[i]\t);}}运行效果 测试自己实现comparable接口 Product类 package cn.edu.chd.exer1;import java.util.Objects;public class Product implements Comparable{private String name;private double prices;//无参构造public Product() {}//全参构造public Product(String name, double prices) {this.name name;this.prices prices;}public String getName() {return name;}public void setName(String name) {this.name name;}public double getPrices() {return prices;}public void setPrices(double prices) {this.prices prices;}Overridepublic String toString() {return Product{ name name \ , prices prices };}Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;Product product (Product) o;return Double.compare(product.prices, prices) 0 name.equals(product.name);}Overridepublic int hashCode() {return Objects.hash(name, prices);}Overridepublic int compareTo(Object o) {//如果是同一个对象return 0if (this o){return 0;}//两个对象比较的标准是价格从小到大价格一样的话按照名字从小到大if (o instanceof Product){Product p (Product)o;int v Double.compare(this.prices, p.prices); // return v;if (v ! 0){return v;}//价格如果相同名字按照从小到大return this.name.compareTo(p.name);}//手动抛异常throw new RuntimeException(类型不匹配);} } 测试 //对不同对象的大小进行排序Testpublic void test2(){//商品数组Product[] products new Product[5];//全参构造器在new对象时就对属性进行赋值products[0] new Product(Huawei, 5999);products[1] new Product(XiaoMi, 4999);products[2] new Product(iPhone, 9999);products[3] new Product(vivo, 3999);products[4] new Product(Honer, 5999);System.out.println(排序之前);//排序之前的遍历for (int i 0; i products.length; i) {System.out.println(products[i]);}System.out.println(———————————————-);//使用arrays进行排序Arrays.sort(products);System.out.println(排序之后);//排序后的遍历for (int i 0; i products.length; i) {System.out.println(products[i]);}}运行效果 定制排序java.util.Comparator 思考 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码例如一些第三方的类你只有.class文件没有源文件如果一个类实现了Comparable接口也指定了两个对象的比较大小的规则但是此时此刻我不想按照它预定义的方法比较大小但是我又不能随意修改因为会影响其他地方的使用怎么办例如我想要String按照字母从大到小的顺序排序而不是默认的从小到大 JDK在设计类库之初也考虑到这种情况所以又增加了一个java.util.Comparator接口。强行对多个对象进行整体排序的比较。 重写compare(Object o1,Object o2)方法比较o1和o2的大小如果方法返回正整数则表示o1大于o2如果返回0表示相等返回负整数表示o1小于o2。可以将 Comparator 传递给 sort 方法如 Collections.sort 或 Arrays.sort从而允许在排序顺序上实现精确控制。 Product类 package cn.edu.chd.exer2;import java.util.Objects;public class Product implements Comparable{private String name;private double prices;//无参构造public Product() {}//全参构造public Product(String name, double prices) {this.name name;this.prices prices;}public String getName() {return name;}public void setName(String name) {this.name name;}public double getPrices() {return prices;}public void setPrices(double prices) {this.prices prices;}Overridepublic String toString() {return Product{ name name \ , prices prices };}Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;Product product (Product) o;return Double.compare(product.prices, prices) 0 name.equals(product.name);}Overridepublic int hashCode() {return Objects.hash(name, prices);}Overridepublic int compareTo(Object o) {//如果是同一个对象return 0if (this o){return 0;}//两个对象比较的标准是价格从小到大价格一样的话按照名字从小到大if (o instanceof Product){Product p (Product)o;int v Double.compare(this.prices, p.prices); // return v;if (v ! 0){return v;}//价格如果相同名字按照从小到大return this.name.compareTo(p.name);}//手动抛异常throw new RuntimeException(类型不匹配);} } 按照商品的价格从低到高排序的comparator Testpublic void test1(){//new一个comparator接口的匿名实现类Comparator comparator new Comparator() {//按照商品的价格从低到高排序Overridepublic int compare(Object o1, Object o2) {if (o1 o2){return 0;}if (o1 instanceof Product o2 instanceof Product){//强转Product p1 (Product) o1;Product p2 (Product) o2;return Double.compare(p1.getPrices(), p2.getPrices());}throw new RuntimeException(类型不匹配);}};//商品数组Product[] products new Product[5];//全参构造器在new对象时就对属性进行赋值products[0] new Product(Huawei, 5999);products[1] new Product(XiaoMi, 4999);products[2] new Product(iPhone, 9999);products[3] new Product(vivo, 3999);products[4] new Product(Honer, 5999);System.out.println(排序之前);//排序之前的遍历for (int i 0; i products.length; i) {System.out.println(products[i]);}System.out.println(———————————————-);//将comparator对象作为参数进行传入,排序Arrays.sort(products, comparator);System.out.println(排序之后);//排序后的遍历for (int i 0; i products.length; i) {System.out.println(products[i]);}}运行效果 按照名称进行排序的comparator //按照名称进行排序Testpublic void test2(){//new一个comparator接口的匿名实现类Comparator comparator new Comparator() {//按照商品的名称进行排序Overridepublic int compare(Object o1, Object o2) {if (o1 o2){return 0;}if (o1 instanceof Product o2 instanceof Product){//强转Product p1 (Product) o1;Product p2 (Product) o2;return p1.getName().compareTo(p2.getName());}throw new RuntimeException(类型不匹配);}};//商品数组Product[] products new Product[5];//全参构造器在new对象时就对属性进行赋值products[0] new Product(Huawei, 5999);products[1] new Product(XiaoMi, 4999);products[2] new Product(iPhone, 9999);products[3] new Product(vivo, 3999);products[4] new Product(Honer, 5999);System.out.println(排序之前);//排序之前的遍历for (int i 0; i products.length; i) {System.out.println(products[i]);}System.out.println(———————————————-);//将comparator对象作为参数进行传入,排序Arrays.sort(products, comparator);System.out.println(排序之后);//排序后的遍历for (int i 0; i products.length; i) {System.out.println(products[i]);}}运行效果
- 上一篇: 无锡机关单位建设网站wordpress空间安装教程
- 下一篇: 无锡开发网站建设鲅鱼圈网站开发
相关文章
-
无锡机关单位建设网站wordpress空间安装教程
无锡机关单位建设网站wordpress空间安装教程
- 技术栈
- 2026年04月20日
-
无锡华士镇网站建设温州建校证件查询网站
无锡华士镇网站建设温州建校证件查询网站
- 技术栈
- 2026年04月20日
-
无锡华士镇网站建设电脑版传奇排行榜
无锡华士镇网站建设电脑版传奇排行榜
- 技术栈
- 2026年04月20日
-
无锡开发网站建设鲅鱼圈网站开发
无锡开发网站建设鲅鱼圈网站开发
- 技术栈
- 2026年04月20日
-
无锡开发网站建设网站百度排名优化
无锡开发网站建设网站百度排名优化
- 技术栈
- 2026年04月20日
-
无锡论坛网站建设金舵设计园在线设计平台
无锡论坛网站建设金舵设计园在线设计平台
- 技术栈
- 2026年04月20日
