Questions tagged «data-structures»

数据结构是以一种组织数据的方式,该方式允许有效地查询和/或更新该数据的特定属性。

18
Java:如何将列表转换为地图
最近我谈话有什么将要转换的最佳方式是同事List,以Map在Java中,如果有这样做的任何特殊利益。 我想知道最佳的转换方法,如果有人可以指导我,我将不胜感激。 这是个好方法吗? List<Object[]> results; Map<Integer, String> resultsMap = new HashMap<Integer, String>(); for (Object[] o : results) { resultsMap.put((Integer) o[0], (String) o[1]); }


14
.Net中的优先级队列
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 3年前关闭。 改善这个问题 我正在寻找优先级队列或堆数据结构的.NET实现 优先级队列是一种数据结构,比简单的排序更具灵活性,因为它们允许新元素以任意间隔进入系统。将新作业插入优先级队列比在每次到达时重新排序所有内容更具成本效益。 基本优先级队列支持三个主要操作: 插入(Q,x)。给定带有键k的项目x,将其插入优先级队列Q。 查找最小值(Q)。返回一个指针,该指针的项的值小于优先级队列Q中的任何其他项。 最小删除(Q)。从密钥最小的优先级队列Q中删除该项目 除非我在错误的地方寻找,否则框架中没有一个。有谁知道一个好人,还是我应该自己做一个?

13
.NET数据结构:ArrayList,List,HashTable,Dictionary,SortedList,SortedDictionary —速度,内存以及何时使用它们?
.NET具有许多复杂的数据结构。不幸的是,它们中的一些非常相似,而且我并不总是确定何时使用一种以及何时使用另一种。我的大多数C#和Visual Basic书籍都在一定程度上谈论它们,但是它们从未真正涉及任何细节。 Array,ArrayList,List,Hashtable,Dictionary,SortedList和SortedDictionary有什么区别? 哪些是可枚举的(IList-可以执行“ foreach”循环)?哪些使用键/值对(IDict)? 那内存占用呢?插入速度?检索速度? 还有其他值得一提的数据结构吗? 我仍在寻找有关内存使用和速度(Big-O表示法)的更多详细信息。


20
实现嵌套字典的最佳方法是什么?
我有一个实质上相当于嵌套字典的数据结构。假设它看起来像这样: {'new jersey': {'mercer county': {'plumbers': 3, 'programmers': 81}, 'middlesex county': {'programmers': 81, 'salesmen': 62}}, 'new york': {'queens county': {'plumbers': 9, 'salesmen': 36}}} 现在,维护和创建它非常痛苦。每当我有一个新的州/县/专业时,我都必须通过讨厌的try / catch块创建较低层的字典。此外,如果要遍历所有值,则必须创建烦人的嵌套迭代器。 我也可以使用元组作为键,例如: {('new jersey', 'mercer county', 'plumbers'): 3, ('new jersey', 'mercer county', 'programmers'): 81, ('new jersey', 'middlesex county', 'programmers'): 81, ('new jersey', 'middlesex county', 'salesmen'): …

30
数组与链表
为什么有人要在数组上使用链表? 毫无疑问,对链接列表进行编码比使用数组要花费更多的工作,并且您可能会想知道什么可以证明需要付出额外的努力。 我认为在链表中插入新元素很简单,但这是数组中的一项主要工作。与使用数组存储在数组中相比,使用链表存储还有其他优势吗? 这个问题不是一个重复这个问题,因为在这个问题涉及的一般数据结构的另一个问题是专门关于特定Java类要求。


4
为什么我们使用数组而不是其他数据结构?
在编写程序时,我还没有见过这样一个实例:数组比另一种形式更适合存储信息。我确实已经发现,编程语言中增加的“功能”对此有所改进,并以此代替了它们。我现在可以看到,它们并没有被取代,而是被赋予了新的生命。 那么,基本上,使用数组有什么意义? 这不是为什么我们从计算机的角度使用数组,而是为什么从编程的角度使用数组(微妙的区别)。计算机如何处理阵列并不是问题的重点。



6
多维数组如何在内存中格式化?
在C语言中,我知道可以使用以下代码在堆上动态分配一个二维数组: int** someNumbers = malloc(arrayRows*sizeof(int*)); for (i = 0; i < arrayRows; i++) { someNumbers[i] = malloc(arrayColumns*sizeof(int)); } 显然,这实际上创建了指向一堆单独的一维整数数组的一维指针数组,并且“系统”可以弄清楚我要问的意思: someNumbers[4][2]; 但是当我静态声明2D数组时,如以下行所示: int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS]; ...是否在堆栈上创建了类似的结构,还是完全是另一种形式?(即它是一维指针数组吗?如果不是,它是什么,以及如何找出对其的引用?) 另外,当我说“系统”时,实际上是由什么负责的?内核?还是C编译器在编译时将其整理出来?


3
HyperLogLog算法如何工作?
我最近在业余时间一直在学习不同的算法,我遇到的一个看起来很有趣的算法叫做HyperLogLog算法-该算法估计列表中有多少个唯一项。 这对我特别有趣,因为当我看到“基数”值(直到最近,我一直认为直到最近才算出它不是估计值)时,它才使我回到MySQL时代。 因此,我知道如何在O(n)中编写一种算法,该算法将计算数组中有多少个唯一项。我是用JavaScript编写的: function countUniqueAlgo1(arr) { var Table = {}; var numUnique = 0; var numDataPoints = arr.length; for (var j = 0; j < numDataPoints; j++) { var val = arr[j]; if (Table[val] != null) { continue; } Table[val] = 1; numUnique++; } return numUnique; } 但是问题是我的算法虽然为O(n),却占用了大量内存(将值存储在中Table)。 我一直在阅读本文有关如何在重复计数在列表Ø(ñ)的时间和使用的内存。 它解释说,通过对位进行散列和计数或可以在一定概率(假设列表均匀分布)中估计的某种事物中列表中唯一项的数量。 …

21
您将如何在Java中实现LRU缓存?
请不要说EHCache或OSCache等。出于这个问题的目的,假设我想仅使用SDK来实现自己的实现(边做边学)。考虑到缓存将在多线程环境中使用,您将使用哪些数据结构?我已经使用LinkedHashMap和Collections#synchronizedMap实现了一个,但是我很好奇是否有任何新的并发集合会更好。 更新:当我发现这个块时,我只是在阅读Yegge的最新文章: 如果您需要固定时间的访问权限并希望保持插入顺序,那么做一个比一个真正出色的数据结构LinkedHashMap更好的选择。可能更妙的唯一方法是如果有并发版本。可惜。 在进行上面提到的LinkedHashMap+ Collections#synchronizedMap实现之前,我在想几乎完全相同的事情。很高兴知道我不仅忽略了某些东西。 根据到目前为止的答案,听起来对于高并发LRU来说,我最好的选择是使用一些使用相同的逻辑来扩展ConcurrentHashMapLinkedHashMap。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.