Java将2d数组与arrayList中的2d数组进行比较

时间:2017-12-23 18:25:34

标签: java arrays arraylist

我在检查一个数组中的数组是否与列表中的数组相同时遇到问题。这是问题代码,它似乎不会阻止重复添加。 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是一个二维数组。

2 个答案:

答案 0 :(得分:0)

如果您不想要重复,请不要使用List

  

与集合不同,列表通常允许重复元素。

在Java中,使用方法equalshashCode进行对象比较。您可以使用第三方库,例如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);