比较器

JavaSE.20190510.TreeSet.Map.反射.

被刻印的时光 ゝ 提交于 2019-12-01 11:12:46
一.TreeSet 1.底层:红黑树 优点:升序排序,查询效率较高 引用数据类型的去重和排序:实现内部|外部比较器 内部比较器 : Comparable 接口 实现Comparable接口重写comparaTo方法,自定义比较规则 外部比较器 : Comparator 接口 重写compare方法,自定义比较器 import java.util.TreeSet; public class TreeSet10 { public static void main(String[] args) { //可以指定比较规则 TreeSet<Person> tree=new TreeSet((o1,o2)->((Person)o1).getId()-((Person)o2).getId()); tree.add(new Person(01,"呜呜",21)); tree.add(new Person(03,"聊聊",22)); tree.add(new Person(03,"瞧瞧",32)); tree.add(new Person(01,"呱呱",12)); tree.add(new Person(04,"呜呜",25)); System.out.println(tree); } } 二.Map 1.存储的数据都是key,value键值形式的 2.key可以任意数据类型 无序的 唯一的 --

TreeMap的源码学习

◇◆丶佛笑我妖孽 提交于 2019-12-01 05:36:16
TreeMap的源码学习 一)、TreeMap的特点 根据key值进行排序。 二)、按key值排序的两种排序算法实现 1).在构造方法中传入比较器 public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator; } 比较器comparator实现Comparator接口,实现compare(T o1, T o2)方法; int compare(T o1, T o2); 2).key值实现Comparable接口,重写 compareTo(key k)方法 T implements Comparable<T>{ @override public int compareTo(T k) } 注: 对于TreeMap而言,排序是一个必须进行的过程,要正常使用TreeMap必须制 定排序规则,加入Comparator或key对象实现Comparable接口,若没有制定 比较规则则会抛出java.lang.ClassCastException。 因为String对象默认实现了Comparable接口,实现了comparaTo方法,使用String类型作为key值,不用进行排序。 三)、TreeMap的数据结构 红黑树:Entry<k, v> Entry<k ,v> 对象的属性: K key; V

java常用类 比较器/system/math/big

醉酒当歌 提交于 2019-11-30 21:37:02
Java 比较器   自然排序:java.lang.Comparable   定制排序:java.util.Comparator 自然排序:java.lang.Comparable    Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称 为类的自然排序。    实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即 通过 compareTo(Object obj) 方法的返回值来比较大小。如果当前对象this大 于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回 负整数,如果当前对象this等于形参对象obj,则返回零。    实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或 Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有 序集合中的元素,无需指定比较器。    对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。建议(虽然不是必需的)最好使自然排序与 equals 一致。    Comparable 的典型实现:(默认都是从小到大排列的)  

Java常用类_Java比较器

