6

我正在遍历列表以查找特定条目,然后将其分配给变量并稍后尝试将其删除。演示比解释更容易。

ArrayList<Example> list1 = populate();

Example ex1 = list1.get(0);
Example ex2 = ex1;
list1.remove(ex2);

我知道这可能与 Java 无法处理指针有关,但可行的解决方案会很棒。

编辑:详细地说,这是我的代码的一个简短示例,而不是给你完整的东西。我正在做的是遍历列表以找到最低的 10 个数字。我的技术是遍历列表,找到最低的并将其添加到另一个列表中,然后从原始列表中删除该数字并重复。但是我的列表是由内部具有 int 值的对象组成的,而不是整数列表。

for(0 to 9){
    for(0 to list.size){
        if(list.get(x) < smallest)
            smallest = list.get(x)
    }
    smallestList.add(smallest);
    list.remove(smallest)
}
4

3 回答 3

2

我会对列表进行排序。然后,我将创建一个包含这 10 个最小对象的列表,并更改原始列表list1以包含剩余的对象。就像是:

Collection.sort(list1);
ArrayList<Example> yourSmallestElements = (ArrayList<Example>)(list1.sublist(0, 9).clone());
list1.removeAll(yourSmallestElements);

注意:我克隆了 sublist 因为sublist()只返回list的视图list1,这不是你想要的。

您的类Example可以实现“Comparable”,以便您可以定义它们需要如何进行比较。您将需要实现该方法compareTo()。像这样的东西:

public class Example implements Comparable<Example> {
    private int integerVal = <a value>;

    public int compareTo(Example exampleObject) {
        return exampleObject.integerVal - this.integerVal;
    }   
}

看看这个链接,更准确地说,开始的类如下:

public class Fruit implements Comparable<Fruit>{
于 2013-05-03T11:46:28.777 回答
1

如果要对对象进行排序...

Example e;
int min=-1; // assuming the list has +ve numbers only
for (Example elem : yourList)
{
if ( elem.gtVaribale() <= min ) //assuming you have variable field in your object
{
  e = elem;
  min = elem.getVariable();
}
}
yourList.remove(e);

//repeat this for remaining elements of the list

//you can create another sorted list, and do sortedList.add(e), so that sortedList
//have objects in ascending order (of the variable you want to sort) of objects you had in yourList

这只是一个伪代码,我还没有编译它。

于 2013-05-03T11:58:58.757 回答
0

在这里,您必须覆盖类 Example 的可比较方法。您必须让编译器知道它应该以哪种方式将您的 e 变量与其列表元素进行比较,以便将其删除。

于 2013-05-03T12:25:56.443 回答