2

我想做的是让一个数组将自己与另一个数组进行比较,如果它在比较数组中找到重复项,它将跳过以下语句,这就是我目前所拥有的

for (int count=0; count < userId.length; count++) {
    for (int integer=0; userId[count] != excluded[integer]; integer++) {
        // The arrays hold either string or Long variables in them
        // Continued code to finish off after checking array
    }
}

我想要做的是让它工作,但可能但同时保持它尽可能简单。如果代码实际上根本不清楚,我想比较两个数组 userId 和排除,我想要的是,如果数组中的任何 userId 值与排除中的任何匹配,那么就像数组状态一样,我想将它们排除在列表。

编辑:运行时,如果(excluded[counts].contains(user))
我得到我想要的特定输出“太棒了!”
但是我现在遇到的问题是,如果我运行 if 就好像(!excluded[counts].contains(user))<br> 我得到了排除的值,然后一些,许多值重复减去显示
示例的值:

String[] userId = new String [] { "10", "15", "17", "20", "25", "33", "45", "55", "77" }
String[] excluded = new String[] { "15", 20", "55", "77" }

然后我进入我的循环来检查数组

int count=0;
for (String user : userId) {
for (int counts=0; counts < excluded.length; counts++) {
if (!excluded[counts].contains(user)) {
System.out.println("UID = " + userID[count]);
}
count++

!excluded 仍将显示我不想显示的 userId 的实例,因此即使我希望它排除它,它仍然显示“UID = 15”,它确实如此,但只有一次,而不是看到它4次我看到它3次。

4

3 回答 3

3

只需使用集合框架即可。假设您的 ID 是int值:

int[] excluded = ... ;
int[] userIds = ... ;
Set<Integer> excludedIds = new HashSet<Integer>(Arrays.asList(excluded));
for (int userId : userIds) {
    if (excluded.contains(userId))
        continue;
    // Do something with ID
}

您也可以这样做,但这假设您不关心userIds数组中的重复项:

int[] excluded = ... ;
int[] userIds = ... ;
Set<Integer> excludedIds = new HashSet<Integer>(Arrays.asList(excluded));
Set<Integer> userIdSet = new HashSet<Integer>(Arrays.asList(userIds));
userIdSet.removeAll(excludedIds);
for (int userId : userIdSet) {
    // Do something with ID
}

这是更好的优化,但不是特别必要,除非您有很多ID。你的算法是O(n) = n 2,我这里只是O(n) = n

于 2012-09-19T20:11:03.970 回答
2

将排除的 ID 放入一个集合中。

Set<Integer> excludedSet = new HashSet<Integer>();
for (int i : excluded) {
  excludedSet.add(i);
}

然后你的循环看起来像这样:

for (int id : userId) {
    if (!excludedSet.contains(id)) {
        // process this user
    }
} 
于 2012-09-19T20:09:40.333 回答
1

除非您需要多次执行此任务,否则我不会为优化而烦恼。

否则,最好的解决方案是将第二个数组的项目放入Set并使用它的有效方法(包含)来解决集合是否有项目。

于 2012-09-19T20:08:02.703 回答