与多值键HashMap类(HashMap with multiple valued keys)

2019-09-17 03:17发布

是否有可能创建一个HashMap,其关键是整数数组?

I'm习惯使用Python和刚刚我开始使用Java。 在我的工作,我需要创建一个像钥匙一个HashMap:

map.put([5,2], 1);
map.put([3,2], 0);

等等。 I'm稍后将使用它测试,如果一对这些数字都出现在地图上,如果是的话,做的事,如果没有,继续。

为此我尝试了以下内容:

Map<Array, Boolean> test = new HashMap<Array, Boolean>();
int[] a1 = {5,2};
test.put(a1, true);

Eclipse中给人的消息(“的观点并不是适用于INT [] ...”)。 但是,任何配置从来就做我得到一些错误。

我尝试使用ArrayList中,对象地图,嵌套的HashMap等内,但没有工作(在python it's很容易的,我倒是只写字典[(5,2)] = 1,所以我在Java中想象there'什么东西简单的像)。 我建议到数字转换成字符串,并添加然后之间的冒号,如:

map.put("5:2", 1);

后来我上再次突破字符串,但如果这是解决方案I'll回到Python的;)!

也许这是一个很简单的问题,但我couldn't找到答案,希望你能帮助我。

提前致谢!

Answer 1:

如果您要检查您的项目是否存在等,你可以使用一个Set (一个有用的具体实现是HashSet

final Set<List<Integer>> population;

population = new HashSet<List<Integer>>();
population.add(Arrays.asList(1, 2));

if (population.contains(Arrays.asList(1, 2)))
{
  ...
}

您可以使用List ,因为我在上面所做的-但是,这并不能保证所有的名单是完全两个元素长(如果这确实是一个约束)。 为了使它有点更强大的,你可以创建自己的类来表示的元组。 如果你这样做,确保你实现equals()hashCode() (这里是一个文章,解释好习惯 )。

Arrays.asList()是创建在线中的代码的列表的一种有用的方法。 一个更普遍的列表是一个ArrayList



Answer 2:

最简单的事情将是一个Map<List<Integer>, Boolean> -甚至只是一个Set<List<Integer>> ,因为你不关心的价值不亚于是否的关键是存在的。

将更多的Java-Y解决方案将是一些类,代表了两个整数:

public class Coordinate { // or whatever
    private final int x;
    private final int y;

    // constructor and overrides for equals, hashCode and toString
}

然后有一个Set<Coordinate>

这被认为是更惯用的Java,因为该类名称告诉你什么这一套是 - 并强制它的使用这种方式。 一个Set<List<Integer>> ,在另一方面,可能有很多的东西:坐标,彩票采摘,社会安全号码的人在一个给定的部门,信用卡付款......你的程序员不知道刚才的方法通过查看类型,很容易为一组数字对的事情,这意味着在另一种情况下被意外使用。 一个Set<Coordinate>不能比一组坐标的任何其他。



Answer 3:

这工作:

Map<List<Integer>,Boolean> map = new HashMap<>();
map.put( Arrays.asList( new Integer(1), new Integer(2) ), false );
map.put( Arrays.asList( 4, 5 ), true ); // Integer type is inferred and ints are autoboxed

map.get( Arrays.asList( 1, 2 ) ); // gets the Boolean object for "false"


Answer 4:

其实Java是一个很多比Python少的表现,所以你必须写更多的代码。

我认为你需要使用地图的ArrayList以下列方式:

ArrayList al = map.get("key");
if (al == null) {
    al = new ArrayList();
    map.put("key", al)
}
al.add(some_object);

您也可以使用数组作为键(如你要求的),也许你想要一个不可改变的阵列。 对于哈希表工作的关键是使用一些对象,具有很好的落实equalshashCode

这是它是用Java做的方式,你可以使用任何类型的集合,虽然,集是比较常见的。

干杯!



文章来源: HashMap with multiple valued keys
标签: java hashmap