如何在指定的索引

时间:2015-10-14 03:35:58

标签: java object arraylist swap

所以,我试图按照对象区域的顺序打印出我的arraylists。但我似乎无法弄清楚如何在索引处将对象的值传递给另一个。 (我必须递归地做)。 这是我的代码。所以

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

例如,我无法弄清楚如何得到一个0的索引等于我的列表(数据)索引0.如果这些是arrrays,我会知道该怎么做,所以让我用它作为一个例子,向您展示我想通过arraylists实现的目标

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

非常感谢任何帮助。我已经通过almsot在我的书的ArrayList类方法列表中找到的每个方法,并且没有一个具有我想要的预期效果。谢谢!

2 个答案:

答案 0 :(得分:1)

>>> from collections import Counter >>> import string >>> c = Counter(l for l in a if l in string.ascii_letters) >>> c Counter({'e': 11, 't': 6, 'o': 6, 'r': 5, 'n': 5, 'a': 4, 'l': 3, 'f': 3, 's': 3, 'u': 3, 'h': 3, 'i': 2, 'd': 2, 'c': 2, 'm': 2, 'A': 1, 'p': 1, 'w': 1, 'T': 1, 'J': 1, 'q': 1}) >>> sum(c.values()) 66 >>> c = Counter(l for l in a if l in 'AecT') >>> c Counter({'e': 11, 'c': 2, 'A': 1, 'T': 1}) >>> sum(c.values()) 15 界面定义List(本例中为set(int index, E element) = E)。因此,您遇到问题的四条线应改写如下:

GeometricObject

希望这会有所帮助......

杰夫

答案 1 :(得分:1)

您不必实现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);