比较器

comparator比较器的使用。

匿名 (未验证) 提交于 2019-12-03 00:22:01
package Comparator; public class Student { /*** * 1 今天方法在内存中只有一个,也就是说,当你new出一个对象的时候,给这个静态 * * * */ public int age; public String name; public Student(int age,String name) { this.age=age; this.name=name; } public String toString() { return age+"-----"+name; } public static int getAge() { return age; } public static void setAge(int age) { Student.age = age; } public static String getName() { return name; } public static void setName(String name) { Student.name = name; } } import java.util.Comparator; import java.util.Set; import java.util.TreeSet; public class Sort1 implements Comparator { 文章来源:

如何决定使用 HashMap 还是 TreeMap?

匿名 (未验证) 提交于 2019-12-03 00:14:01
问: 如何决定使用 HashMap 还是 TreeMap? 介绍 TreeMap<K,V> 的Key值是要求实现 java.lang.Comparable ,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。 HashMap<K,V> 的Key值实现散列 hashCode() ,分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。 结论 如果你需要得到一个有序的结果时就应该使用TreeMap(因为HashMap中元素的排列顺序是不固定的)。除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。 拓展 1、HashMap 和 TreeMap 的实现 HashMap: 基于哈希表实现。使用HashMap要求添加的键类明确定义了 hashCode() 和 equals() [可以重写 hashCode() 和 equals() ],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。 HashMap(): 构建一个空的哈希映像 HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射 HashMap(int initialCapacity):

比较器

匿名 (未验证) 提交于 2019-12-02 23:43:01
package com.cisco.www.sort;import java.util.Arrays;import java.util.PriorityQueue;import java.util.TreeMap;import java.util.TreeSet;/** * 比较器:负数第一个参数放前面,正数第二个参数放前面,相等则二者是相等的 */public class Comparator { public static class Student{ public String name; public int id; public int age; public Student(String name, int id, int age) { this.name = name; this.id = id; this.age = age; } } public static class IdAscendingComparator implements java.util.Comparator<Student>{ @Override public int compare(Student o1, Student o2) { //返回负数,则前面的值更小(按照升序),否则后面的值小(按照降序)。 return o1.id-o2.id; } } //比较器:负数第一个参数放前面

List排序方法

匿名 (未验证) 提交于 2019-12-02 22:10:10
可用使用Collections.sort(List<T> list)和Collections.sort(List<T> list, Comparator<? super T> c)两个排序方法,实际上这种方法排序都需要比较器。 前一个方法是根据内部比较器排序,即List中的元素必须实现Comparable接口,此接口有个compareTo方法用来比较两个对象的某个属性值。 后一个方法是根据Comparator接口实现类的外部比较器进行排序,Comparator接口有个compare方法用于比较两个对象的某个属性值。 比较结果都是返回int类型,只有3个值,分别是“-1”按升序排、“0”不动、“1”按降序排 Java8后List对象本身有sort()方法进行排序,实际上也是使用上述实现原理,不过它使用java8的拉姆达表达式lambda,代码写起来更简洁。 文章来源: List排序方法

java.lang.Comparable 和 java.util.Comparator的区别

匿名 (未验证) 提交于 2019-12-02 21:53:52
一,概述 Comparable和Comparator都是用来实现集合中元素的比较,排序的。 可比较的是在集合内部定义的方法实现的排序,位于java.lang下 。Comparator是在集合外部实现的排序,位于java。 UTIL下, 可比是一个对象本身就已经支持自比较所需要实现的接口 ,如字符串,整数自己就实现了媲美接口,可完成比较大小操作。自定义类要在加入列表容器中后能够排序,也可以实现Comparable接口,在用集合类的排序方法排序时若不指定Comparator,那就以自然顺序排序。所谓自然顺序就是实现Comparable接口设置的排序方式。Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足要求时,可写一个比较器来完成两个对象之间大小的比较.Comparator体现了一种策略模式(策略设计模式),就是不改变对象自身,而用一个策略对象(策略对象)来改变 的行为。 总而言之可比是自已完成比较,比较器是外部程序实现比较。 二,例子 ①Comparator的绝对值比较器 公共类AbsComparator <T>实现比较器<T> { public int compare(Object o1,Object o2) { int ovalue1 = Math.abs(((Integer)o1).intValue()); int ovalue2 =

比较接口(Comparable ,Comparator)及流的聚合操作

こ雲淡風輕ζ 提交于 2019-12-02 07:55:51
Comparable 及 Comparator 的区别 Comparable 一个内比较器,类可以和自己比较 compareTo() 自然比较方法 public interface Comparable<T>{ public int compareTo(T o); } public class Book implements Comparable<Book>{ String name; int price; public Book(String name,int price){ super(); this.name=name; this.price=price; } public int getPrice(){ return price; } @override public int CompareTo(Book b){ return this.price - b.getPrice(); } } 一个对象Collections,Arrays想自己调用sort进行自动排序,对象必须实现Comparable接口 Comparator 比较器 类本身不支持排序(没有实现comparable接口) 可建立一个类比较器来进行排序 public interface Comparator<T>{ // 这个函数必须实现 int compare(T o1,T o2); // 这个函数可以不用实现

Java中Comparable和Comparator

耗尽温柔 提交于 2019-12-02 03:11:00
转 https://www.cnblogs.com/shamo89/p/9617528.html Comparable Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。该接口定义如下: package java.lang; import java.util.*; public interface Comparable<T> { public int compareTo(T o); }  T表示可以与此对象进行比较的那些对象的类型。   此接口只有一个方法compare,比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。   现在我们假设一个Person类,代码如下: 。。 现在有两个Person类的对象,我们如何来比较二者的大小呢?我们可以通过让Person实现Comparable接口: public class Person implements Comparable<Person> { String name; int age; public Person(String name,

JAVASE学习笔记第17天

自作多情 提交于 2019-12-01 18:32:45
集合(Collections---sort) 1、在集合中我们知道List是无无法对元素进行排序的,所以在集合框架中就有了Collections这个类。 2、Collections中的方法都是静态的,没有构造方法 3、Collections中提供了srot的两个用于比较的方法,注意不能对Set集合进行排序。 4、总结: 一般只要涉及到了对象的排序都要涉及到两个接口:一个是Comparable,一个是Comarator 5、示例: /** Collections的两种排序方法: 1.根据元素的自然顺序对指定的列表进行排序 public static <T extends Comparable<? superT>> void sort(List<T> list) 说明:传进来的集合中元素的类型不确定,但是这个元素的类型一定是Comparable的 子类,使得元素自身就具备比较性,Comparable中传进来的元素的类型也不确定(Student) 2、根据指定的比较器进行排序 public static<T> voidsort(List<T> list,Comparator<? super T> c); */ import java.util.*; //自定义比较器,根据字符串的长度排序 class StrLenComparator implements Comparator

Comparator排序方式

醉酒当歌 提交于 2019-12-01 11:14:02
TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。(理解:当元素自身没有带上比较的功能,那就让包裹它们的集合有比较性。给集合带有比较的功能)。在集合初始化时,就有了比较方式(这样就需要参与到构造方法中了)。 当两种排序都存在时,以比较器为主 定义一个类,实现Comparator 接口,覆盖compare方法 比较器,实现Comparator接口 来源: CSDN 作者: 广小白 链接: https://blog.csdn.net/weixin_42217767/article/details/94001215

区别HashSet、TreeSet、HashMap、TreeMap

蓝咒 提交于 2019-12-01 11:12:57
1.首先HashSet和TreeSet都是set的实现类 : 而set中元素是无序、不重复的、所以他们两个只是对set进行了进一步的封装、实现了各自的功能 其中HashSet和TreeSet的区别就是:后者可以排序 、因为TreeSet底层是二叉树、通过传入比较器,可以自定义排序。但需要自定义比较器(通过实现 implements Comparable接口重写compareTo() 方法或则在实例化对象的时候传入一个比较器 ( 实现comparator接口的compare方法 )两种方式实现的接口不同,主要就是参数个数不同),二者判断元素唯一性都是通过hashcode()和equals()方法来判断的,我们在自定对象的时候,往往通过重写这两个方法来进行自己的业务逻辑判断。 2.HashMap和TreeMap都是set的实现类:map是存的键值对map<key,value> 其中key必须是唯一 HashMap和TreeMap:两则都是存的键值对、后者可以自定义排序,自定义对象、也需要传入比较器,根据键值来排序、两者都线程不安全、前者可存Null值 以上2点:所谓的顺序指定的是存取顺序:设计都tree都可以排序(底层是二叉树)但自定义的对象需要实现自己的排序方式(自己的理解) 示例:根据学生的年龄排序 存入treeSet中(mapy也差不多,只不过存的是键值对) 方式1