treemap

TreeMap和TreeSet在排序时如何比较元素?

青春壹個敷衍的年華 提交于 2019-12-05 08:37:47
TreeSet 要求存放的对象所属的类必须实现 Comparable 接口,该接口提供了比较元素的 compareTo() 方法,当插入元素时会回调该方法比较元素的大小 TreeMap 要求存放的键值对映射的键必须实现 Comparable 接口从而根据键对元素进行排序 Java 自学指南 Java 面试题汇总PC端浏览【点这里】 Java知识图谱 Java 面试题汇总小程序浏览,扫二维码 所有资源 资源汇总于公众号 来源: https://my.oschina.net/ConstXiong/blog/3132861

In Java, sort hash map by its key.length()

◇◆丶佛笑我妖孽 提交于 2019-12-05 07:13:27
i have a hashmap like this: HashMap<String,Integer> map = new HashMap<String,Integer>(); map.put("java",4); map.put("go",2); map.put("objective-c",11); map.put("c#",2); now i want to sort this map by its key length, if two keys length are equal (e.g go and c# both length 2), then sorted by alphba order. so the outcome i expect to get is something like: printed result: objective-c, 11 java, 4 c#, 2 go, 2 here is my own attamp, but it doesnt work at all... HashMap<String,Integer> map = new HashMap<String,Integer>(); map.put("java",4); map.put("go",2); map.put("objective-c",11); map.put("c#",2);

While sorting the map based on value, some values are missing. What causes this weird behaviour?

。_饼干妹妹 提交于 2019-12-05 06:54:54
I am trying to sort a map based on word frequency (i.e., based on value). For that I have overridden comparator and passed to TreeMap , but I am getting this weird output. public class WordFrequency { public static String sentence = "one three two two three three four four four"; public static Map<String, Integer> map; public static void main(String[] args) { map = new HashMap<>(); String[] words = sentence.split("\\s"); for (String word : words) { Integer count = map.get(word); if (count == null) { count = 1; } else { ++count; } map.put(word, count); } Comparator<String> myComparator = new

Java中数组、集合、链表、队列的数据结构和优缺点和他们之间的区别

一曲冷凌霜 提交于 2019-12-05 05:10:04
Java中数组、集合、链表、队列的数据结构和优缺点和他们之间的区别 集合与数组的区别 个人分类: Java基础 相同点:数组和集合类同是容器。 不同点 :1.数组的长度是固定的,集合的长度是可变的。 2.数组只能存储同类型的对象,集合可以存储不同类型的对象。 3.集合只能存储对象不能存储基本类型 数组: .长度固定 .可以存储基本类型,也可以存储引用类型 .存储元素类型一致 数组可以在内存中连续存储多个元素的构造,在内存中的分配也是连续的 数组中的元素通过数组的下标进行访问的,下标从0开始的 优点 : 按照索引查询元素速度快 按照索引遍历数组方便 缺点: 数组的大小固定后就不能扩容了 数组只能存储一种类型的数据 添加,删除的操作慢,因为要移动其他的元素 适用场景: 频繁查询,对存储空间要求不大,很少增加和删除的情况 集合: 特点 长度可变 只可以存储引用类型 可以存储多种类型 List:有序、可以有重复的集合 List 接口的三个典型实现: ①、List list1 = new ArrayList();     底层数据结构是数组,查询快,增删慢;线程不安全,效率高 ②、List list2 = new Vector();     底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合 ③、List list3 = new LinkedList();    

sorting treemap based on key, where key is variable

有些话、适合烂在心里 提交于 2019-12-05 03:36:23
I want to sort the tree map based on the key where key is a variable,so sorting should be based on variable value, How can we achieve this? I want use in built sort method rathar implementing it through code, any reply with example is of great help. pmnt TreeMap (which implements SortedMap ) stores automatically the keys in the correct order: Map<Integer, String> map = new TreeMap<Integer, String>(); map.put(1, "one"); map.put(3, "three"); map.put(2, "two"); // prints one two three for(Integer key : map.keySet()) { System.out.println(map.get(key)); } As Key-Type (in that case Integer ) you can

Comparator<String> must override super class method

本秂侑毒 提交于 2019-12-05 02:03:43
I'm making a TreeMap<String, String> and want to order it in a descending fashion. I created the following comparator: Comparator<String> descender = new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }; I construct the TreeMap like so: myMap = new TreeMap<String, String>(descender); However, I'm getting the following error: The method compare(String, String) of type new Comparator<String>(){} must override a superclass method I've never fully groked generics, what am I doing wrong? Your Eclipse project is apparently set to Java 1.5. The

java基础:==和equals方法区别

自作多情 提交于 2019-12-04 22:56:59
equals()和“==”操作用于对象的比较,检查俩对象的相等性,但是他们俩的主要区别在于前者是方法后者是操作符。由于java不支持操作符重载(overloading),“==”的行为对于每个对象来说与equals()是完全相同的,但是equals()可以基于业务规则的不同而重写(overridden )。另一个需要注意的不同点是“==”习惯用于原生(primitive)类型之间的比较,而equals()仅用于对象之间的比较。同时初学者奋力地想找到什么时候使用等号操作“==”,什么时候使用equals方法。这篇教程中你将将看到equals()方法和“==”操作是如果工作的、他们之间有什么不同、什么时候用“==”、什么时候使用equals()方法。 “==”等号操作是什么 “==”或等号操作在Java编程语言中是一个二元操作符,用于比较原生类型和对象。就原生类型如boolean、int、float来说,使用“==”来比较两者,这个很好掌握。但是在比较对象的时候,就会与equals()造成困惑。“==”对比两个对象基于内存引用,如果两个对象的引用完全相同(指向同一个对象)时,“==”操作将返回true,否则返回false。 什么是equals方法 equals()方法定义在Object类里面,根据具体的业务逻辑来定义该方法,用于检查两个对象的相等性。例如

Aho-Corasick算法的Java实现与分析

一世执手 提交于 2019-12-04 18:28:11
简介 Aho-Corasick算法简称AC算法,通过将模式串预处理为确定有限状态自动机,扫描文本一遍就能结束。其复杂度为O(n),即与模式串的数量和长度无关。 思想 自动机按照文本字符顺序,接受字符,并发生状态转移。这些状态缓存了“按照字符转移成功(但不是模式串的结尾)”、“按照字符转移成功(是模式串的结尾)”、“按照字符转移失败”三种情况下的跳转与输出情况,因而降低了复杂度。 基本构造 AC算法中有三个核心函数,分别是: success; 成功转移到另一个状态(也称goto表或success表) failure; 不可顺着字符串跳转的话,则跳转到一个特定的节点(也称failure表),从根节点到这个特定的节点的路径恰好是失败前的文本的一部分。 emits; 命中一个模式串(也称output表) 举例 以经典的ushers为例,模式串是he/ she/ his /hers,文本为“ushers”。构建的自动机如图: 其实上图省略了到根节点的fail边,完整的自动机如下图: 匹配过程 自动机从根节点0出发 首先尝试按success表转移(图中实线)。按照文本的指示转移,也就是接收一个u。此时success表中并没有相应路线,转移失败。 失败了则按照failure表回去(图中虚线)。按照文本指示,这次接收一个s,转移到状态3。 成功了继续按success表转移,直到失败跳转步骤2

编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议67~82)

妖精的绣舞 提交于 2019-12-04 16:45:42
有些东西,当你即将失去了的时候,你才懂得它的弥足珍贵,也许亡羊补牢,为时未晚! 建议67:不同的列表选择不同的遍历算法 建议68:频繁插入和删除时使用LinkedList 建议69:列表相等只关心元素数据 建议70:子列表只是原列表的一个视图 建议71:推荐使用subList处理局部列表 建议72:生成子列表后不要再操作原列表 建议73:使用Comparator进行排序 建议74:不推荐使用binarySearch对列表进行检索 建议75:集合中的元素必须做到compareTo和equals同步 建议76:集合运算的并集、交集、差集 建议77:使用shuffle打乱列表 建议78:减少hashmap中元素的数量 建议79:集合中哈希码不要重复 建议80:多线程使用Vector或HashTable 建议81:非稳定排序推荐使用List 建议82:由点及面,集合大家族总结 建议67:不同的列表选择不同的遍历算法 测试来看简单for循环比foreach能快那么一丢丢。 建议68:频繁插入和删除时使用LinkedList ArrayList在进行插入元素时: public void add(int index, E element) { //检查下标是否越界 rangeCheckForAdd(index); //若需要扩容,则增大底层数组的长度 ensureCapacityInternal

HashMap、LinkedHashMap和TreeMap区别

泪湿孤枕 提交于 2019-12-04 15:34:53
LinkHashMap是基于HashMap和双向链表来实现的。 HashMap无序,LinkedHashMap有序,可分为插入顺序和访问顺序两种。如果是访问顺序,那put和get操作已存在的Entry时,都会把Entry移动到双向链表的表尾。 如果还需要保证统计性能或者需要对Key按照一定规则进行排序,那么使用treemap是一种更好的选择。 TreeMap为增、删、改、查这些操作提供了log(N)的时间复杂度, 从存储角度而言,这比HashMap与LinkedHashMap的o(1)时间复杂度要差些; 从统计性能上,TreeMap同时可以保证log(N)的时间开销,这又比HashMap和LinkedHashMap的o(N)时间复杂度好不少。 来源: oschina 链接: https://my.oschina.net/u/4045381/blog/3136828