我一直试图找到各种类型的哈希数据结构的具体(非专业;非超学术)定义,特别是哈希表,哈希列表和哈希映射.在线搜索为所有这些提供了许多有用的链接,但从未明确定义何时适合使用其他链接.
(1)从实际的角度来看,这3个有什么区别?
(2)他们的运营运行时间有何不同?是否应该使用或避免使用其他类型的哈希值?
(3)每个如何与地图ADT有关?它们只是不同的实现,还是完全不同的野兽?
感谢您的任何见解!
我正在阅读关于JavaRevisited的面试问题,我很难理解这个问题:
在多线程环境中使用HashMap有什么问题?当get()方法进入无限循环时?
在我看来,HashMap
在多线程环境中使用并不是问题,只要我们的应用程序不访问/读取正在修改创建的线程HashMap
,而不是简单地访问HashMap.
所以,正如我所看到的,只要在应用程序中我们只是HashMap
在多线程环境中访问它就没有问题.
如果我的理解是正确的,请告诉我.
我有一个Hashtable
关键字String
和值String
,但我已经达到了我的项目中我需要能够存储多种不同数据类型的点.例如,我将需要存储int
,String
,Date
,等等,都在同一个Hashtable
.
我有点惊讶没有人问过这个特定情况,因为它在java标准库中有点奇怪的不一致:
我正在使用带自定义标签的swing JSliders; 唯一可用于分配标签的库调用是:setLabelTable(Dictionary labels)
但是Dictionary是一个抽象类,它在标准库中唯一已知的子类是Hashtable,api和各种IDE都抱怨它,因为它是"过时的".
显而易见的事情就是使用Hashtable,但我想知道两件事:
谢谢!
我是java开发的新手,我来自C#.net,正在开发android应用程序.
我正在寻找在Java中使用的Key-Value列表,与C#中的IDictionary相同.
谢谢
可能的重复:
HashMap 和 Hashtable 之间的区别?
前几天去面试,面试官问我什么情况下使用hashmap而不是hashtable会有问题?意思是给出一个例子,其中 hashtmap 使用会导致问题,但使用 hashtable 将解决问题。
他告诉我运行代码的机器是单核的!
我给了一个例如
Time Thread1 Thread 2
t0 tb.put("a",1)
t1 tb.put("a",2) int a = tb.get("a");
Run Code Online (Sandbox Code Playgroud)
我告诉过,如果在 t1 时 t1 和 t2 同时执行,则会导致问题。他说,由于它是单核CPU,因此永远不会并行执行2条语句
有人可以澄清一下,什么时候会出现问题吗?有情况举例吗?
编辑:我通过交互 hashmap 和 hashtable 发布了这个问题。我知道 hashtable 方法是同步的,而 hashmap 的方法不是同步的,我已经告诉他了
为了体验我实现了以下内容。并且代码从未崩溃?我不使用哈希表,但它仍然是 A 中的哈希图:)
public class MyT extends Thread {
HashMap<String,String > a = A.t;
@Override
public void run() {
while (true) {
a.put("a", "one");
System.out.println(Thread.currentThread().getName());
}
}
public static void main(String[] args) {
MyT t1 = new MyT();
t1.start(); …
Run Code Online (Sandbox Code Playgroud) 我真的在Ruby中使用以下类型的代码:
my_hash = {}
my_hash['test'] = 1
Run Code Online (Sandbox Code Playgroud)
Java中的对应数据结构是什么?
与 File 相比, Files 有哪些优势或主要特点?什么时候更喜欢一个?为什么?
编辑:这只是我们世界中的另一个“差异”问题-因此请确保您真的想对它投反对票!
我知道 Java 中的 ConcurrentHashMap 及其众多优点,但我不太清楚为什么像同步 HashMap 这样的实现需要在每个函数调用上同步。
对我来说,感觉就像如果你有一个 HashMap ,其唯一的功能是put(k, v)
和get(k)
,那么只有该put
函数需要同步,因为即使你在调用后调整 hashMap 的大小put
,那么你仍然可以在执行时授予安全的读取访问权限调整大小。读取器线程可以简单地读取调整大小之前的版本。当调整大小完成后,编写器线程将替换引用,以便所有当前调用都get
将指向 HashMap 的调整大小版本。
我错过了一些明显的东西吗?
我有一个困惑:
我在很多帖子中都读到Hash-map被实现为二进制搜索树,这使得各种操作时间复杂度成为对数顺序.
另一方面,哈希表提供恒定的时间提取.
但是,正如我在本文中所读到的那样,在两个数据结构中检索/搜索元素的复杂性方面没有提供任何差异.
所以,这是我的问题 -
由于散列表保证提供恒定的搜索时间复杂度,因此它们的实现必须与散列映射的实现不同.那么,如果有人不提供恒定时间搜索,为什么有人会使用哈希映射.另外,为什么首先将它们实现为二叉搜索树?
我知道哈希映射以排序的形式存储密钥,并通过映射提供迭代.但是,也可以在哈希表中提供相同的内容.