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