jjzjj

hashtable

全部标签

java - java.util.Hashtable 线程安全吗?

我已经有一段时间没有使用哈希表来处理任何重要的事情了,但我似乎记得同步的get()和put()方法。JavaDocs没有反射(reflect)这一点。他们只是说Hashtable类是同步的。我能假设什么?如果多个线程同时访问哈希表(假设他们不是在修改同一个条目),操作就会成功,对吧?我猜我想问的是“java.util.Hashtable线程安全吗?”请指导我摆脱这个问题... 最佳答案 它是线程安全的,因为get、put、contains方法等是同步的。此外,多个线程将无法同时访问哈希表,无论它们正在修改哪些条目。编辑-修改为包括同

java - 推荐用于 Java 实现的低内存 HashMap

我目前正在处理一个与编程相关的问题,我试图在其中制作大量数据的散列图。数据的键是CharSequence的自定义低内存实现,它实现了hashCode()和equals(...),值是Integer对象。这个哈希表中可能有数百万个条目,我设法通过让Integer成为文件中指向我希望散列的数据的指针来大幅减少该值的内存使用,但问题是key可能是十个字节数(平均25字节),并且在HashMap的默认实现中,键需要保存在内存中。我需要一个内存开销低的HashMap,它可以将键分页到磁盘或存储键的哈希表示。如果key本身经过哈希处理,那么我会担心哈希冲突。理想情况下,我希望每50MB的堆空间能够

Java 泛型 : Array containing generics

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Javahowto:GenericArraycreationErrorgenericarraycreation我的任务是用Java编写一个哈希表,它必须适用于任何数据类型。我正在编写的代码的规则如下:-哈希表必须有一个数组作为底层数据结构,其大小在构造对象时确定-当发生碰撞时,应该将发生碰撞的元素放入一个链表中,该链表保存哈希表中该索引(键)处的所有元素因此,对于底层数据类型,我制作了一个LinkedList类型的数组(自定义,不是JavaAPILinkedList)。privateLinkedList[]t

java - Eclipse 调试器中显示的哈希表值

我在Eclipse中调试Hashtable时发现了一些奇怪的东西。我的Hashtable变量名称是“my_hashTable”,Eclipse调试器,如果我点击它,它显示它的值是三个:{first=0,third=2,second=1},这是正确的,计数是3,这也是正确的。但是,如果我在my_hashTable变量中单击“table”变量,它会显示只有两个非空值,[4]=2和[5]=0。其完整值如下:[null,null,null,null,third=2,first=0,null]为什么会这样?“second=1”对在哪里?这是我第一次在Eclipse中遇到这种奇怪的现象。知道发生了

java - 为什么Java中哈希表(Hashtable)中的 't'不是大写

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭10年前。ImprovethisquestionJava中的一切似乎都遵循大小写规则,除了Hashtable。Hashtableht=newHashtable();相对于ArrayLista=newArrayList();或HashMapa=newHashMap();这是为什么?HashTable是不是只读一个词(Hashtable)?

java - HashSet 上的迭代成本还取决于支持映射的容量吗?

来自HashSet的JavaDocs:Thisclassoffersconstanttimeperformanceforthebasicoperations(add,remove,containsandsize),assumingthehashfunctiondispersestheelementsproperlyamongthebuckets.IteratingoverthissetrequirestimeproportionaltothesumoftheHashSetinstance'ssize(thenumberofelements)plusthe"capacity"oftheb

java - 哈希表哈希避免负哈希码

我想知道为什么Hashtable避免使用负哈希码?inthash=key.hashCode();intindex=(hash&0x7FFFFFFF)%tab.length;(hash&0x7FFFFFFF)使带符号的位从0到正,但为什么我们不能将带符号的32位整数视为无符号?甚至使用模块化技巧使其变得积极。例如,publicstaticlongint_mod(inthashcode,inttab_length){return(hashcode%tab_length+tab_length)%tab_length;} 最佳答案 该值必须

java - Java 中的哈希表和同步

我读到哈希表是线程安全的,因为它是同步的。考虑这个代码片段if(!hashtable.contains(key)){hashtable.put(key,value);}哈希表的操作可能不同步。例如,如果Threadt1访问hastable并检查key,同时Threadt2在t1执行put之前检查key。现在有两个线程在ifblock内并且发生键值覆盖。所以同步块(synchronizedblock)是必要的。synchronized{if(!hashtable.contains(key)){hashtable.put(key,value);}}这个理解对吗?或hastables对在ha

java - HashMap 的迭代器是快速失败而 HashTable 的枚举器不是?

我正在查找这两个类之间的区别,这一点出现在很多答案中,这个博客是来源:http://javarevisited.blogspot.com/2010/10/difference-between-hashmap-and.html但是我并不完全明白。有人可以详细说明吗?也许举个例子?感谢关注! 最佳答案 Fail-fast意味着当您在遍历内容时尝试修改内容,它将失败并抛出ConcurrentModificationException。Setkeys=hashMap.keySet();for(Objectkey:keys){hashMap.

java - 如何对 Java 哈希表进行排序?

我将一些数据插入到Java哈希表中。如果我从Hashtable中读取数据,它不会按照我插入的顺序返回。如何从Hashtable中获取有序数据?我使用以下代码从哈希表中获取值://GetasetoftheentriesSetset=hsUpdateValues.entrySet();//GetaniteratorIteratori=set.iterator();//Displayelementswhile(i.hasNext()){Map.Entryme=(Map.Entry)i.next();System.out.print("Key:"+me.getKey()+",Value:"+m