Tag: 数据结构

ArrayList与LinkedList

我在以前的post上说这个: 对于LinkedList 得到是O(n) 加上是O(1) 删除是O(n) Iterator.remove是O(1) 对于ArrayList 得到是O(1) add是O(1)分期付款,但O(n)最坏的情况,因为数组必须resize和复制 删除是O(n) 所以通过看这个,我得出的结论是,如果我只需要对我的集合中的5000000元素进行顺序插入,则LinkedList将超出ArrayList 。 如果我只是通过迭代来获取集合中的元素,即不在中间抓取元素, LinkedList仍然会超出ArrayList。 现在为了validation我的上述两个陈述,我写了下面的示例程序…但是我惊讶于我的上述陈述被certificate是错误的。 在这两种情况下ArrayList Linkedlist 。 花费比LinkedList更less的时间来添加以及从Collection中获取它们。 有什么我做错了,或者有关LinkedList和ArrayList的初始语句不适用于大小为5000000的集合吗? 我提到了大小,因为如果我将元素数量减less到50000, LinkedListperformance更好,并且初始语句成立。 long nano1 = System.nanoTime(); List<Integer> arr = new ArrayList(); for(int i = 0; i < 5000000; ++i) { arr.add(i); } System.out.println( (System.nanoTime() – nano1) ); for(int j : arr) { ; } System.out.println( […]

如何在java中创build一个2路地图

我需要一个数据结构以1:1的关系存储string-int值对,并且能够以任何方式查找对应的对象。 我用一个Hashtable和一个String数组写了一个类,并存储了数据2次,并使用内置函数进行查找。 我的问题是,有没有更好的方法来完成这个? 而更好的说,我的意思是高效的,而不是存储数据2次,最好不写一吨的代码:P。

如何在Objective-C中创build和使用队列?

我想在我的Objective-C程序中使用队列数据结构。 在C ++中我会使用STL队列。 Objective-C中的等效数据结构是什么? 我如何推/stream行项目?

为什么我们使用数组而不是其他数据结构?

在编程时,我还没有看到一个数组比其他forms更好地存储信息的实例。 我确实已经认识到编程语言中增加的“特征”在这方面有所改进,并由此取而代之。 我现在看到,他们没有被取代,而是被赋予了新的生命,可以这么说。 所以,基本上,使用数组有什么意义呢? 这不是为什么我们从计算机的angular度来使用数组,而是为什么我们会从编程的angular度使用数组(一个细微的差别)。 计算机对arrays的作用并不是问题的关键。

Java中的sorting数组列表

我很困惑,我找不到一个快速的答案。 我本质上是在Java中寻找一个实现了java.util.List接口的数据结构,但它按照sorting顺序存储它的成员。 我知道你可以使用一个正常的ArrayList并使用Collections.sort() ,但我有一个场景,我偶尔添加,并经常从列表中检索成员,我不想每次都sorting检索一个成员,以防一个新的被添加。 任何人都可以指向我在JDK甚至是第三方库中存在的东西吗? 编辑 :数据结构将需要保留重复。 答案的总结 :我发现这一切非常有趣,并且学到了很多东西。 Aioobe特别值得一提的是他在试图达到我上面的要求(主要是一个支持重复的sortingjava.util.List实现)的毅力。 我已经接受了他的答案,因为对于我所问的问题而言,他的答案是最准确的,而且即使我问的并不是我所需要的,我也多半想到了我所寻找的东西的含意。 我所要求的问题在于List接口本身以及接口中可选方法的概念。 引用javadoc: 这个接口的用户可以精确地控制每个元素插入到列表中的哪个位置。 插入到已sorting的列表中不能精确控制插入点。 然后,你必须考虑如何处理一些方法。 以add为例: public boolean add(Object o) Appends the specified element to the end of this list (optional operation). 你现在处于不舒服的情况1)打破合同,并实施加分的版本2)让add添加一个元素到列表的末尾,打破你的sorting顺序3)离开add (作为其可选的)通过抛出一个UnsupportedOperationException并实现另一种按sorting顺序添加项目的方法。 选项3可能是最好的,但我觉得它有一个不能使用的add方法和另一个不在接口中的sortedAdd方法。 其他相关解决scheme(无特定顺序): java.util.PriorityQueue这可能是最接近我所需要的,而不是我所要求的。 在我的情况下,队列不是对象集合的最精确的定义,但是在function上它完成了我所需要的一切。 net.sourceforge.nite.util.SortedList 。 然而,这个实现通过在add(Object obj)方法中实现sorting来破坏List接口的契约,而奇怪地, add(int index, Object obj)没有效果方法。 一般共识build议throw new UnsupportedOperationException()在这种情况下可能是一个更好的select。 番石榴的TreeMultiSet一个支持重复的集合实现 ca.odell.glazedlists.SortedList这个类在javadoc中有Warning: This class breaks […]

我在Python中用于最大堆实现的是什么?

Python包含最小堆的heapq模块,但是我需要一个最大堆。 我应该用什么来实现Python中的最大堆实现?

我如何在Python中实现树? Python中有像Java一样的内置数据结构吗?

我正在尝试构build一棵普通的树。 Python中是否有内置的数据结构来实现树?

可拆分,不可变

从最近的SO问题(请参阅在Python中创build一个由列表索引的字典 ),我意识到我可能对python中的可哈希和不可变对象的含义有错误的概念。 可行性在实践中意味着什么? 可哈希和不可变的关系是什么? 有可变的对象是可哈希或不可变的不可哈代对象?

使用比O(n)更高效的find-min / find-max进行堆栈?

我有兴趣创build一个类似于支持以下操作的堆栈的Java数据结构,尽可能高效: Push,在堆栈顶部添加一个新元素, Pop,删除堆栈的顶层元素, Find-Max,返回(但不删除)堆栈的最大元素 Find-Min,返回(但不删除)堆栈的最小元素 这个数据结构最快的实现是什么? 我怎样才能用Java编写它?

我如何在Matlab中定义一个结构

我知道一个结构可以通过几种方式来定义,例如: 将字段添加到variables p.color.red = .2; p.color.green = .4; p.color.blue = .7; 通过赋值定义标量结构 S = struct('a', 0, 'b', 1, 'c', 2); 我想要做的是创build一个结构定义(如C)。 我的最终目标是拥有一系列可以迭代并执行testing的结构。 有没有什么办法可以定义一个通用结构,然后创build它的实例? 我应该使用其他机制吗? 我知道MATLAB支持Java,我应该使用类/接口?