据我所知,java.util.Hashtable同步java.util.Map接口中的每个方法,同时Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托给实际的同步方法hash_map(如果我错了,请纠正我).
我有两个问题:
它与同步每个方法和包装类有什么区别?有哪些方案可以选择其中一种?
我们这样做会发生什么Collections.synchronizedMap(hash_table)?这是否等于简单地使用正常java.util.Hashtable?
我正在研究HashMapJava 中的实现,并且一度陷入困境.功能
是如何indexFor计算的?
static int indexFor(int h, int length) {
return h & (length-1);
}
Run Code Online (Sandbox Code Playgroud)
谢谢
快速提问主要是为了满足我对这个话题的好奇心.
我正在编写一些带有SQlite数据库后端的大型python程序,将来会处理大量的记录,所以我需要尽可能地进行优化.
对于一些函数,我在字典中搜索键.我一直在使用"in"关键字进行原型设计,并计划稍后返回并优化这些搜索,因为我知道"in"关键字通常是O(n)(因为这只是转换为python迭代整个列表并进行比较每个元素).但是,由于python dict基本上只是一个哈希映射,python解释器是否足够智能解释:
if(key in dict.keys()):
...code...
Run Code Online (Sandbox Code Playgroud)
至:
if(dict[key] != None):
...code...
Run Code Online (Sandbox Code Playgroud)
它基本上是相同的操作,但顶部是O(n),底部是O(1).
我很容易在我的代码中使用底部版本,但后来我只是好奇并且想我会问.
我最近发现将调用C++中哈希映射的实现unordered_map.
当我抬起头,为什么他们不只是使用hash_map,我发现,显然有与实施的兼容性问题hash_map是unordered_map可以解决(更多关于它在这里).
该wiki页面没有提供更多信息,所以我想知道是否有人知道hash_map该unordered_map解决方案的一些问题.
我正在编写有很多表查找的程序.因此,我仔细阅读Haskell的文档时,我偶然发现了Data.Map(当然),但也Data.HashMap和Data.Hashtable.我不是哈希算法的专家,在检查包之后,它们看起来都非常相似.因此我想知道:
1:如果有什么主要差异?
2:在大约4000个键值对的地图/表上进行大量查找,哪个性能最高?
我需要使用key作为整数创建一个hashmap,它应该包含不同数据类型的多个值.例如,如果键是msg id且值是
那么如何使用单个键将不同数据类型的值存储到hashmap中?
我想获得HashMap基于密钥的价值.
HashMap<String, ArrayList<String>> map
= new HashMap<String, ArrayList<String>>();
ArrayList<String> arrayList = new ArrayList<String>();
map.put("key", arrayList);
request.setAttribute("key", map);
Run Code Online (Sandbox Code Playgroud)
我做的是
<c:forEach var="map" items="${requestScope.key}">
<c:forEach var="hash" items="${map.value}">
<option><c:out value="${hash}"/></option>
</c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
但似乎它正在打印所有内容,我想要做的是获取价值取决于关键像:hash.key或者其他什么
更新:
我做了类似的事情,但它仍然无法正常工作
<c:forEach var="map" items="${requestScope.key}">
<c:forEach var="hash" items="${map['key']}">
<option><c:out value="${hash}"/></option>
</c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
和StackTrace:Property 'External' not found on type java.util.HashMap$Entry
我很确定真的有这样的关键.
我有一个spiner,我想设置一个键和一个值,我使用HashMap,这是工作,但显示一行,如下所示:

码:
final View rootView = inflater.inflate(R.layout.fragment_photos, container, false);
Spinner spin=(Spinner)rootView.findViewById(R.id.spinner1);
HashMap<Integer, String> P_Hash=new HashMap<Integer, String>();
Update Get_Information=new Update(rootView.getContext());
ArrayList<String> Province_NAME=new ArrayList<String>();
Province_NAME=Get_Information.GET_Province();
ArrayList<Integer> Province_ID=new ArrayList<Integer>();
Province_ID=Get_Information.Get_Province_ID();
for (int i = 0; i < Province_ID.size(); i++)
{
P_Hash.put(Province_ID.get(i), Province_NAME.get(i));
Log.d("Province_ID.get(i)", Province_ID.get(i)+"");
Log.d(" Province_NAME.get(i)", Province_NAME.get(i)+"");
}
ArrayAdapter<HashMap<Integer, String>> adapter = new ArrayAdapter<HashMap<Integer,String>>(rootView.getContext(), android.R.layout.simple_spinner_item);
adapter.add(P_Hash);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud) 这是我想要做的:
use std::collections::HashMap;
fn main() {
let mut my_map = HashMap::new();
my_map.insert("a", 1);
my_map.insert("b", 3);
my_map["a"] += 10;
// I expect my_map becomes {"b": 3, "a": 11}
}
Run Code Online (Sandbox Code Playgroud)
引发以下错误:
error[E0594]: cannot assign to immutable indexed content
--> src/main.rs:8:5
|
8 | my_map["a"] += 10;
| ^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `std::collections::HashMap<&str, i32>`
Run Code Online (Sandbox Code Playgroud)
我真的不明白这意味着什么,因为我做了HashMap可变的.当我尝试更新a中的元素时vector,我得到了预期的结果:
error[E0594]: cannot assign to data in …Run Code Online (Sandbox Code Playgroud) 我已经尝试构建自己的Map以提高特殊环境的性能,并且我意识到一些非常有趣的事情:创建一个new Hashmap<Integer,String>(2000)比它更快new Object[2000]- 无论我执行这些命令的顺序如何.这对我来说非常困惑,尤其是 因为Hashmap构造函数包含一个table = new Entry[capacity],根据这个.我的测试平台有问题吗?
public static void test(int amm){ //amm=1_000_000
Map<Integer,String> m1 = null;
Object[] arr = null;
long time = System.nanoTime();
for(int i = 0; i < amm; i++){
m1 = new HashMap<Integer, String>(2000);
}
System.out.println("m1: " + (System.nanoTime() - time)); //m1: 70_455_065
time = System.nanoTime();
for(int i = 0; i < amm; i++){
arr = new Object[2000];
}
System.out.println("arr: " + (System.nanoTime() - time)); //arr: 1_322_473_803 …Run Code Online (Sandbox Code Playgroud)