我在检查一个数组中的数组是否与列表中的数组相同时遇到问题。这是问题代码,它似乎不会阻止重复添加。 Arrays.equals()似乎也不起作用:
if(!uniqueTiles.contains(playerPositions[i])) {
uniqueTiles.add(playerPositions[i]);
}
到目前为止,这是整个方法:
// gets the area in fishZone that the bot should walk to, based on the positions
// of clusters of players
List<Player> players = getPlayers().getAll();
int validPlayerCount = 0;
// count valid players
for (int i = 0; i < players.size(); i++) {
if((players.get(i).getName() != myPlayer().getName()) && fishingZone.contains(players.get(i))) {
validPlayerCount++;
}
}
int[][] playerPositions = new int[validPlayerCount][2];
List<int[]> uniqueTiles = new ArrayList<int[]>();
// put the x and y coordinates of all nearby valid players into a 2d array
for (int i = 0; i < validPlayerCount; i++) {
playerPositions[i][0] = players.get(i).getX();
playerPositions[i][1] = players.get(i).getY();
if(!uniqueTiles.contains(playerPositions[i])) {
uniqueTiles.add(playerPositions[i]);
}
}
如您所见,uniqueTiles是一个arrayList,因为它需要灵活的大小,而playerPositions是一个二维数组。
答案 0 :(得分:0)
如果您不想要重复,请不要使用List:
与集合不同,列表通常允许重复元素。
在Java中,使用方法equals
和hashCode
进行对象比较。您可以使用第三方库,例如Apache Commons Lang的EqualsBuilder和HashCodeBuilder来帮助您实现这些库。
如果您感到好奇,请查看List.contains
的源代码。
答案 1 :(得分:0)
试试这个方法:
TreeSet<Integer[]> set = new TreeSet<>((o1, o2) -> Arrays.deepEquals(o1, o2) ? 0 : 1);
set.add(new Integer[]{1, 2, 4});
set.add(new Integer[]{1, 2, 4});
set.add(new Integer[]{1, 2, 4});
System.out.println(set);