旧巷老猫 提交于 2019-11-29 13:42:16
关于这部分知识可以在集合那块说,但在这说一下也无伤大雅,就是两个接口的不同实现。 Comparable与Comparator 1.说明: == != > < >= <= ① > < >= <= 适用于基本数据类型中的非boolean的7种 ② == != 适用于基本数据类型和引用数据类型。 2.默认情况下,引用数据类型的变量是不可以比较大小的。但是在实际开发中,我们又有这样的需求。应该如何实现呢? 实现方法一:自然排序:Comparable 实现方法二:定制排序:Comparator 3. 自然排序:Comparable ① 要求待排序的对象所属的类必须实现Comparable ② 要重写接口中的compareTo(Object obj),指明如何排序(使用对象的属性进行比较,实现排序) 4. 定制排序:Comparator ① 创建实现了Comparator接口的实现类的对象 ② 重写接口中的compare(Object o1,Object o2),指明如何排序(使用对象的属性进行比较,实现排序) 建一个Goods类实现Comparable接口并重写自然排序方法CompareTo() public class Goods implements Comparable{ private String name; private double price; public Goods()

复习下comparable和comparator

与世无争的帅哥 提交于 2019-11-28 13:49:20
package com.sinosig.epassport.application; import java.util.Collections; import java.util.Comparator; import java.util.*; import java.lang.Comparable; /** * qwp123 2019/8/25 22:10 */ public class comparableComparator { /** * @desc "Comparator"和“Comparable”的比较程序。 * (01) "Comparable" * 它是一个排序接口,只包含一个函数compareTo()。 * 一个类实现了Comparable接口,就意味着“该类本身支持排序”,它可以直接通过Arrays.sort() 或 Collections.sort()进行排序。 * (02) "Comparator" * 它是一个比较器接口,包括两个函数:compare() 和 equals()。 * 一个类实现了Comparator接口,那么它就是一个“比较器”。其它的类,可以根据该比较器去排序。 * <p> * 综上所述:Comparable是内部比较器,而Comparator是外部比较器。 * 一个类本身实现了Comparable比较器,就意味着它本身支持排序

比较器排序Coamparator

情到浓时终转凉″ 提交于 2019-11-28 13:34:43
参数为一个匿名内部类 代码如下: package com.Test01;import java.util.Comparator;import java.util.TreeSet;public class TreeSetDemo { public static void main(String[] args) { TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { int num = s1.getAge()-s2.getAge(); int num2 = (num == 0 ? s1.getName().compareTo(s2.getName()):num); return num2; } }); Student s1 = new Student("xishi", 29); Student s2 = new Student("diaochan", 29); Student s3 = new Student("yangyuhuan", 21); Student s4 = new Student("wangzhaojun", 26); ts.add(s1); ts.add(s2); ts

10比较器常用类

余生长醉 提交于 2019-11-28 03:24:06
Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较逻辑。可以把Comparable理解为内部比较器,而Comparator是外部比较器,基本的写法如下: class Apple implements Comparable<Apple>{ int id; double price; public Apple(int id, double price) { this.id = id; this.price = price; } public int compareTo(Apple o) { //return Double.compare(this.getPrice(),o.getPrice()); if (Math.abs(this.price-o.price)<0.001) return 0; else return (o.price-this.price)>0?1:-1; } @Override public String toString() { return "Apple{" + "id=" + id + ", price=" + price + '}'; } } class AESComparator implements

什么是施密特触发器(Schmitt Trigger)?

筅森魡賤 提交于 2019-11-28 02:37:57
http://hi.baidu.com/hieda/blog/item/c996d9cc5d1a8c1400e92877.html 施密特触发器( Schmitt Trigger ),简单的说就是 具有滞后特性的数字传输门 。 (一)施密特触发器结构举例 (二)施密特触发器具体分析 (三)施密特触发器电路用途 (四)施密特触发器 相关部分总结 (五)附:用555定时器构成施密特触发器 用555定时器构成多谐振荡器 Sometimes an input signal to a digital circuit doesn't directly fit the description of a digital signal. For various reasons it may have slow rise and/or fall times, or may have acquired some noise that could be sensed by further circuitry. It may even be an analog signal whose frequency we want to measure. All of these conditions, and many others, require a specialized circuit that will

java比较器

本秂侑毒 提交于 2019-11-28 01:05:58
一.比较器的概念 --所谓的比较器指的就是进行大小关系的确定判断,比较器存在的意义: 如果要进行数组的操作,肯定使用java.util.Arrays的操作类来完成,这个类里面提供有绝大部分的数组操作支持,同时在这个类里面还提供有对象数组的排序支持: static void sort(Object[] a) 对指定对象升序排列的阵列,根据natural ordering的元素。 1 public class MyComparator { 2 public static void main(String[] args) { 3 Integer[] data = new Integer[]{ 4 10, 9, 5, 2, 20 5 }; 6 Arrays.sort(data); //进行对象数组的排序输出 7 System.out.println(Arrays.toString(data)); 8 } 9 } --运行结果 [2, 5, 9, 10, 20] Process finished with exit code 0 --同样,如果是一个String类型的对象数组,也是可以进行排序输出的: 1 public class MyComparator { 2 public static void main(String[] args) { 3 String[] data = new

容器

冷暖自知 提交于 2019-11-27 22:07:55
容器 文章目录 容器 一、Collection接口 Set接口 1.TreeSet 2.HashSet 二、List接口 1.ArrayList 2.Vector 3.LinkedList 三、比较器 自然排序/内部比较器 自定义排序/外部比较器 四、Map HashMap TreeMap Properties 五、Collections   容器与数组的概念比较类似,数组用于存储多个数据,特点有定长,长度一旦确定不可改变;数据类型要一致;数组是有序的,有索引。   自定义容器类:只能存储字符串类型的数据,容器的大小可以随着数据的多少动态的改变。 public class AppDemo01 { public static void main ( String [ ] args ) { Container c = new Container ( ) ; //添加功能 c . add ( "蜡笔小新" ) ; c . add ( "柯南" ) ; c . add ( "海贼王" ) ; System . out . println ( c . size ( ) ) ; //获取方法 System . out . println ( c . get ( 0 ) ) ; ; System . out . println ( c . get ( 1 ) ) ; ; System . out