如何在指定索引处将两个数组列表的对象相互传递
How to pass the objects of two arraylists to one another at a specified index
因此,我正在尝试按对象区域的顺序打印我的数组列表。但是,我似乎无法弄清楚如何在索引处将对象的值传递给另一个对象。 (我必须递归地做)。
到目前为止,这是我的代码
private static void recursionSort(ArrayList<GeometricObject> data)
{
if(data.size() <= 1) return; // Base case: just 1 elt
ArrayList<GeometricObject> a = new ArrayList<GeometricObject>(data.size() / 2);
ArrayList<GeometricObject> b = new ArrayList<GeometricObject>(data.size() - a.size()); // Split array into two
// halves, a and b
for(int i = 0; i < data.size(); i++)
{
if(i < a.size())
a.indexOf(i) = data.get(i);
else
b.get(i - a.size()) = data.get(i);
}
recursionSort(a); // Recursively sort first
recursionSort(b); // and second half.
int ai = 0; // Merge halves: ai, bi
int bi = 0; // track position in
while(ai + bi < data.size()) { // in each half.
if(bi >= b.size() || (ai < a.size() && a.get(ai).getArea() < b.get(bi).getArea())) {
data.get(ai + bi) = a.get(ai); // (copy element of first array over)
ai++;
} else {
data.get(ai + bi) = b.get(bi); // (copy element of second array over)
bi++;
}
}
}
我的问题是行
a.indexOf(i) = data.get(i);
b.get(i - a.size()) = data.get(i);
data.get(ai + bi) = a.get(ai);
data.get(ai + bi) = b.get(bi);
例如,我不知道如何让 a 的索引等于 0 的列表(数据)索引。如果这些是数组,我会知道该怎么做,所以让我使用这是一个例子,向您展示我试图通过 arraylists
完成的事情
a[i] = data[i]; // First line in block above
data[ai + bi] = b[bi]; // Last line in block above
如有任何帮助,我们将不胜感激。我已经遍历了我书中的 ArrayList Class 方法列表中的所有方法,并且 none 具有我正在寻找的预期效果。谢谢!
List
接口定义了 set(int index, E element)
(在本例中为 E
= GeometricObject
)。因此,您遇到问题的四行应该改写如下:
a.set(i, data.get(i));
b.set(i - a.size(), data.get(i));
data.set(ai + bi, a.get(ai));
data.set(ai + bi, b.get(bi));
希望这对您有所帮助...
杰夫
您不必实施 sort 方法来使用您的自定义对象对 Arraylist 进行排序。您可以使用 Collections.sort(arraylist)
来做同样的事情。
要使用相同的功能,您需要 根据需要使用 Comparator
或 Comparable
界面。
如果您使用 Comparable
界面,您的代码将如下所示:
public class GeometricObject implements Comparable<GeometricObject>
{
// member variables
// other methods
@Override
public int compareTo(GeometricObject comparesToObject)
{
// wil sort in ascending order.
return this.getArea()-comparesToObject.getArea();
// Use the commented line for descending order
// return comparesToObject.getArea() - this.getArea();
// Use return Float.compare(area1, area2) if area is of type float.
}
}
// This will now sort your data Arraylist.
Collections.sort(data);
因此,我正在尝试按对象区域的顺序打印我的数组列表。但是,我似乎无法弄清楚如何在索引处将对象的值传递给另一个对象。 (我必须递归地做)。 到目前为止,这是我的代码
private static void recursionSort(ArrayList<GeometricObject> data)
{
if(data.size() <= 1) return; // Base case: just 1 elt
ArrayList<GeometricObject> a = new ArrayList<GeometricObject>(data.size() / 2);
ArrayList<GeometricObject> b = new ArrayList<GeometricObject>(data.size() - a.size()); // Split array into two
// halves, a and b
for(int i = 0; i < data.size(); i++)
{
if(i < a.size())
a.indexOf(i) = data.get(i);
else
b.get(i - a.size()) = data.get(i);
}
recursionSort(a); // Recursively sort first
recursionSort(b); // and second half.
int ai = 0; // Merge halves: ai, bi
int bi = 0; // track position in
while(ai + bi < data.size()) { // in each half.
if(bi >= b.size() || (ai < a.size() && a.get(ai).getArea() < b.get(bi).getArea())) {
data.get(ai + bi) = a.get(ai); // (copy element of first array over)
ai++;
} else {
data.get(ai + bi) = b.get(bi); // (copy element of second array over)
bi++;
}
}
}
我的问题是行
a.indexOf(i) = data.get(i);
b.get(i - a.size()) = data.get(i);
data.get(ai + bi) = a.get(ai);
data.get(ai + bi) = b.get(bi);
例如,我不知道如何让 a 的索引等于 0 的列表(数据)索引。如果这些是数组,我会知道该怎么做,所以让我使用这是一个例子,向您展示我试图通过 arraylists
完成的事情a[i] = data[i]; // First line in block above
data[ai + bi] = b[bi]; // Last line in block above
如有任何帮助,我们将不胜感激。我已经遍历了我书中的 ArrayList Class 方法列表中的所有方法,并且 none 具有我正在寻找的预期效果。谢谢!
List
接口定义了 set(int index, E element)
(在本例中为 E
= GeometricObject
)。因此,您遇到问题的四行应该改写如下:
a.set(i, data.get(i));
b.set(i - a.size(), data.get(i));
data.set(ai + bi, a.get(ai));
data.set(ai + bi, b.get(bi));
希望这对您有所帮助...
杰夫
您不必实施 sort 方法来使用您的自定义对象对 Arraylist 进行排序。您可以使用 Collections.sort(arraylist)
来做同样的事情。
要使用相同的功能,您需要 根据需要使用 Comparator
或 Comparable
界面。
如果您使用 Comparable
界面,您的代码将如下所示:
public class GeometricObject implements Comparable<GeometricObject>
{
// member variables
// other methods
@Override
public int compareTo(GeometricObject comparesToObject)
{
// wil sort in ascending order.
return this.getArea()-comparesToObject.getArea();
// Use the commented line for descending order
// return comparesToObject.getArea() - this.getArea();
// Use return Float.compare(area1, area2) if area is of type float.
}
}
// This will now sort your data Arraylist.
Collections.sort(data);