因此,如果我在迭代时尝试从Java HashSet中删除元素,我会得到一个ConcurrentModificationException.从HashSet中删除元素子集的最佳方法是什么,如下例所示?
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
// Throws ConcurrentModificationException
for(Integer element : set)
if(element % 2 == 0)
set.remove(element);
Run Code Online (Sandbox Code Playgroud)
这是一个解决方案,但我认为它不是很优雅:
Set<Integer> set = new HashSet<Integer>();
Collection<Integer> removeCandidates = new LinkedList<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
for(Integer element : set)
if(element % 2 == 0)
removeCandidates.add(element);
set.removeAll(removeCandidates);
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个问题hash_map,并map在C++中.我明白这map是STL,但hash_map不是标准.这两者有什么区别?
我有一个整数的2D数组.我希望将它们放入HashMap中.但我想基于Array Index访问HashMap中的元素.就像是:
对于A [2] [5],map.get(2,5)它返回与该键相关联的值.但是如何使用一对键创建hashMap?或者一般来说,多个键:Map<((key1, key2,..,keyN), Value)我可以使用get(key1,key2,... keyN)访问元素.
编辑:发布问题3年后,我想补充一点
我遇到了另一种方式NxN matrix.
数组索引,i和j可被表示为一个单一的key方式如下:
int key = i * N + j;
//map.put(key, a[i][j]); // queue.add(key);
Run Code Online (Sandbox Code Playgroud)
并且可以通过key以下方式从这些指数中恢复指数:
int i = key / N;
int j = key % N;
Run Code Online (Sandbox Code Playgroud) 我们如何排序HashMap<key, ArrayList>?
我想根据一个值来排序ArrayList.
我需要将a转换HashMap<String, Object>为数组; 有谁能告诉我它是如何完成的?
我试图保持包含成员的类的临时容器:
HashMap<Integer,myObject> myobjectHashMap
Run Code Online (Sandbox Code Playgroud)
一个名为myobjectsList的类
然后我做
myojbectsListA = new myojbectsList();
myojbectsListB = new myobjectsList();
Run Code Online (Sandbox Code Playgroud)
然后:将一些hashmap项添加到A(like2)
然后
myobjectListB = myobjectListA; //B has 2
Run Code Online (Sandbox Code Playgroud)
然后:将hashmap项添加到A; (还有4个)
然后将A返回到存储在B中的项目;
myobjectListA = myobjectListb;
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候,B在A中增长,而我正在向A添加hashmap项目.A现在有6个项目,因为B有6个.
我希望A在C++的最后一次分配之后仍然有原始的2,我将使用副本与对象,什么是Java等价物?
补充:好的我没有解释这个问题.MyObjectsList不包含HashMap,它来自一个具有HashMap成员的MyBaseOjbectsList类,MyObjectsList扩展了MyBaseOjbectsList.这有什么不同吗?
我需要创建一个空地图.
if (fileParameters == null)
fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;
Run Code Online (Sandbox Code Playgroud)
问题是上面的代码产生了这个警告: 类型安全:从Map映射到HashMap的未选中
创建此空地图的最佳方法是什么?
我们正在用C++开发一个高性能的关键软件.我们需要一个并发的哈希映射并实现一个.所以我们写了一个基准来弄清楚我们的并发哈希映射与之比较慢多少std::unordered_map.
但是,std::unordered_map似乎是非常慢......所以这是我们的微基准测试(对于并发映射,我们产生了一个新的线程,以确保锁定不会被优化掉,并注意我从来没有inser 0因为我也基准测试google::dense_hash_map,需要一个空值):
boost::random::mt19937 rng;
boost::random::uniform_int_distribution<> dist(std::numeric_limits<uint64_t>::min(), std::numeric_limits<uint64_t>::max());
std::vector<uint64_t> vec(SIZE);
for (int i = 0; i < SIZE; ++i) {
uint64_t val = 0;
while (val == 0) {
val = dist(rng);
}
vec[i] = val;
}
std::unordered_map<int, long double> map;
auto begin = std::chrono::high_resolution_clock::now();
for (int i = 0; i < SIZE; ++i) {
map[vec[i]] = 0.0;
}
auto end = std::chrono::high_resolution_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin);
std::cout << "inserts: " << …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个HashMap,它将整数作为键,对象作为值.
我的语法是:
HashMap<int, myObject> myMap = new HashMap<int, myObject>();
Run Code Online (Sandbox Code Playgroud)
但是,返回的错误是 - 令牌"int"上的语法错误,此令牌后预期的维度 - 我不明白为什么我应该添加维度(即:将int转换为数组)因为我只需要存储一个数字作为关键.
我能做什么?
提前致谢!:)
下面是HashMap中包含的值
statusName {Active=33, Renewals Completed=3, Application=15}
Run Code Online (Sandbox Code Playgroud)
获取第一个密钥的Java代码(即活动)
Object myKey = statusName.keySet().toArray()[0];
Run Code Online (Sandbox Code Playgroud)
我们如何收集第一个键"值"(即33),我想将"键"和"值"存储在单独的变量中.