Tag: 查找

具有双向O(1)查找的数据结构。 哈希表?

我正在实施一个系统,我有一个名单列表,每个人都有1个电话号码。 我需要能够取一个名字并查找电话号码,或者拿一个电话号码并查找姓名。 我知道我可以通过两个哈希表来实现这一点 – 一个从名称到电话号码,一个从电话号码到名字。 然后我可以在O(1)时间向任意方向查找。 然而,这似乎是我存储了太多数据 – 每个名称和每个电话号码都存储了两次。 有没有办法更有效地做到这一点? 我应该使用什么数据结构来存储姓名和电话号码? 如果相关,我用Java编码。 非常感谢!

在Java中查找不可序列化字段的好方法

我有一个非常复杂的Java对象来序列化(几周前工作正常)。 在此期间实现了很多之后,序列化现在无法抛出以下exception: java.io.NotSerializableException: sun.java2d.SunGraphics2D 我已经检查了所有似乎相关的类,但是在其中任何一个中都没有找到一个包含Graphics2D类型的字段(或类似的类型,如BufferedImage等)。 正如我所看到的,问题也可能是我正在使用一个类(来自库等),它本身是可序列化的,但有一个不可序列化类型的Graphics2D字段。 所以,我的问题是:是否有一种“好”的方法来找到序列化失败的地方? 检查所有类和所做的所有更改似乎都不可行。 先感谢您 卢卡斯 PS。 以下是exception的完整堆栈跟踪: java.io.NotSerializableException: sun.java2d.SunGraphics2D at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1378) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) at java.io.ObjectOutputStream.access$300(ObjectOutputStream.java:162) at java.io.ObjectOutputStream$PutFieldImpl.writeFields(ObjectOutputStream.java:1707) at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:482) at java.awt.Container.writeObject(Container.java:3697) at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1378) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) […]

找到模式时替换

我正在尝试通过一个字符串并替换正则表达式匹配字符串的所有实例。 出于某种原因,当我使用if然后它将工作并且只替换正则表达式匹配的一个字符串实例。 当我将if更改为while它会对自身进行一些奇怪的替换并使第一个正则表达式匹配字符串变得混乱,而不会触及其他字符串… pattern = Pattern.compile(regex); matcher = pattern.matcher(docToProcess); while (matcher.find()) { start = matcher.start(); end = matcher.end(); match = docToProcess.substring(start, end); stringBuilder.replace(start, end, createRef(match)); docToProcess = stringBuilder.toString(); }

Java执行命令行程序’find’返回错误

以下来自终端的工作没问题 find testDir -type f -exec md5sum {} \; 其中testDir是包含某些文件的目录(例如file1,file2和file3)。 但是,我在Java中使用以下内容时出错 Runtime rt = Runtime.getRuntime(); Process pr = rt.exec(“find testDir -type f -exec md5sum {} \\;”); 错误是 find: missing argument to `-exec’ 我相信我正确地逃避了角色。 我尝试了几种不同的格式,但我无法使用它。 更新 @jtahlborn完美地回答了这个问题。 但是在计算md5sum之前,命令现在已稍微改变以对dir中的每个文件进行排序,如下所示(我已经接受了原始问题的优秀答案,所以如果他们能够提出格式,我会给别人买啤酒对于这个。我已经尝试了我能想到的每一个组合,并且没有成功。) “找到testDir -type f -exec md5sum {} + | awk {print $ 1} | sort | md5sum;” 新的更新 对于管道,你需要一个shell,所以我最终得到了这个,效果很好,你仍然可以获得输出。 […]

检查字典中的单词

我需要确定一个未知的5或6个字母的字符串是否是一个有效的单词,即在字典中。 我可以将字符串/单词提交到在线词典,但是我需要检查这个字符串/单词,每次都会有不同,大约100到150次。 这似乎有点耗时。 我的下一个想法是尝试获得我自己的字典程序。 它需要在Java中,因为我的程序是用Java编写的。 Java API是否已经有一个类来执行此操作? 我可以得到某人已经编码的下降,我所要做的就是将字符串/单词提交给它吗? 我的程序没有用于拼写检查。 我想编写一个程序来解读混乱的单词拼图,当我被困在一个混乱的单词上时。 谢谢你的建议。

递归搜索Java中的目录

在Java中查找具有特定名称的目录的最佳方法是什么? 我正在寻找的目录可以位于当前目录或其子目录之一。

使用java在文本文件中查找字符串的最快方法

检查文件是否包含某个字符串或数字的最快方法是什么?