是否有可能创建一个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找到答案,希望你能帮助我。
提前致谢!
如果您要检查您的项目是否存在等,你可以使用一个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
。
最简单的事情将是一个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>
不能比一组坐标的任何其他。
这工作:
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"
其实Java是一个很多比Python少的表现,所以你必须写更多的代码。
我认为你需要使用地图的ArrayList
以下列方式:
ArrayList al = map.get("key");
if (al == null) {
al = new ArrayList();
map.put("key", al)
}
al.add(some_object);
您也可以使用数组作为键(如你要求的),也许你想要一个不可改变的阵列。 对于哈希表工作的关键是使用一些对象,具有很好的落实equals
和hashCode
。
这是它是用Java做的方式,你可以使用任何类型的集合,虽然,集是比较常见的。
干杯!