如何从哈希映射运行函数。在本例中,我尝试运行 Info.sendInfo 函数。
abstract class Listener: ListenerAdapter() {
fun checkCommand(args: List<String>, event: MessageReceivedEvent) {
val map: Map<String, Unit> = mapOf(
"!info" to Info.sendInfo(event)
)
map[args[0]].runFunction
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用多个线程测试并发放入ConcurrentHashMap,但处理后的地图大小不是我所期望的。
我有以下代码将 1000 个条目插入到 a 中ConcurrentHashMap:
@Test
public void testThreadSafetyConcurrentHashMap() {
Map<Integer, Integer> map = new ConcurrentHashMap<>();
Runnable runnable = () -> {
for (int i = 0; i < 1000; i++) {
map.put(i, i);
}
};
ExecutorService executorService = Executors.newFixedThreadPool(4);
for (int i = 0; i < 4; i++) {
executorService.submit(runnable);
}
System.out.println(map.size());
}
Run Code Online (Sandbox Code Playgroud)
我预计会map.size()收到 1000 件商品,但并不是每次都收到。
有人能告诉我问题是什么吗?我认为4个线程同时放入1000个项目,最终会导致总共1000个项目吗?
我对Java中对象的哈希码方法的理解是:需要计算对象的哈希码,该哈希码又用于计算对象在哈希数据结构(如hashMap)中的索引/存储桶位置。
那么,对于不与哈希数据结构一起使用的类,不需要在其中实现 hashCode() 方法,这样说是否正确?换句话说,对于非哈希数据结构来说,重写 equals() 方法是否足够?
如果我的假设是错误的,也请纠正我。
我有一个Hashmap< String, String> p,我正在尝试用“-”替换键值的一半例如,假设我当前的哈希图具有以下值
"A", "100"
"B", "400"
"C", "600"
"D", "845"
Run Code Online (Sandbox Code Playgroud)
我想通过将值从提供的整数更改为“-”来以某种方式仅操作值键的一半(在本例中为前两个)。所以它看起来像这样:
"A", "-"
"B", "-"
"C", "600"
"D", "845"
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这样做,但没有成功。
for (String i : p.keySet()/2) {
p.replace(i, '-')
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?如果是,您能解释一下如何吗?
我想在 Dart 中做这样的事情
enum Result {
dns,
dnf,
dnq,
finish,
active;
get description {
switch(this){
case dns: return 'Not Started';
case dnf: return 'Disqualified';
case dnq: return 'Disqualified';
case finish: return 'Finished';
case active: return 'Underway';
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码有效,但我对开关感到困扰。我有一种直觉,应该有一种方法可以在没有开关的情况下做到这一点——也许可以用地图?但我不知道怎么做。
我试过这个
enum Result {
dns,
dnf,
dnq,
finish,
active;
final Map _description = {
dns: 'Not Started',
dnf: 'Disqualified',
dnq: 'Disqualified',
finish: 'Finished',
active: 'Underway'
};
get description => _description[this];
}
Run Code Online (Sandbox Code Playgroud)
但这显然行不通,因为 dart 说 _description “取决于它自己”。我不明白它如何比带有开关的版本更依赖于自身 - 但是,嘿,编译器是这么说的。这是一个飞镖错误,还是我错过了什么?有没有更好的方法来创建具有辅助吸气剂的枚举?
如果有一种方法不需要输入枚举标识符两次并且必须保持副本对齐,那就太好了——就像面向对象的方法一样。
哪个是最好和最简单的哈希函数,它为5000以下的整数生成唯一的哈希值?
实际问题是我有一个大小约为50的整数数组,包含1到5000之间的值.现在我必须进行反向映射,即给定一个值,我必须找出它存储的索引.我知道可以通过使用二进制搜索来完成,因为我的数组已经排序.
请不要为C建议任何哈希库.
我HashMap根据我的代码创建了一个...
HashMap map=new HashMap();//HashMap key random order.
map.put("Amit","Java");
map.put("Saral","J2EE");
map.put("Saral","Andriod");//same key but different value
map.put("Nitin","PHP");
map.put("hj","Spring1");
System.out.println("There are "+map.size()+" elements in the map.");
System.out.println("Content of Map are...");
Set s=map.entrySet();
Iterator itr=s.iterator();
while(itr.hasNext()){
Map.Entry m=(Map.Entry)itr.next();
System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode());
}
Run Code Online (Sandbox Code Playgroud)
当我执行这个代码,该值key=Saral是Android.有什么方法可以获得此密钥的先前值,这是J2EE什么?
我想我做了所有事情,但HashMap.get返回null.hashCode返回相同的整数,equals返回true,key是不可变的,但现在仍在工作.
我错过了什么?
这是我的代码:
public enum MyEnum_1 `AA1, AA2, AA3, AA4`;
public enum MyEnum_2 `BB1, BB2, BB3, BB4`;
public void MyClass()
{
...
final MyEnum_1 enum1;
final MyEnum_2 enum2;
public int hashCode()
{
return (enum1.ordinal() * 100 + enum2.ordinal());
}
public boolean equals(MyClass obj2)
{
if (obj2 == null) return false;
else return (enum1.equals(obj2.getEnum1()) && enum2.equals(obj2.getEnum2()));
}
...
}
...
Map<MyClass, MyOtherClass> mappp = new HashMap<MyClass, MyOtherClass>();
...
mappp.put(obj1, other_obj1);
MyClass obj2 = new MyClass(obj1.getEnum1(), obj1.getEnum2());
System.out.println("hashCode: " + (obj1.hashCode() == …Run Code Online (Sandbox Code Playgroud) 我需要像在c ++中使用map一样,阻碍c中的键和值。
请分享最简单的示例以在c中的存储中存储唯一的键和值。键,我可以是任何字符串,值将是字符串。
谢谢
我正在创建一个HashMap,如下所示:
private HashMap <String, JSONArray> HiveMap;
HiveMap = new HashMap <String, JSONArray>();
Run Code Online (Sandbox Code Playgroud)
还有一个私有类变量来存储一些计算数据,这些数据将在计算完成后放入HashMap:
private JSONArray hiveList;
Run Code Online (Sandbox Code Playgroud)
在计算hiveList之后,我将hiveList放入创建的HashMap(HiveMap)中:
HiveMap.put(hiveNode,hiveList);
Run Code Online (Sandbox Code Playgroud)
当我现在打印出HiveMap时,我得到的输出是预期的,包含字段hiveNode和hiveListHashmap中的现有字段.<"hiveNode":"hiveList">
完成后,我假设我放入HashMap的数据hiveList将继续存在,所以我清除了hiveList数组hiveList.clear();
但是当我在清除hiveList之后打印Hashmap时,我发现来自hiveList的数据也从HashMap中消失了.
清除hiveList后打印HashMap会导致: <"hiveNode": >
我不明白这种行为,如果有人能对此有所了解,我将不胜感激.