【问题标题】:How to pass the objects of two arraylists to one another at a specified index如何在指定索引处将两个数组列表的对象相互传递
【发布时间】:2015-10-14 03:35:57
【问题描述】:

所以,我试图按对象区域的顺序打印出我的数组列表。但是,我似乎无法弄清楚如何在索引处将对象的值相互传递。 (我必须递归地做)。 到目前为止,这是我的代码

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 等于我的列表的(数据)索引为 0。如果这些是数组,我会知道该怎么做,所以让我用它作为一个例子向你展示我试图通过 arraylists 完成什么

a[i] = data[i]; // First line in block above
data[ai + bi] = b[bi]; // Last line in block above

任何帮助将不胜感激。我已经检查了我书中的 ArrayList 类方法列表中的所有方法,但没有一个具有我想要的效果。谢谢!

【问题讨论】:

  • 第一行,使用set方法。像 a.set(i,data.get(i));

标签: java object arraylist swap


【解决方案1】:

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

希望这会有所帮助...

杰夫

【讨论】:

  • 谢谢你,正是我想要完成的。非常感谢!
【解决方案2】:

您不必实现 sort 方法来使用您的自定义对象对 Arraylist 进行排序。您可以使用Collections.sort(arraylist) 来做同样的事情。

要使用相同的功能,您需要或者根据需要使用ComparatorComparable 接口。

如果您使用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);

【讨论】:

  • 有趣,我们还没有在课堂上讲过这个。我将不得不制作另一个项目并以这种方式玩弄它!
猜你喜欢
  • 1970-01-01
  • 2013-07-09
  • 2012-10-18
  • 2022-01-08
  • 2016-03-08
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多