值相等,但不是同个对象(指向不同的地址空间) new String("test") == "test" // --> false // ......HashMap map = new HashMap(); ValueComparator bvc = new ValueComparator...(map); TreeMap sorted_map = new TreeMap(bvc); map.put...这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。...TreeMap指定顺序:TreeMap有一个构造函数,参数是一个比较器,利用这个构造函数,我们可以传入我们自己写的比较器,按照我们想要的顺序进行排序。
Map 四种遍历: 1 Map map = new HashMap(); 2 map.put("one","java"); 3 map.put...第四种:使用entrySet遍历 1 for(Map.Entry entry:map.entrySet()){ 2 System.out.println(...MapKeyComparator()); 31 32 sortMap.putAll(map); 33 34 return sortMap; 35 } 36 } 37 38 39 比较器类...按 value 排序: 1 //如果在Treemap里面想按照value进行排序,我们必须借助工具类Collections.sort(List,Comparator); 2...TreeMap map2 = new TreeMap(); 3 map2.put("a","a"); 4
在实际工作中 尽量不要修改源码 使用Comparator比较器 比较个性的东西 区别: TreeSet构造函数未传入比较器,默认按照类中的Comparable比较 如果不写 就报错 TreeSet...传入Comparator比较器 就优先按照Comparator比较 遍历集合的时候 List: 普通for循环 使用get()获取元素 调用 iterator() hasNext() next()...获取元素 增强for循环 只要可以使用Iterator 的类都可以使用 Vector 集合用的是 Enumeration Set: 调用 iterator() 增强 for 普通for循环 迭代器...type; private double neicun; private double gutai; private double sum; public String...() { Sort1 sor = new Sort1();//实例化实现了Comparator比较器的类 ArrayList list = new ArrayList(
一、前言 在前面两篇随笔中,我们提到过,当HashMap的桶过大的时候,会自动将链表转化成红黑树结构,当时一笔带过,因为我们将留在本章中,针对TreeMap进行详细的了解。...可以看到,除了在之前HashMap里常见的继承类和接口以外,TreeMap实现了NavigableMap接口,而NavigableMap继承自SortedMap,由名字可以看出,只是一个用来实现排序的接口...我们熟悉的很多对象如String,Integer,Double等都实现了这个接口。...Item的name属性,然后通过Collections.sort对它进行了排序(值得注意的是:没有实现Comparable接口的对象不能使用该方法)。...- b.price); System.out.println(items); //使用上面的thenComparing items.sort(Comparator.comparing(Item
TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。...二、Map排序 TreeMap TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。...对value排序我们就需要借助于Collections的sort(List list, Comparator c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。...但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。...,String>> list = new ArrayList>(map.entrySet()); //然后通过比较器来实现排序
TreeMap 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。...key和value均允许为空,非同步的 map的排序 TreeMap的排序 TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。...对value排序我们就需要 借助于Collections的sort(List list, Comparator super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。...但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。...对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序,我们一样的也可以实现HashMap的排序。
; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器; LinkedHashMap: 此实现与 HashMap 的不同之处在于...对于既不是float也不是double类型的基本类型的域,可以使用==操作符 进行比较;对于对象引用类型的域,可以递归地调用所引用的对象的equals方法,对于float和double类型的域,先转换成...TreeMap则是对Map中的元素进行排序。 因为HashMap和LinkedHashMap 存储数据的速度比直接使用TreeMap 要快,存取效率要高。...,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。...HashMap与TreeMap联系与区别 1、 HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap
使用EntrySet -> 迭代器 Set entrySet = hashMap.entrySet(); System.out.println("======迭代器===...使用TreeSet 提供的一个构造器,可以传入一个比较器(匿名内部类)并指定排序规则 //4. 简单看看源码 /* 1....构造器把传入的比较器对象,赋给了 TreeSet的底层的 TreeMap 的属性 this.comparator public TreeMap(Comparator<?...{"all"}) public class TreeMap_ { public static void main(String[] args) { //使用默认的构造器,创建TreeMap...for和 迭代器来遍历所有的car , 需要重写 Car 的toString方法 */ class Car { private String name; private double
迭代器的遍历速度要比增强for循环快很多,是增强for循环的2倍左右。 使用entrySet遍历的速度要比keySet快很多,是keySet的1.5倍左右。 Map排序 1...., String>> list = new ArrayList>(map.entrySet()); //通过比较器实现比较排序...TreeMap排序 TreeMap排序: Map map = new TreeMap(new Comparator()...= new ArrayList>(map.entrySet()); // 通过比较器实现比较排序 Collections.sort...您需要做的就是创建一个TreeMap对象,并将数据从HashMapput到TreeMap中,非常简单: // 将 `HashMap` 转为 `TreeMap` Map
循环遍历 迭代器遍历 HashMap四种便利方式性能比较 4Map 排序 HashMap、Hashtable、LinkedHashMap排序 TreeMap排序 按value排序(通用) 5常用API...TreeMap 能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。...4Map 排序 HashMap、Hashtable、LinkedHashMap排序 注: TreeMap也可以使用此方法进行排序,但是更推荐下面的方法。...>(map.entrySet()); // 通过比较器实现比较排序 Collections.sort(list, new Comparator<Map.Entry...TreeMap排序 TreeMap默认按key进行升序排序,如果想改变默认的顺序,可以使用比较器: Map map = new TreeMap<String, String
,再将重要的 TreeMap 转换成 HashMap—— 使用 HashMap(Map)构建器。...针对 Object 数组(以及 String,它当然属于 Object 的一种),可使用一个 sort(),并令其接纳另一个参数:实现了 Comparator 接口(即“比较器”接口,新集合库的一部分)...将两个字串都强迫换成小写形式后, String.compareTo()方法会产生预期的结果若用自己的 Comparator 来进行一次 sort(),那么在使用 binarySearch()时必须使用那个相同的...(List,Object)用于查找列表中的某个对象; sort(List,Comparator)利用一个“比较器”对一个列表进行排序;而binarySearch(List,Object,Comparator...TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
HashMap 排序 HashMap 的值是没有顺序的,它是按照 key 的 HashCode 来实现的,对于这个无序的 HashMap 我们要怎么来实现排序呢?...Comparator 可以对集合对象或者数组进行排序的比较器接口。...Map map = new TreeMap(Comparator.naturalOrder()); map.put("b", "bbb"); map.put("d",...super T> c) 方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。...HashMap countMap = new HashMap(); // 升序比较器 Comparator>
next() 读取输入的下一个单词(以空格作为间隔) int nextInt()double nextDouble() 读取并转换下一个表示整数或浮点数的字符序列 for each循环 for(variable...在自定义类中应覆盖这个方法 boolean equals(Object otherObject) 比较两个对象是否相等。...在实例化TreeSet时,我们可以给TreeSet指定一个比较器Comparator来指定树形集中的元素顺序。树形集中提供了很多便捷的方法。...java.util.TreeHashMap TreeMap基于红黑树数据结构的实现,键值可以使用Comparable或Comparator接口来排序。...在实际使用中,如果更新图时不需要保持图中元素的顺序,就使用HashMap,如果需要保持图中元素的插入顺序或者访问顺序,就使用LinkedHashMap,如果需要使图按照键值排序,就使用TreeMap。
如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。...TreeMap TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。...如果使用排序的映射,建议使用TreeMap。...在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常...Hashtable不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换。
一是使用Collections或 Arrays的 sort()方法 ,另一种是使用数据结构排序,如 TreeMap和 TreeSet。 ?...网络配图 1、使用sort()方法进行排序,这也比较常的方法: 如果我们写代码时,用的是一个集合,那么使用Collections.sort()方法。...()); }}); 如果代码实现中用的是一个数组,那么使用 Arrays.sort()方法。...// TreeMap方法 Map unsortedMap = new TreeMap(); Map...double t; double[] r = new double[5]; for (int i = 0; i < 2; i++) for (int j = i + 1; j < 3; j++) if
的底层实现是数组,LinkedList 的实现是双向链表,此外 LinkedList 还实现了 Queue 队列(也在 Collection 下的接口),Vector 就是 ArrayList 的线程安全版本,但不推荐使用...和 String 对象都可以进行默认的 TreeSet 排序,而自定义类的对象是不可以的,自己定义的类必须实现 Comparable 接口,并且覆写相应的 compareTo() 函数,才可以正常使用...3、TreeMap(可排序) TreeMap 实现 SortedMap 接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用 Iterator 遍历 TreeMap...如果使用排序的映射,建议使用 TreeMap。...在使用 TreeMap 时,key 必须实现 Comparable 接口或者在构造 TreeMap 传入自定义的 Comparator,否则会在运行时抛 java.lang.ClassCastException
程序的入口 public static void main(String[] args) { Map map = new TreeMap();...System.out.println(map.size()); System.out.println(map); }}2、key的类型是一个自定义的引用数据类型2.1、内部比较器...void setName(String name) { this.name = name; } public double getHeight() { return...(int age, String name, double height) { this.age = age; this.name = name; this.height...return this.getAge()-o.getAge();*/ return this.getName().compareTo(o.getName()); }}2.2、外部比较器
因此,Collections.sort方法底层就是调用的Array.sort方法 Arrays.sort底层实现 Arrays的sort方法,如下: ? 如果比较器为null,进入sort(a)方法。...如果在调用TreeMap的构造函数时没有指定比较器,则根据key执行自然排序。 ? 10....super T>> void sort(List list) { list.sort(null); } 17. 如何决定使用 HashMap 还是TreeMap?...这个点,主要考察HashMap和TreeMap的区别。 TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按key的升序排序,也可以指定排序的比较器。...(TreeMap默认是key升序,LinkedHashmap默认是数据插入顺序) TreeMap是基于比较器Comparator来实现有序的。
(4)使用迭代器迭代输出该List集合 (5)写一个方法,可以去除ArrayList集合中重复的Person对象。...* (4)使用迭代器迭代输出该List集合 * (5)写一个方法,可以去除ArrayList集合中重复的Person对象。...3.2 TreeSet的实现原理 3.2.1 TreeSet在API层面 在构造器层面创建一个TreeMap实例 public TreeSet() { this(new TreeMap<E,Object...Comparator比较器 * value String * @param args */ public static void main(String[]...* 通过分析我们发现使用TreeMap解决这个问题会比较合适 * @param args */ public static void main(String
领取专属 10元无门槛券
手把手带您无忧上云