当前位置: 首页 > wzjs >正文

网站同城在线哪里做设计君网站

网站同城在线哪里做,设计君网站,免费稳定的云服务器,wordpress首页定制目录 1.前言 2.Comaprable接口 2.1 使用细节 2.2 案例演示 3.Comparator接口 3.1 为什么需要Comparator接口 3.2 使用细节 3.3 案例演示 4.Comparable、Comparator对比 1.前言 Java 中的对象,正常情况下,只能进行比较: 或 ! 。不…

目录

1.前言

2.Comaprable接口

2.1 使用细节

2.2 案例演示

3.Comparator接口

3.1 为什么需要Comparator接口

3.2 使用细节

3.3 案例演示

4.Comparable、Comparator对比


1.前言

Java 中的对象,正常情况下,只能进行比较:==  或  != 。不能使用 >< 。但是在实际开发场景中,有时候需要对多个对象进行排序,言外之意,就是需要比较对象的大小。这便引出了 Comparable、Comparator 两个接口

2.Comaprable接口

Comparable 位于 java.lang.Comaprable,其源码如下:

package java.lang;
import java.util.*;
public interface Comparable<T> {public int compareTo(T o);
}

2.1 使用细节

实现 Comparable 接口的类必须实现 int compareTo(T o) 方法,两个对象可以通过 int compareTo(T o) 方法的返回值来比较大小:

        (1)当前对象 this 大于形参对象 o,则返回正整数

        (2)当前对象 this 小于形参对象 o,则返回负整数

        (3)当前对象 this 等于形参对象 o,则返回 0

 实现 Comparable 接口的对象列表或数组可以通过 Collections.sort Arrays.sort 进行自动排序,无需指定 Collection.sort(...)、Arrays.sort(...) 方法的第二个比较器参数,底层会根据类中实现的 int compareTo(T o)  作为排序逻辑

String、八大包装类implements 了该接口,并实现了 int compareTo(T o) 方法,都是从小到大排列的

String:按照字符串中字符的 ASCII 值进行比较
Character:按照字符的 ASCII 值来进行比较
数值类型对应的包装类以及 BigInteger、BigDecimal :按照它们对应的数值大小进行比较
Boolean:true 对应的包装类实例大于 false 对应的包装类实例
Date、Time等:后面的日期时间比前面的日期时间大

2.2 案例演示

案例1 :根据学生的年龄对学生类型数组进行升序排序 

import java.util.Arrays;
import java.util.Comparator;
public class demo {public static void main(String[] args) {Student s1 = new Student("小马", 100);Student s2 = new Student("蔡徐坤", 5);Student s3 = new Student("ftt", 90);Student[] arr1  = {s1,s2,s3};Student[] arr2  = {s1,s2,s3};System.out.println("排序前,所有学生:");Arrays.stream(arr1).forEach(student -> System.out.println(student));System.out.println("----------------------");//方式1:使用冒泡排序System.out.println("按照年龄排序:");for (int i = 1; i < arr1.length; i++) {for (int j = 0; j < arr1.length-i; j++) {if(arr1[j].compareTo(arr1[j+1])>0){Student temp = arr1[j];arr1[j] = arr1[j+1];arr1[j+1] = temp;}}}Arrays.stream(arr1).forEach(student -> System.out.println(student));System.out.println("----------------------");//方式2:使用Arrays.sort排序,因为在Student类已实现Comparable接口,所以无需指定比较器Arrays.sort(arr2);Arrays.stream(arr2).forEach(student -> System.out.println(student));}
}class Student implements Comparable<Student> {public String name;public int age;public Student(){}public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}//按学生年龄升序排序@Overridepublic int compareTo(Student anotherStudent) {if(this.age > anotherStudent.age){return 1;}else if(this.age < anotherStudent.age){return -1;}else{return 0;}}
}

 案例1运行结果:

案例2 :对字符数组进行排序

import java.util.Arrays;
public class demo {public static void main(String[] args) {Character[] arr = {'b','a','c','d'};System.out.println("排序前的字符数组:"+Arrays.toString(arr));Arrays.sort(arr);//Arrays底层会将Character类中实现的 int compareTo(T o) 方法作为排序逻辑System.out.println("排序后的字符数组:"+Arrays.toString(arr));}
}

 案例2运行结果: 

3.Comparator接口

Comparator 接口位于 java.until.Comparator 下,其中关于 int compareTo(...) 接口的源码如下:

package java.util;public interface Comparator<T>{int compare(T o1,T o2);
}

3.1 为什么需要Comparator接口

场景 ① :当只有第三方的类时(即只有 .class 字节码文件,没有 .java 源文件,无法修改代码),且这些类没有实现 java.lang.Comparable 接口

场景 ② :类中提前实现了 Comparable 接口,指定了两个对象比较大小的规则,但此时如果不想按照它预定义的方法比较大小,但是又不能随意修改源码,因为会影响其他地方的使用,怎么办呢?

因此,基于 ①、②Java 增加了一个 java.util.Comparator 接口来解决问题

3.2 使用细节

通常是用一个单独的其他的类来实现 Comparator 接口

② 实现 Comparator 的类必须实现 int compareTo (T o1,T o2) 方法,两个对象可以通过 int compareTo (T o1,T o2) 方法的返回值来比较大小:

