我知道有一个WeakHashMapin java.util,但由于它只使用了WeakReferences,只有这个Map引用,引用的对象将在下一个GC循环中丢失.因此,如果您想要缓存随机数据,这几乎是无用的,这很可能会再次被请求而不会在其余时间进行硬链接.最好的解决方案是使用SoftReferences代替的地图,但我没有在Java RT Package中找到一个.
所以我HashMap在Java中有两个关于s的问题:
初始化一个正确的方法是HashMap什么?我认为在我的情况下使用可能是最好的:
HashMap x = new HashMap();
Run Code Online (Sandbox Code Playgroud)
但Eclipse一直建议我使用:
HashMap<something, something> map = new HashMap();
Run Code Online (Sandbox Code Playgroud)
哪个更好?
可以HashMap将不同类型的对象/数据类型保存为值吗?例如,这会工作并且没问题:
map.put("one", 1);
map.put("two", {1, 2});
map.put("three", "hello");
Run Code Online (Sandbox Code Playgroud)
在第一个中put(),我想要int一个值作为值,在第二个中int[],第三个是字符串.用HashMaps 做Java可以吗?另外,可以将a HashMap作为值存储在一个HashMap?
如何将ConcurrentHashMap的性能与HashMap进行比较,特别是.get()操作(我特别感兴趣的是只有少数几个项目的情况,范围可能在0-5000之间)?
有没有理由不使用ConcurrentHashMap而不是HashMap?
(我知道不允许使用空值)
更新
只是为了澄清,显然在实际并发访问的情况下性能会受到影响,但是如何在没有并发访问的情况下比较性能呢?
我最初写了一个ArrayList并存储了唯一值(用户名,即Strings).我后来需要使用它ArrayList来搜索用户是否存在.这是O(n)为了搜索.
我的技术负责人希望我将其更改为a HashMap并将用户名存储为数组中的键,并将值存储为空Strings.
所以,在Java中 -
hashmap.put("johndoe","");
Run Code Online (Sandbox Code Playgroud)
我可以通过运行来查看此用户是否存在 -
hashmap.containsKey("johndoe");
Run Code Online (Sandbox Code Playgroud)
这是O(1)对的?
我的主管说这是一种更有效的方法来实现这一点,这对我来说很有意义,但是将hash/empty作为值放在hashmap中并将其中的元素作为键存放似乎有点过时了.
我的问题是,这是一个好方法吗?效率节拍ArrayList#contains或一般的阵列搜索.有用.我担心的是,我没有看到其他人在搜索后这样做.我可能在某个地方错过了一个明显的问题,但我看不到它.
我想为不同的帐户保留一些总计.在C++中我会像这样使用STL:
map<string,double> accounts;
// Add some amounts to some accounts.
accounts["Fred"] += 4.56;
accounts["George"] += 1.00;
accounts["Fred"] += 1.00;
cout << "Fred owes me $" << accounts['Fred'] << endl;
Run Code Online (Sandbox Code Playgroud)
现在,我将如何在C#中做同样的事情?
Java中的ConcurrentHashMap和Hashtable有什么区别?
哪个对线程应用程序更有效?
我想知道Java如何在Map(HashMap或Hashtable)添加项目时订购项目.键是由哈希码,内存引用还是按分配优先级排序的?
这是因为我注意到它们中的相同对Map并不总是在同一个顺序中
将可变对象用作Hashmap键是不好的做法吗?当您尝试使用已修改足以更改其哈希码的密钥从Hashmap检索值时会发生什么?
例如,给定
class Key
{
int a; //mutable field
int b; //mutable field
public int hashcode()
return foo(a, b);
// setters setA and setB omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
用代码
HashMap<Key, Value> map = new HashMap<Key, Value>();
Key key1 = new Key(0, 0);
map.put(key1, value1); // value1 is an instance of Value
key1.setA(5);
key1.setB(10);
Run Code Online (Sandbox Code Playgroud)
如果我们现在打电话map.get(key1)怎么办?这是安全的还是可取的?或者行为是否依赖于语言?
这是一个简单的问题,我有一个简单的HashMap,我想要反转键和值.
HashMap<Character, String> myHashMap = new HashMap<Character, String>();
myHashMap.put('a', "test one");
myHashMap.put('b', "test two");
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的HashMap,我在其中放置了对立面.
HashMap<String, Character> reversedHashMap = new HashMap<String, Character>();
e.g. Keys "test one" & "test two" and values 'a' & 'b'.
Run Code Online (Sandbox Code Playgroud)