标签: hashmap

是否可以从哈希映射运行函数?

如何从哈希映射运行函数。在本例中,我尝试运行 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)

function hashmap kotlin

0
推荐指数
1
解决办法
206
查看次数

为什么并发放入 ConcurrentHashMap 不会产生预期结果?

我正在尝试使用多个线程测试并发放入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 concurrency multithreading hashmap concurrenthashmap

0
推荐指数
1
解决办法
65
查看次数

是否有必要重写非哈希数据结构中的 hashcode 方法

我对Java中对象的哈希码方法的理解是:需要计算对象的哈希码,该哈希码又用于计算对象在哈希数据结构(如hashMap)中的索引/存储桶位置。

那么,对于不与哈希数据结构一起使用的类,不需要在其中实现 hashCode() 方法,这样说是否正确?换句话说,对于非哈希数据结构来说,重写 equals() 方法是否足够?

如果我的假设是错误的,也请纠正我。

java equals hashmap hashcode

0
推荐指数
1
解决办法
54
查看次数

是否可以仅迭代所提供的哈希映射条目的一半?

我有一个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)

有没有办法做到这一点?如果是,您能解释一下如何吗?

java iteration hashmap

0
推荐指数
1
解决办法
251
查看次数

Dart 中的无开关枚举

我想在 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 “取决于它自己”。我不明白它如何比带有开关的版本更依赖于自身 - 但是,嘿,编译器是这么说的。这是一个飞镖错误,还是我错过了什么?有没有更好的方法来创建具有辅助吸气剂的枚举?

如果有一种方法不需要输入枚举标识符两次并且必须保持副本对齐,那就太好了——就像面向对象的方法一样。

oop enums hashmap switch-statement dart

0
推荐指数
1
解决办法
54
查看次数

Hash函数的整数低于5000?

哪个是最好和最简单的哈希函数,它为5000以下的整数生成唯一的哈希值?

实际问题是我有一个大小约为50的整数数组,包含1到5000之间的值.现在我必须进行反向映射,即给定一个值,我必须找出它存储的索引.我知道可以通过使用二进制搜索来完成,因为我的数组已经排序.

请不要为C建议任何哈希库.

c hash hashtable hashmap

-1
推荐指数
1
解决办法
300
查看次数

在HashMap中覆盖之前检索先前的键映射值

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=SaralAndroid.有什么方法可以获得此密钥的先前值,这是J2EE什么?

java hashmap

-1
推荐指数
1
解决办法
1712
查看次数

Java HashMap无法正常工作

我想我做了所有事情,但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)

java equals hashmap hashcode

-1
推荐指数
1
解决办法
1385
查看次数

在C中实现哈希图

我需要像在c ++中使用map一样,阻碍c中的键和值。

请分享最简单的示例以在c中的存储中存储唯一的键和值。键,我可以是任何字符串,值将是字符串。

谢谢

c c++ hashmap hashcode

-1
推荐指数
1
解决办法
4165
查看次数

HashMap数据被意外删除

我正在创建一个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时,我得到的输出是预期的,包含字段hiveNodehiveListHashmap中的现有字段.<"hiveNode":"hiveList">

完成后,我假设我放入HashMap的数据hiveList将继续存在,所以我清除了hiveList数组hiveList.clear();

但是当我在清除hiveList之后打印Hashmap时,我发现来自hiveList的数据也从HashMap中消失了.

清除hiveList后打印HashMap会导致: <"hiveNode": >

我不明白这种行为,如果有人能对此有所了解,我将不胜感激.

java collections json hashmap

-1
推荐指数
1
解决办法
197
查看次数