compareto相关知识
-
Java中摆脱equals,compareTo和toString我们都曾在POJO中重写过equals(),compareTo()和toString()方法。但是另有其他能做到职责分离的更好的方法并带来更简洁的代码。阅读这篇文章来一探究竟吧!更简明的职责——摆脱equals、compareTo和toString方法你曾经查看过java文档中的Object类吗?也许吧。每当你向上追溯继承树的时候都会止步于这个类。你会注意到,该类有几个方法是每一个类都必须继承的。而你最喜欢重写的方法可能就是toString(), .equals() and .hashCode() 这三个了。(至于为何总是应该同时重写后两个方法,请看Per-Åke Minborg写的这篇文章:https://minborgsjavapot.blogspot.com/2014/10/new-java-8-object-support-mixin-pattern.html)但是仅仅有这几个方法显然是不够的。许多人将标准库中的其他的接口如Comparable和Serializable加以组合。但是这样真的明智吗?
-
Comparable 和 ComparatorComparable 自然排序Comparable 在 java.lang 包下,是一个接口,内部只有一个方法 compareTo():Comparable 可以让实现它的类的对象进行比较,具体的比较规则是按照 compareTo中的规则进行。这种顺序称为 自然顺序compareTo 方法的返回值有三种情况:e1.compareTo(e2) > 0 即 e1 > e2e1.compareTo(e2) = 0 即 e1 = e2e1.compareTo(e2) < 0 即 e1 < e21.由于 null 不是一个类,也不是一个对象,因此在重写 compareTo 方法时应该注意 e.compareTo(null) 的情况,即使 e.equals(null) 返回 false,compareTo 方法也应该主动抛出一个空指针异常 NullPointerException2.Comparable 实现类重写 compareTo 方法时一般要求 e1.compareTo(e2) == 0
-
Java 之 Comparable vs ComparatorComparable和Compator都是用于给集合排序的接口,但是他们之间的区别是什么呢。 Comparable: 这个接口只有一个方法compareTo。比如我们想通过年龄给用户排序,那么我们的用户要实现Comparable接口的方法,假如一旦要通过用户的评分进行排序,我们就必须要修改compareTo方法。 // o 是要比较的对象 // 返回负数,小于要比较的对象 // 返回 0 ,等于要比较的对象 // 返回正数,大于要比较的对象 public interface Comparable<T> { public int compareTo(T o); } Comparator
-
Java中Comparable和Comparator的区别吗ComparableComparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现。如果add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。compareTo方法的返回值是int,有三种情况:比较者大于被比较者,返回正整数比较者等于被比较者,返回0比较者小于被比较者,返回负整数写个很简单的例子:public class Domain implements Comparable<Domain>{ private String str; public Domain(String str) { this.str = str; } public int compareTo(Domain domain) { if
compareto相关课程
compareto相关教程
- 2.4 逆变 -<code>Comparable<in T></code> 的源码分析 在 Kotlin 中其实最简单的泛型逆变的例子就是 Comparable<in T>:public interface Comparable<in T> {//泛型逆变使用in关键字修饰 /** * Compares this object with the specified object for order. Returns zero if this object is equal * to the specified [other] object, a negative number if it's less than [other], or a positive number * if it's greater than [other]. */ public operator fun compareTo(other: T): Int//因为是逆变的,所以T在函数内部出现的位置作为compareTo函数的形参类型,可以看出它是属于消费泛型参数的}
- 4.3 类引用实例方法 类引用实例方法,比较难以理解,请查看以下实例:1227运行结果:-20Comparator接口中的compare(T t1, T t2)抽象方法,有两个参数,但是String类下的实例方法compareTo(String anotherString)只有 1 个参数,为什么这种情况下还能使用方法引用呢?这属于一个特殊情况,当函数式接口中的抽象方法有两个参数时,已实现方法的第 1 个参数作为方法调用者时,也可以使用方法引用。此时,就可以使用类来引用实例方法了(即实例中的String::compareTo)。
- 4.2 Character 类 Character 类在对象中包装一个基本类型为 char 的值。一个 Character 对象包含类型为 char 的单个字段。4.2.1 构造方法Character 类提供了一个构造方法:Character(char value):很少使用。4.2.2 常用方法char charValue():返回此 Character 对象的值;int compareTo(Character anotherCharacter):返回此 Character 对象的值,根据数字比较两个 Character 对象,若这两个对象相等则返回 0 ;boolean equals(Object obj):将调用该方法的对象与指定的对象相比较;char toUpperCase(char ch):将字符参数转换为大写;char toLowerCase(char ch):将字符参数转换为小写;String toString():返回一个表示指定 char 值的 String 对象;char charValue():返回此 Character 对象的值;boolean isUpperCase(char ch):判断指定字符是否是大写字符;boolean isLowerCase(char ch):判断指定字符是否是小写字符。更多常用方法请翻阅官方文档。
- 4.JAVA 代码实现 在说明求解背包问题的整个过程之后,接下来,我们看看如何用 java 代码实现背包问题的求解。import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Knapsack { /** * 物品内部类 */ private static class Item implements Comparable<Item>{ int type; double weight; double value; double unitValue; public Item(int type, double weight){ this.type = type; this.weight = weight; } public Item(int type, double weight,double value){ this.type = type; this.weight = weight; this.value = value; this.unitValue = value/weight; } @Override public int compareTo(Item o) { return Double.valueOf(o.unitValue).compareTo(this.unitValue); } } public static void main(String[] args){ //背包容量 double capacity = 30; //物品类型初始化数组 int[] itemType = {1,2,3,4,5}; //物品重量初始化数组 double[] itemWeight = {10,5,15,10,30}; //物品价值初始化数组 double[] itemValue = {20,30,15,25,10}; //初始化物品 List<Item> itemList = new ArrayList<>(); for(int i=0;i<itemType.length;i++){ Item item = new Item(itemType[i],itemWeight[i],itemValue[i]); itemList.add(item); } //物品按照单价降序排序 Collections.sort(itemList); //背包选择 List<Item> selectItemList = new ArrayList<>(); double selectCapacity = 0; for(Item item : itemList){ if( (selectCapacity + item.weight) <= capacity){ selectCapacity = selectCapacity + item.weight; Item selectItem = new Item(item.type,item.weight); selectItemList.add(selectItem); }else { Item selectItem = new Item(item.type, capacity-selectCapacity); selectItemList.add(selectItem); break; } } //选择结果输出 for (Item item : selectItemList){ System.out.println("选择了类型:"+ item.type+" 的物品,重量为:"+item.weight); } }}运行结果如下:选择了类型:2 的物品,重量为:5.0选择了类型:4 的物品,重量为:10.0选择了类型:1 的物品,重量为:10.0选择了类型:3 的物品,重量为:5.0代码中第 10 行至第 31 行定义了物品的一个内部类,用来存储一个物品的类型、重量、价值、单位重量的价值,并且实现在其中实现了一个对比函数。代码的第 35 至 42 行对应着开始的背包问题的初始化工作,分别初始化了背包容量、物品类型、物品重量、物品价值。代码的第 44 行至 51 行将所有物品按照物品内部类的格式加入数组,并且按照物品单位重量的价值进行降序排序。代码的第 53 行至第 66 行,按照背包问题的贪心选择方法选择对应的物品,并记录选择的物品类型及重量,放入到选择的物品列表中 ,代码的 69 行 71 行输出相关的物品选择结果。
- 3.1 collect collect 操作是根据 Stream 里面的值生成一个列表,它是一个求值操作。Tips: collect 方法通常会结合 Collectors 接口一起使用,是一个通用的强大结构,可以满足数据转换、数据分块、字符串处理等操作。我们来看一些例子:生成集合:1276输出:[a, b, c]使用 collect(Collectors.toList()) 方法从 Stream 中生成一个列表。集合转换:使用 collect 来定制集合收集元素。1277输出结果: [a, b, c, c][a, b, c]使用 toCollection 来定制集合收集元素,这样就把 List 集合转换成了 TreeSet转换成值:使用 collect 来对元素求值。1278输出: c上面我们使用 maxBy 接口让收集器生成一个值,通过方法引用调用了 String 的 compareTo 方法来比较元素的大小。同样还可以使用 minBy 来获取最小值。数据分块:比如我们对于数据 1-7 想把他们分成两组,一组大于 5 另外一组小于等于 5,我们可以这么做:1279输出结果:[6, 7][1, 2, 3, 4, 5]通过 partitioningBy 接口可以把数据分成两类,即满足条件的和不满足条件的,最后将其收集成为一个 Map 对象,其 Key 为 Boolean 类型,Value 为相应的集合元素。同样我们还可以使用 groupingBy 方法来对数据进行分组收集,这类似于 SQL 中的 group by 操作。字符串处理:collect 还可以来将元素组合成一个字符串。1280输出:[a,b,c]这里我们把 collected 数组的每个元素拼接起来,并用 [ ] 包裹。
- 4.1 Number 类 Number 类是所有数值类型包装类的父类,这里以其中一个子类 Integer 类为例,介绍其构造方法、常用方法以及常量。4.1.1 构造方法Integer 类提供两个构造方法:Integer(int value):以 int 型变量作为参数创建 Integer 对象;Integer(String s):以 String 型变量作为参数创建 Integer 对象。实例如下:// 以 int 型变量作为参数创建 Integer 对象Integer num = new Integer(3);// 以 String 型变量作为参数创建 Integer 对象Integer num = new Integer("8");4.1.2 常用方法byte byteValue():以 byte 类型返回该 Integer 的值;int compareTo(Integer anotherInteger):在数值上比较两个 Integer 对象。如果这两个值相等,则返回 0;如果调用对象的数值小于 anotherInteger 的数值,则返回负值;如果调用对象的数值大于 anotherInteger 的数值,则返回正值;boolean equals(Object obj):比较此对象与指定对象是否相等;int intValue():以 int 类型返回此 Integer 对象;int shortValue():以 short 类型返回此 Integer 对象;toString():返回一个表示该 Integer 值的 String 对象;static Integer valueOf(String str):返回保存指定的 String 值的 Integer 对 象;int parseInt(String str):返回包含在由 str 指定的字符串中的数字的等价整数值。更多常用方法请翻阅官方文档。4.1.3 常用常量MAX_VALUE: 表示 int 型可取的最大值;MIN_VALUE: 表示 int 型可取的最小值;SIZE:表示以二进制补码形式表示 int 值的位数;TYPE: 表示基本类型 Class 实例。这些常量的使用实例如下:773运行结果:int 类型可取的最大值2147483647int 类型可取的最小值-2147483648int 类型的二进制位数32
compareto相关搜索
-
c 正则表达式
c string
c 编程
c 程序设计
c 程序设计教程
c 多线程编程
c 教程
c 数组
c 委托
c 下载
c 线程
c 语言
caidan
cakephp
call
calloc
calu
camera
caption
case语句