Tag: 数据结构

HashMap应该是未分类的,但仍然按键排序

根据这些: http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html HashMap,LinkedHashMap和TreeMap之间的区别 java beginner:密钥如何在哈希映射中排序? Java的HashMap应该是未排序的,但它是按照Key进行排序的。 我认为这是一个问题,因为我需要插入订单数据。 所以,我使用的是LinkedHashMap 。 但我仍然困惑为什么HashMap对它进行了排序。 有谁能解释一下? 我做了一个简单的例子来查看排序。 public static void main(String[] args) { HashMap newHashMap = new HashMap(); newHashMap.put(2, “First”); newHashMap.put(0, “Second”); newHashMap.put(3, “Third”); newHashMap.put(1, “Fourth”); Iterator<Entry> iterator = newHashMap.entrySet() .iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.println(“Key: ” + entry.getKey()); System.out.println(“Value: ” + entry.getValue()); iterator.remove(); } } 结果: […]

为生产者消费者问题的变体选择数据结构

现在,我有一个队列,有多个生产者和单个消费者。 消费者线程操作很慢。 此外,使用者通过窥视操作从队列中获取元素,直到消耗操作完成,该元素无法从队列中删除。 这是因为作为副操作的生产者线程还拍摄了在该时间点未完全处理的所有元素的快照。 现在,我想更改我的代码以支持多个消费者。 所以,假设我有三个线程,一个线程将采用第一个元素,可以通过窥视操作读取。 第二个消费者线程可以用于第二个元素,但我无法检索,因为队列不支持检索第二个元素。 因此,使用标准ConcurrentLinkedQueue(我现在正在使用)的选项已经完成。 我正在考虑使用优先级队列,但是我必须将每个元素与一个标志相关联,该标志告诉我这个元素是否已经被某个线程使用过。 哪种数据结构最适合这个问题?

选择哪种数据类型或数据结构来计算100的阶乘?

我想写一个程序来评估给定整数的阶乘。 以下基础知识我在java中编写了以下代码: long fact(int num){ if(num == 1) return 1; else return num*fact(num-1); } 但后来我意识到,对于许多整数输入,结果可能不是所希望的,因此测试直接给出输入为100。 我怀疑是真的,因为我得到的结果为“0”(原因结果可能超出了长期范围)。 所以,我只是好奇并渴望知道如何让我的程序为输入<= 150工作。 我很感激C编程语言或Java中的任何有效解决方案。

Java:使用Fibonacci堆实现Dijkstra算法

在这里新,但作为客人已经潜伏了相当长的一段时间:) 好吧,所以我一直在尝试使用Fibonacci堆(在Java中)做Dijkstra的最短路径算法。 经过一些搜索,我设法偶然发现了两个代表Fibonacci堆的现成实现。 第一个实现相当精美,可以在这里找到。 第二个实现,似乎不那么优雅,就在这里 。 现在,这一切看起来都很好。 但是,我想在我的Dijkstra算法版本中使用其中一个实现,但我还没有运气。 Dijkstra的使用实施如下: public void dijkstra(Vertex source) { { source.minDistance = 0.; PriorityQueue vertexQueue = new PriorityQueue(); vertexQueue.add(source); while (!vertexQueue.isEmpty()) { Vertex u = vertexQueue.poll(); // Visit each edge exiting u for (Edge e : u.adjacencies) { Vertex v = e.target; double weight = e.weight; double distanceThroughU = u.minDistance […]

arrays访问复杂性

在Java中,我需要在代码中多次访问array1[index] 。 即使对于超大型arrays,我是否可以假设每个单一arrays访问需要恒定时间? 这在语言或底层架构之间有区别吗?

如何正确使用HashMap?

HashMap savedStuff = new HashMap(); savedStuff.put(“symbol”, this.symbol); //this is a string savedStuff.put(“index”, this.index); //this is an int 给我警告: HashMap is a raw type. References to generic type HashMap should be parameterized

R-Tree实现Java

我在最近几天搜索R-Tree的稳定实现,支持无限维(20左右就足够了)。 我只找到了这个http://sourceforge.net/projects/jsi/,但它们只支持2个维度。 另一个选项是区间树的多维实现。 也许我完全错误地使用了R-Tree或Intervall-tree来解决我的问题所以我简单地说明了问题,你可以把你的想法发给我。 我需要解决的问题是某种最近邻搜索。 我有一套天线和房间,每个天线有一个整数间隔。 例如天线1,最小-92,最大-85。 实际上它可以表示为房间 – >天线组 – >天线间隔。 这个想法是每个房间在天线的尺寸上跨越R-Tree中的一个盒子,并且在每个维度上跨越间隔。 如果我得到N-Antennas的查询和每个天线的值,那么我可以将信息表示为房间中的查询点并检索“最接近”点的房间。 希望你对问题和我的想法有所了解。

插入Sorted LinkedList Java

我在下面有这个代码,我将一个新的整数插入到一个有序的LinkedList中,但我不认为这是“正确”的做事方式,因为我知道有单一的链表,指针指向下一个值和双链表指向下一个和上一个值的指针。 我试图使用Nodes来实现以下情况,但是Java正在导入这个导入org.w3c.dom.Node(文档对象模型),所以卡住了。 插入案例 插入空数组 如果要插入的值少于所有内容,请在开头插入。 如果要插入的值大于所有值,请插入最后一个。 如果值小于/大于LL中的某些值,则介于两者之间。 import java.util.*; public class MainLinkedList { public static void main(String[] args) { LinkedList llist = new LinkedList(); llist.add(10); llist.add(30); llist.add(50); llist.add(60); llist.add(90); llist.add(1000); System.out.println(“Old LinkedList ” + llist); //WHat if you want to insert 70 in a sorted LinkedList LinkedList newllist = insertSortedLL(llist, 70); System.out.println(“New LinkedList ” + […]

什么是数据结构类似哈希表,但不常使用的键被删除?

我正在寻找一个类似于哈希表的数据结构,但表中有一个大小限制。 当散列中的项数达到大小限制时,应调用剔除函数以除去表中检索次数最少的键/值对。 这是我正在做的一些伪代码: class MyClass { private Map cache = new HashMap(); public int myFunc(int n) { if(cache.containsKey(n)) return cache.get(n); int next = . . . ; //some complicated math. guaranteed next != n. int ret = 1 + myFunc(next); cache.put(n, ret); return ret; } } 会发生的是,有一些n值, myFunc()将被多次调用,但是n许多其他值只会被计算一次。 因此,缓存可能会填满数百万个永远不需要的值。 我想有一种方法让缓存自动删除不经常检索的元素。 这感觉就像一个必须解决的问题,但我不确定数据结构是什么,我将用它来有效地做到这一点。 谁能指出我正确的方向? 更新我知道这必须是一个已经解决的问题。 它被称为LRU Cache,通过扩展LinkedHashMap类很容易。 […]

如何在Java中返回TreeSet中的第k个元素

也许我没有使用正确的数据结构。 我需要使用一个集合,但也希望有效地返回第k个最小元素。 可以在Java中使用TreeSet吗? 似乎没有TreeSet的内置方法来执行此操作。 请帮帮我。