gpt4 book ai didi

java - 在包含集合、对象的 HashMap 中搜索这些对象

转载 作者:行者123 更新时间:2023-12-01 14:37:36 26 4
gpt4 key购买 nike

我有一类对象。理想情况下,我想将它们全部放入五个单独的集合中。然后,我想将所有五个集合添加到 HashMap 中,并为每个集合指定一个唯一标识符。

最后,我希望能够在 HashMap 中搜索的不是集合,而是集合中包含的对象。这可能吗?我已经查找了尽可能多的有关 HashMap 的信息,但我似乎找不到这样做的方法。如果我不能,有人有什么好的选择吗?

编辑 - 示例代码:

public class Cell{
private int x;
private int y;

public Example(int x, int y) {
this.x= x;
this.y= y;
}
}

然后,使用 MouseListener 检测用户在网格上单击的位置。我通过调用方法返回下一艘船放置的时间来确定他们放置了多少艘船(正在对战舰游戏进行建模)。然后我这样做:

for (int i = 0; i < currentShipLength; i++)
playerGridLogic.addCellsWithShips(new Cell(x, y+ i));
numberOfPlayerShipsPlaced++;

最后,一旦所有船只都放置完毕,我想将它们添加到 HashMap 中。目前,我正在将所有船只添加到一个大集合中。当计算机单击网格中的单元格时,将执行以下操作:

if (playerGridLogic.getCellsWithShips().contains(attackedCell)) {
playerGrid.getCellArray()[xPos][yPos].setBackground(Color.ORANGE);
}
else {
playerGrid.getCellArray()[xPos][yPos].setBackground(Color.MAGENTA);
}

虽然这一切都很完美,但它只告诉我一艘船被击中了。它没有告诉我是哪一艘,我想知道哪一艘,这样我就可以在该船被摧毁时向用户输出信息。

我认为最简单的方法是创建五个集合而不是一个集合,然后将它们添加到 HashMap 中,如上所述。但是,我不确定这是否可能 - 我的实验到目前为止还没有成功。

最佳答案

这是我写的一个简单示例。

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;


public class Example{
public static void main(String[] args) {
MyObject obj = new MyObject("Kevin");
MyObject obj1 = new MyObject("Chris");
MyObject obj2 = new MyObject("Oliver");
MyObject obj3 = new MyObject("Jack");
MyObject obj4 = new MyObject("Joe");

Set<MyObject> set = new HashSet<MyObject>();
Set<MyObject> set1 = new HashSet<MyObject>();
Set<MyObject> set2 = new HashSet<MyObject>();
Set<MyObject> set3 = new HashSet<MyObject>();
Set<MyObject> set4 = new HashSet<MyObject>();

set.add(obj);
set1.add(obj1);
set2.add(obj2);
set3.add(obj3);
set4.add(obj4);

Map<String,Set<MyObject>> map = new HashMap<String,Set<MyObject>>();
map.put("s", set);
map.put("s1", set1);
map.put("s2", set2);
map.put("s3", set3);
map.put("s4", set4);

MyObject found = search(map, "Jack");
System.out.println(found.name);
}

private static MyObject search(Map<String, Set<MyObject>> map, String string) {
for(Set<MyObject> s: map.values()){
for(MyObject mObj:s){
if(mObj.name.equals(string)){
return mObj;
}
}
}
return null;
}

}

class MyObject{
String name;

public MyObject(String name){
this.name = name;
}
}

关于java - 在包含集合、对象的 HashMap 中搜索这些对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16333666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com