Tag: 数据结构

表像java数据结构

我需要实现一些类似于表的数据结构,在Java中存储这样的信息: +——–+——-+—–+ | sij | i | j | +——–+——-+—–+ | 45 | 5 | 7 | +——–+——-+—–+ | 33 | 1 | 6 | +——–+——-+—–+ | 31 | 0 | 9 | +——–+——-+—–+ | 12 | 8 | 2 | +——–+——-+—–+ 我必须能够通过sij参数对表进行排序。 我已经使用ArrayList和HashMap进行了一些测试,但我不能让它们运行良好。

在Java中按值映射自动排序

我需要在Java中有一个自动按值排序的映射 – 以便在我添加新的键值对或更新现有键值对的值时随时对其进行排序,甚至删除一些条目。 还请记住,这张地图将会非常大(数百万,甚至是数百万条目的大小)。 所以基本上我正在寻找以下function: 假设我们有一个实现上述function的“SortedByValuesMap”类,我们有以下代码: SortedByValuesMap sorted_map = new SortedByValuesMap(); sorted_map.put(“apples”, 4); sorted_map.put(“oranges”, 2); sorted_map.put(“bananas”, 1); sorted_map.put(“lemons”, 3); sorted_map.put(“bananas”, 6); for (String key : sorted_map.keySet()) { System.out.println(key + “:” + sorted_map.get(key)); } 输出应该是: bananas:6 apples:4 lemons:3 oranges:2 特别是,对我来说真正重要的是能够随时获得具有最低值的条目 – 使用如下命令: smallestItem = sorted_map.lastEntry(); 哪个应该给我’橘子’条目 编辑:我是一个Java新手所以请详细说明你的答案 – 谢谢 EDIT2:这可能会有所帮助:我正在使用它来计算大文本文件中的单词(对于那些熟悉的人:特别是n-gram)。 所以我需要建立一个地图,其中键是单词,值是这些单词的频率。 但是,由于限制(如RAM),我想只保留X最常用的单词 – 但事先你不能知道哪些是最常用的单词。 因此,我认为它可能起作用的方式(作为近似)是开始计算单词,当地图达到上限(如1 mil条目)时,将删除最不频繁的条目,以便将地图的大小保持为总是1密耳。

如何防止将重复对象添加到ArrayList

可能重复: 防止arraylist中的重复条目 我有一个特定class级C的arraylist。 List myList = new ArrayList(); C类有两个属性即。 String str1; String str2; 现在,当我将类型C的对象添加到ArrayList myList时,我想检查列表中是否已存在一个对象,其中str1和str2的值与对象的参数(str1和str2)的值相匹配我即将补充。 是否有任何有效的方法来做到这一点,而不必每次遍历完整列表并检查参数之间的匹配?

示例定向图和拓扑排序代码

任何人都知道我在哪里可以获得有向图的示例实现和用于在有向图上执行拓扑排序的示例代码? (最好是Java)

Java中的LRU缓存,具有generics和O(1)操作

这是一个在求职面试中出现的问题。 我们的想法是定义一个数据结构,而不是使用Java内置的LinkedHashMap。 LRU高速缓存删除最近最少使用的条目以插入新条目。 因此,给出以下场景: A – B – C – D – E 如果A是最近最少使用的项目,如果我们要插入F,我们需要删除A. 如果我们通过(键,值)保存带有缓存条目的HashMap和包含元素的键和使用时间的单独列表,则可以很容易地实现这一点。 但是,我们需要查询列表以找到最近最少使用的项目,具有潜在的O(n)时间复杂度。 如何在Java中为通用对象和O(1)操作实现此结构? 这与可能的重复不同,因为它侧重于效率(O(1)ops)和实现数据结构本身,而不是扩展Java。

Java ArrayList的时间复杂度

我发现这个问题的其他条目涉及特定方法,但没有全面的。 我想validation自己对这种数据结构中最常用的方法的理解: O(1) – 恒定时间: isEmpty() add(x) add(x, i) set(x, i) size() get(i) remove(i) O(N) – 线性时间: indexof(x) clear() remove(x) remove(i) 它是否正确? 谢谢你的帮助。

Java:避免在arraylist中插入副本

我是java的新手。 我有一个ArrayList ,我想避免重复插入。 我的ArrayList是 ArrayList karList = new ArrayList(); 我要检查的字段是: kar.getinsertkar(). 我已经读过我可以使用HashSet或HashMap但我不知道。

为什么hashCode()为Java中的不同对象返回相同的值?

从我正在阅读Head First Java的书中引用: 关键是,哈希码可以是相同的,而不必保证对象是相等的,因为hashCode()方法中使用的“哈希算法”可能会为多个对象返回相同的值。 为什么hashCode()方法可能为不同的对象返回相同的值? 这不会导致问题吗?

如何在方法调用之前将PriorityQueue恢复到其初始状态?

我正在做练习问题练习IT Kth Smallest 这个问题基本上是你在PriorityQueue和某个k中传递的,你将返回该PriorityQueue中的第k个最小值。 您还要将PriorityQueue还原到其初始状态,并可以使用一个堆栈或队列作为辅助数据结构。 我的更高级别的伪思想是因为PriorityQueue已经充当了一个最小堆,从Java PriorityQueue ,我真正需要做的就是(我的算法): 从PriorityQueue中删除k个元素 将第k个最小值存储为局部变量 将删除的k元素推送到堆栈(堆栈,以便我可以按相同的顺序添加元素) 弹出堆栈中的所有元素,然后将它们重新添加回PriorityQueue 返回第k个最小值 以下是执行所有操作的代码: public int kthSmallest(PriorityQueue pQ, int k) { if(k pQ.size()) { throw new IllegalArgumentException(); } else { Stack aux = new Stack(); int kThSmallest = -1; for(int c=0;c<k;c++){ int element = pQ.remove(); if(c == k-1) kThSmallest = element; aux.push(element); } while(!aux.isEmpty()) pQ.add(aux.pop()); […]

Java中的Anagram算法

我想制作anagram算法,但这段代码不起作用。 我的错在哪里? 例如des和sed是anagram但输出不是anagram同时我必须使用string方法。 不是数组。 🙂 public static boolean isAnagram(String s1 , String s2) { String delStr=””; String newStr=””; for(int i=0;i<s1.length();i++) { for(int j=0 ; j < s2.length() ; j++) { if(s1.charAt(i)==s2.charAt(j)) { delStr=s1.substring(i,i+1); newStr=s2.replace(delStr,""); } } } if(newStr.equals("")) return true; else return false; }