Tag: 数据结构

如何使用两个数字作为Map键

我有两个数字,我想将它们一起用作Map的键。 目前,我正在连接他们的字符串表示。 例如,假设密钥号是4和12.我使用: String key = 4 + “,” + 12; 地图声明为Map 。 我觉得这太糟糕了! 我喜欢使用String以外的东西作为关键! 我想要以最快的方式创建这些密钥。 谁有个好主意?

为什么Scala列表没有大小字段?

来自Java背景,我想知道为什么Scala中的List没有像Java等效LinkedList那样的size字段。 毕竟,使用大小字段,您将能够在常量时间内确定列表的大小,那么为什么大小字段会被删除? (这个问题引用了Scala 2.8及更高版本中的新集合类。另外,我指的是不可变List ,而不是可变List 。)

如何从java中的链表中删除对象?

我的代码有一个问题,我做了一个示例程序来显示链接列表中的emp详细信息,现在问题当我试图删除一个特定条目意味着它不起作用,我希望我在我的代码中做了一些错误你能建议怎么做吗? import java.util.*; class EmpDedup { int record; String fprint; int fid; EmpDedup(int record, String fprint, int fid) { this.record = record; this.fprint = fprint; this.fid = fid; } public int getRecord() { return record; } public String getFprint() { return fprint; } public int getFid() { return fid; } public static void main(String[] args) […]

Java:排序集合允许重复,具有内存效率并提供快速插入和更新

具体来说,我需要一个集合,它使用一个字段A进行访问,使用另一个字段(字段S)进行排序,但是接受重复的已排序集合就足够了。 我经常到这一点,我需要这个集合,TreeMap不是一个选项,因为它不允许重复。 所以现在是时候问这里了。 stackoverflow 在这里和这里指出了几种解决方法 – 即: PriorityQueue :缓慢更新(删除(对象)+添加(对象))和原始键的装箱 斐波纳契堆 :内存浪费(?) TreeMap<Field_S, List> :对我来说问题是列表的内存开销和原始键的装箱 排序列表或数组 :问题是慢插入和删除 – >我应该实现一个分段排序列表? 来自guava( docs )的TreeMultimap :外部依赖和可能内存效率低下(?) 谁有更好的建议? 或者我应该扮演自己的排序数据结构(哪一个?)? 其他来源(Java,开源,unit testing和小deps)也不错。 更新 目前关于我的用例的更多细节(虽然我上次有类似的需求)。 我有一个集合(有数百万)我想要的参考 轮询或获得关于字段S的最小元素 并在字段A的帮助下更新字段S. 字段S的相同值可以发生。 字段A实际上是指向另一个数组的整数 我想要的唯一依赖是trove4j。 如果需要,我可以使用不同的mahout集合。 但不是番石榴,因为虽然是一个很好的lib,但是这些集合并没有被调整为内存效率(装箱/拆箱)。 所以对于斐波那契堆的所有呼喊,但我担心每个元素的开销太多 – >这就是我考虑更高效的“排序+分段数组”解决方案的原因。

我可以使用java.util.LinkedList构建循环/循环链表吗?

我想创建一个循环/循环链表,其中列表的尾部将指向列表的头部。 那么我可以使用java.util.LinkedList并在创建列表后修改尾节点以使其成为循环/循环吗? 如果是这样,你能告诉我一些如何发生的代码吗? 如果我不能使用java.util.LinkedList ,我应该如何创建自己的循环/循环链表实现? 你能告诉我这个实现看起来如何的骨架吗? 如果您需要更多详细信息,请告诉我,我会清除任何困惑。

深度复制图形结构

我有一个带有Node的图表类,其中每个Node都可以连接到其他节点: public class Node { List connections; } 我想对整个图表进行深度复制。 作为第一次尝试,我尝试制作一个复制构造函数,如: public Node(Node other) { connections = new ArrayList(); for (Node n : other.connections) { connections.add(new Node(n)); } } 如此深入复制图形只会是: public Graph deepCopy () { Graph g = new Graph(); g.nodes = new ArrayList(); for (Node n : nodes) { g.nodes.add(new Node(n)); } } 但这不起作用,因为它破坏了节点之间的连接关系。 我想知道是否有人建议以简单的方式做到这一点? […]

树(有向无环图)实现

我需要一个这样的树/有向无环图实现: public class TreeNode { private K key; // ‘key’ for this node, always present private V value; // ‘value’ for this node, doesn’t have to be set private TreeNode parent; private Set<TreeNode> children; } 没有任何类型的分类。 TreeNode只是键的包装和可能的值(节点不必设置值)。 我需要父母和孩子的链接。 标准API或Commons等中有什么东西可以帮我吗? 我不介意自己写(我当然不是要求大家)我只是不想重新发明轮子。

高效的hashCode()实现

我经常使用IntelliJ IDEA自动生成类的hashCode()方法,通常该方法采用以下forms: result = 31 * result + … 我的问题是乘以31的目的是什么? 我知道这是一个素数,但为什么选择31? 另外,如果为特别小/大的数据集实现hashCode() ,人们会以不同的方式处理这个问题吗?

从Java读取cobol数据结构

有没有办法在Java程序中读取cobol数据? 更具体地说,我面临以下情况: 我有一个具有固定长度数据记录的文件。 数据定义以Cobol副本完成。 我想到的是一个考虑到拷贝书的图书馆能够阅读这些记录。 理想情况下,应该可以基于副本信息生成基本的java类和结构。 在稍后的步骤中,将解析数据线并将数据填充到那些生成的类的对象中。 你知道一个提供这种function的图书馆吗? 或者任何其他技术来应对读取cobol数据的问题? 有一些商业工具提供此function。 然而,它们非常昂贵。 您是否知道任何开源替代方案或不同工具的组合来提供整个function? 例如,cb2xml读取copybook结构并将它们转换为xml。 稍后的步骤是基于cb2xml xml信息生成记录阅读器。 或者使用可配置的记录阅读器。 你知道cobol记录阅读器(解码器)吗?

ArrayList或LinkedList更适合排序吗?

我想使用需要不时排序的数据结构。 数据结构的大小几乎不会超过1000个项目。 哪一个更好 – ArrayList或LinkedList ? 哪种排序算法更好用?