Tag: hashmap

为什么ArrayList和HashMap等类不同步?

我正在更新一个旧项目,我想知道是否应该在IDE中删除一些标记为“过时”的对象。 有问题的对象是Vector和Hashtable。 我做了一些研究,似乎这些对象的新对应物 – ArrayList和HashMap – 基本相同,只是没有同步。 我的问题是,为什么要进行切换? 我不是只是从我的应用程序中取走一点安全性以换取少量速度吗? 看起来这不是一个巨大的决定,但我想我会在做出决定之前看看是否值得花时间。 谢谢!

获取与Map中相应最大值相关联的键(TreeMap / HashMap)

我编写了下面的代码,以找出在JAVA中使用TreeMap具有最大值(Integer)的键(String)。 public static void maxprofitItem(int[] costs, int[] prices, int[] sales,String[] items) { TreeMapmap=new TreeMap(); int[] profits=new int[items.length]; int maxvalue; for(int i=0;i0){ map.put(items[i],profits[i]); } } Set setOfKeys = map.keySet(); Iterator iterator = setOfKeys.iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); Integer value = (Integer)map.get(key); System.out.println(“Key: “+ key+”, Value: “+ value); } if(!map.isEmpty()){ System.out.println(“The maximum value […]

Java HashMap和关键对象的问题我自己推出

所以,我正在尝试使用HashMap将我自己的Object映射到String值。 我的目标如下(为简洁起见删除了一些代码) public class RouteHeadsignPair { String route; String headsign; public RouteHeadsignPair(String n_route, String n_headsign) { route = n_route.toLowerCase(); headsign = n_headsign.toLowerCase(); } public String getRoute () { return route; } public String getHeadsign() { return headsign; } public boolean equals(RouteHeadsignPair other) { return(other.getRoute().equals(route) && other.getHeadsign().equals(headsign)); } public int hashCode() { return(route.hashCode()); } } 我通过从文本文件加载数据将一堆这些对象映射到字符串。 […]

JAXB将XML元素解组为HashMap

我发现很多文章描述了如何将一系列XML元素解组到HashMap,只要它们在“父”元素中。 但是,我没有让这个与直接在根元素下的孩子一起工作! 选项1 – 工程: … 选项2 – 不起作用: … 检查: package com.foo.conf; import java.util.Map; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement(name=”checks”) public class Checks { @XmlJavaTypeAdapter(ChecksAdapter.class) @XmlElement(name=”checks”) public Map checkMap; } 检查: package com.foo.conf; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlValue; public class Check { @XmlAttribute public String key; @XmlValue public String description; public Check() { } […]

如果重写哈希代码,Hashmap键如何表现,只返回一个常数?

我有一个关于Java Hashmap的小问题。 如果我覆盖hashCode方法,使得: @Override public int hashCode(){ return 9; } 这将导致所有HashMap键具有相同的索引。 它们是否会被放置在地图中的链表结构中,还是地图只包含替换所有其他键的最后一个键?

Java – 如何从最接近特定数字的散列映射中查找值?

嗨,我有一个HashMap ,还有一个返回一个称为answer的double值的函数。 我想检查HashMap中哪个值最接近答案,然后获取该值的键并打印它。 HashMap output = new HashMap(); contents (“A”, 0) (“B”, 0.25) (“C”, 0.5) (“D”, 0.75) (“E”, 1) 假设我的一个函数的答案是0.42,我如何检查它最接近的值,然后获取该值的键。 我无法切换HashMap的键和值(因为前一个函数将值分配给每个字母),否则最好遍历每个键并获取值。

Java Hashmap – multithreading放

我们最近在我的工作中讨论过我们是否需要使用ConcurrentHashMap,或者我们是否可以在multithreading环境中使用常规HashMap。 HashMaps的参数是两个:它比ConcurrentHashMap快,所以我们应该尽可能使用它。 而ConcurrentModificationException显然只会在你修改时迭代Map时出现,所以“如果我们只从地图中PUT和GET,那么常规HashMap有什么问题?” 是争论。 我认为并发PUT操作或并发PUT和READ可能会导致exception,所以我组合了一个测试来certificate这一点。 测试很简单; 创建10个线程,每个线程将相同的1000个键值对一次又一次地写入地图5秒钟,然后打印生成的地图。 结果实际上很混乱: Length:1299 Errors recorded: 0 我认为每个键值对在HashMap中都是唯一的,但是通过查看地图,我可以找到多个相同的Key-Value对。 我期待某种exception或损坏的键或值,但我没想到这一点。 这是怎么发生的? 这是我使用的代码,供参考: public class ConcurrentErrorTest { static final long runtime = 5000; static final AtomicInteger errCount = new AtomicInteger(); static final int count = 10; public static void main(String[] args) throws InterruptedException { List threads = new LinkedList(); final Map map […]

为什么getEntry(Object key)没有在HashMap上公开?

这是我的用例,我有一个逻辑上等于我的HashMap键但不是同一个对象(不是==)的对象。 我需要从HashMap中获取实际键对象,以便我可以在其上进行同步。 我知道我可以遍历ketSet,但与散列相比,这是缓慢的。 通过java.util.HashMap实现,我看到了一个正是我需要的getEntry(Object key)方法。 知道为什么没有曝光吗? 你能想到我能把钥匙拿出来的其他任何方式吗?

带字节数组键和字符串值的HashMap – containsKey()函数不起作用

我正在使用HashMap:byte []键和String值。 但我意识到即使我使用相同的对象(相同的字节数组和相同的字符串值) myList.put(TheSameByteArray, TheSameStringValue) 在HashMap中,表仍然插入一个具有不同HashMapEntry的新对象。 然后函数containsKey()无法正常工作。 有人可以帮我解释一下吗? 我怎样才能解决这个问题? 谢谢。 (Android Java) @Override public boolean containsKey(Object key) { if (key == null) { return entryForNullKey != null; } int hash = Collections.secondaryHash(key); HashMapEntry[] tab = table; for (HashMapEntry e = tab[hash & (tab.length – 1)]; e != null; e = e.next) { K eKey = […]

并发hashmap不需要同步的getter / setter吗?

如果我使用并发hashmap并且我有设置和获取值的方法,因为我使用并发hashmap我需要使getter和setter同步吗? 这是多余的吗? 一种设计更好吗? 另外,没有同步的并发hashmap比具有synchronized getter和setter的hashmap更快吗? 这是一个高性能系统 谢谢