        (1) o1 大于 o2,则返回正整数

        (2) o1 小于 o2,则返回负整数

        (3) o1 等于 o2,则返回 0

 在使用 Collection.sortArrays.sort 实现排序功能时,可以将实现了 Comparator 接口的类的实例传递给 Collection.sortArrays.sort,作为排序逻辑的比较器

3.3 案例演示

案例

import java.util.Arrays;
import java.util.Comparator;
public class demo {public static void main(String[] args) {//定义比较器实例StudentScoreComparator sc = new StudentScoreComparator();Student s1 = new Student("小马", 22,98);Student s2 = new Student("jack", 55,90);Student s3 = new Student("mary", 30,67);Student[] arr1  = {s1,s2,s3};Student[] arr2  = {s1,s2,s3};System.out.println("按分数排序前,所有学生:");Arrays.stream(arr1).forEach(student -> System.out.println(student));System.out.println("----------------------");//方式1:使用冒泡排序System.out.println("按照分数排序:");for (int i = 1; i < arr1.length; i++) {for (int j = 0; j < arr1.length-i; j++) {if(sc.compare(arr1[j],arr1[j+1]) > 0) {Student temp = arr1[j];arr1[j] = arr1[j+1];arr1[j+1] = temp;}}}Arrays.stream(arr1).forEach(student -> System.out.println(student));System.out.println("----------------------");//方式2:使用Arrays.sort排序,指定StudentScoreComparator为比较器,按学生的分数排序Arrays.sort(arr2,sc);Arrays.stream(arr2).forEach(student -> System.out.println(student));}
}//定制比较器类,按学生的分数升序排序
class StudentScoreComparator implements Comparator<Student>{@Overridepublic int compare(Student s1, Student s2) {if(s1.score > s2.score){return 1;}else if(s1.score < s2.score){return -1;}else{return 0;}}
}class Student implements Comparable<Student> {public String name;public int age;public int score;public Student(){}public Student(String name, int age, int score) {this.name = name;this.age = age;this.score = score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", score=" + score +'}';}//按学生年龄升序排序@Overridepublic int compareTo(Student anotherStudent) {if(this.age > anotherStudent.age){return 1;}else if(this.age < anotherStudent.age){return -1;}else{return 0;}}
}

案例1运行结果: 

4.Comparable、Comparator对比

ComparableComparator
实现位置类内部实现外部独立实现
排序规则数量只能定义一种排序规则可根据业务求定义多种排序规则
侵入性需要修改原类代码不需要修改原类代码
方法int compareTo (T o)int compare (T o1, T o2)
使用场景默认排序,如 Arrays.sort(arr)灵活排序,如 Arrays.sort(arr,comparator)
http://www.dtcms.com/wzjs/840936.html

相关文章:

  • 培训网站开发哪个好网站推广的最终目的是什么
  • gzip网站优化网络营销课程培训
  • 关于书店网站开发实例的书网站的建设ppt模板
  • 个人网站html模板下载金融行业做网站需要什么
  • 专业做网站联系电话seo优化排名教程百度技术
  • 网站后台模板 jquery公关公司排行榜
  • 做58网站怎么赚钱吗考网站开发工程师
  • 兰州网站推广优化网站权限设计方案
  • 网站怎么做反爬虫外链seo推广
  • 平面设计网站大全网站小学校园网站怎么建设
  • 房产中介网站建设管理天津互联网公司排名
  • 无锡游戏网站建设公司网站ps多大尺寸
  • 自己做服务器网站wordpress做排名
  • 网站服务器是干什么的网线制作标准
  • 域名解析网站登录上海网络公司网站建设
  • 阿里云网站商城建设网页制作与网站开发从入门到精通 豆瓣
  • 海曙网站建设网站网络创始人 网站建设
  • 网站上的地图怎么做建设php网站
  • 网站建设介绍ppt模板asp网站建设 win7
  • 专业商城网站设计公司网站如何做宣传
  • 网站制作咨询电话坂田网站设计
  • 做网站 绑定域名营销网站开发公司
  • 网站做不做账帮别人设计网站的网站吗
  • 末备案网站如何做cdn广东装饰网站建设
  • 郑州做网站公司汉狮在线考试类网站怎么做
  • 建设网站前台费用wordpress 插件模板
  • 商城网站制作费用常州网站建设czyzj
  • 镇江市住房与城乡建设局网站农村自建房设计图一层楼平面图
  • 温州专业手机网站制作哪家好怎么制作网站平台
  • 网站建设所需域名sem运营有出路吗