Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何提取K";“最小的”;对象列表中的元素?_Java_List_Pointers - Fatal编程技术网

Java 如何提取K";“最小的”;对象列表中的元素?

Java 如何提取K";“最小的”;对象列表中的元素?,java,list,pointers,Java,List,Pointers,我在一个列表中循环查找一个特定的条目,然后将其分配给一个变量,并尝试稍后删除它。演示比解释容易 ArrayList<Example> list1 = populate(); Example ex1 = list1.get(0); Example ex2 = ex1; list1.remove(ex2); ArrayList list1=populate(); 示例ex1=list1.get(0); 示例ex2=ex1; 清单1.移除(ex2); 我知道这可能与Java无法处理指

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

ArrayList<Example> list1 = populate();

Example ex1 = list1.get(0);
Example ex2 = ex1;
list1.remove(ex2);
ArrayList list1=populate();
示例ex1=list1.get(0);
示例ex2=ex1;
清单1.移除(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)
}
(0到9)的
{
用于(0到列表大小){
if(list.get(x)<最小值)
最小=列表。获取(x)
}
最小列表。添加(最小);
列表。删除(最小)
}

我会对列表进行排序。然后,我将创建一个包含这10个最小对象的列表,并将原始列表
list1
更改为包含其余对象。比如:

Collection.sort(list1);
ArrayList<Example> yourSmallestElements = (ArrayList<Example>)(list1.sublist(0, 9).clone());
list1.removeAll(yourSmallestElements);
更准确地说,请看一看以下开始的课程:

public class Fruit implements Comparable<Fruit>{
公共类{

如果要对对象进行排序

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
示例e;
int min=-1;//假设列表只有+ve个数字
例如(例如elem:yourList)
{

如果(elem.gtVaribale()在这里,您必须覆盖类示例的可比较方法。
您必须让编译器知道它应该以何种方式将您的e变量与其列表中的元素进行比较,以便将其删除。

您能详细说明一下您希望实现的目标吗?这里的意思有点不清楚。从列表中删除元素是可以的,将它们分配给变量也是可以的,但由于ex2和ex1在这里是相同的,您可以将删除ex1。这就是您想要的吗?请下次发布完整的问题。编辑后,您的问题的含义已完全改变您的初始问题已完全改变:)看起来您想对列表进行排序,为什么不查看比较器和集合。排序()这是一个很好的解决方案…但问题说明--“然后从原始列表中删除该数字”。你的方法修改原始列表,并且不会删除元素。这是一个要点。但是他无论如何只能保留排序列表中最大的元素…@Bill,但问题是(是吗?)问错了。真正的问题是:在列表中找出最小K数的最佳方法是什么?那么+1@Andrea我同意,但他可能有一个实际按照他在问题中提出的方式来做的用例:)@Bill第一个问题是OP思考的算法的儿子。在编辑揭示了真正的问题之后,IMHO没有必要允许使用原始规范,因为现在很明显,它们不是必需的,而是一种可能的方法的草案。这个问题的标题也应该编辑。
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