Tag: 数据结构

如何使用递归实现完整二叉树而不比较节点的值?

public void recurInsert(BinaryTree.Node root, BinaryTree.Node newNode, int height) { if (newNode == null) { System.out.println(“InsertNode is empty, please create new one”); return; } else{ if (height == 1) { if (root == null) return; else if (root.leftChild == null) { root.leftChild = newNode; System.out.println(“left” + newNode.data); } else { root.rightChild = newNode; System.out.println(“right” + newNode.data); […]

如何转储哈希映射的内容?

如何将Java HashMap(或任何其他)的内容转储到STDOUT? 例如,假设我有一个具有以下结构的复杂HashMap: ( student1 => Map( name => Tim, Scores => Map( math => 10, physics => 20, Computers => 30), place => Miami, ranking => Array(2,8,1,13), ), student2 => Map ( …………… …………… ), ………………………. ………………………. ); 因此,我想将其打印到屏幕上,以便了解数据结构。 我正在寻找类似于PHP的var_dump()或Perl的dumper()的东西。

我应该使用哪种数据结构从CSV中搜索字符串?

我有一个csv文件,有近200000行,包含两个列 – 名称和作业。 然后用户输入一个名称,比如user_name,我必须搜索整个csv以查找包含模式user_name的名称,最后将输出打印到屏幕。 我在Java中使用ArrayList实现了这一点,我将整个名称从csv放到ArrayList中,然后在其中搜索模式。 但在这种情况下,搜索的总时间复杂度为O(n)。 Java中是否有任何其他数据结构可用于执行o(logn)搜索或比ArrayList更高效的搜索? 顺便说一句,我不能使用任何数据库方法。 如果我可以用任何其他语言建立一个良好的数据结构来实现我的目标,那么请向我推荐一下吗? 编辑 – 输出应该是csv中包含模式user_name作为最后一部分的名称。 例如:如果我的输入是“儿子”,那么它应该返回“jackson”等。 现在我到目前为止所做的是将csv的name列读取到字符串ArrayList,然后读取ArrayList的每个元素并使用正则表达式(Java的模式匹配器)来查看该元素是否具有user_name作为最后一部分。 如果是,则打印出来。 如果我在multithreading环境中实现它,它会增加我的程序的可伸缩性和性能吗?

Java练习:使用递归方法打印星号三角形及其倒三角形

我需要打印一个三角形和倒三角形(站在它的尖端)。 我设法只打印出三角形。 我知道我可以很容易地使用for循环,但我想知道如何使用递归,在我的情况下,我不知道如何打印三角形和倒置的一个。谢谢。 Example desired output: * ** *** **** **** *** ** * 我的代码: public class Recursion1 { public static void main(String[] args) { Recursion1 me = new Recursion1(); me.doIt(); } public void doIt() { nums(4); } public String nums(int counts) { if (counts <= 0) { return ""; } String p = nums(counts […]

java linkedhashmap迭代

我有两个hashmap LinkedHashMap val1 = new LinkedHashMap(); LinkedHashMap val2 = new LinkedHashMap(); 每个hashmap都有不同的键和值。 我试图同时迭代两个hashmap并将val1->int[] to val2->int每个值乘以val1->int[] to val2->int 做最简单,最禁食的方法是什么? 我在两个hashmap中都有数千个值。 谢谢

ArrayList与Array和List

我已经编程了很多,最近开始学习更纯粹的计算机科学专题(面试)。 我知道Array和LinkedList数据结构之间的区别,但现在我已经开始使用Java了,我看到了这个ArrayList,我在构思时遇到了麻烦。 网络搜索只是真正告诉我如何使用它们以及什么时候使用它们(每个的好处),但没有什么能回答我的问题: 什么是ArrayList? 我的假设是它是一个列表,它维护对每个元素的内存引用,使它也能像数组一样工作。 我也有一种感觉,因为Java是开放的,我应该能够看看类定义,但还没有弄清楚如何做到这一点。 谢谢!

如何在O(n)时间内以某个给定大小的块反转单链表?

我最近遇到了一个算法问题: 以k块为单位反转单链表。 迭代方法是优选的。 关于k,结果列表的第一个块应该是最大的。 如果列表包含n个元素,则最后一个块将满或包含n mod k个元素。 For example: k = 2, list = [1,2,3,4,5,6,7,8,9], the reversed list is [8,9,6,7,4,5,2,3,1] k = 3, list = [1,2,3,4,5,6,7,8,9], the reversed list is [7,8,9,4,5,6,1,2,3] 我的代码如下所示。 是否存在不使用堆栈或额外空间的O(n)算法? public static ListNode reverse(ListNode list, int k) { Stack stack = new Stack(); int listLen = getLen(list); int firstBlockSize = listLen % […]

Java:存储到ArrayList的任意索引的最佳方式

我知道我不能将值存储在尚未使用的ArrayList的索引处,即小于大小。 换句话说,如果myArrayList.size()是5,那么如果我尝试做的话 myArrayList.set(10, “Hello World”) 我会得到一个越界错误。 但我的应用需要这个。 除了在每个中间槽中存储null的循环之外,还有更优雅的方法吗? 它看起来像我: Vector中的行为相同 如果我需要能够随机访问(即在pos X处的元素),那么我的选择是Vector和ArrayList。 我可以使用HashMap并使用索引作为键,但这实在是效率低下。 那么看起来像普通情况的优雅解决方案是什么呢? 我肯定错过了什么…

IdentityHashMap使用线性探测进行冲突解决的原因

正如我们在java集合框架中所知, Map每个类都使用Chaining进行冲突解决,但IdentityHashMap使用线性探测。 如果你看到java文档,它提到: 对于许多JRE实现和操作混合,此类将产生比HashMap更好的性能(HashMap使用链接而不是线性探测)。 我的问题是: 如果线性探测的性能更好,那么实现者为什么只使用了IdentityHashMap而不是所有Map实现的衬里 探测 为什么线性探测然后链接会有性能提升。 坦克。

Java:为什么TreeMap被称为“树”地图?

我无法理解为什么TreeMap被称为TreeMap而不是SortedMap。 据我所知,TreeMap是一个自动对其元素进行排序的地图。 计算机科学中的树就像一个图形。 所以为什么?