java - 如何从对象列表中提取 K "smallest"元素?

标签 java list pointers

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

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)
}

最佳答案

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

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

注意:我克隆了子列表,因为 sublist() 只返回列表 list1 View ,而这不是你想要的.

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

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

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

看看this link ,更准确地说,类开始如下:

public class Fruit implements Comparable<Fruit>{

关于java - 如何从对象列表中提取 K "smallest"元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16358139/

相关文章:

java - Erlang 进程与 Java 线程

c# - 数组语义初始值设定项如何在 C# 中工作?

c - 使用指向 char 而不是 char 数组的指针时出错

c - 赋值从 int 中生成指针 w/out a cast

c++ - 结构转发列表项消失了吗?

Java - 代码不断返回 'error: incompatible types: Object cannot be converted to int'

java - org.hibernate.AnnotationException : Unknown mappedBy in . ..引用的属性未知

list - 为什么 Haskell [] (list) 不是类型类?

WPF 将两个集合合并到一个 DataGrid 中

java - 为非并发程序编写并发 JUnit