如何将项目放在java中的ArrayList顶部

Red*_*ddy 2 java collections

我有一个ArrayList我需要排序的东西,我还需要一个特定的默认项目在列表的顶部.我可以通过检查数组列表,删除默认项目并将其插入列表顶部来自行完成.

基本上,列表应该在顶部具有默认值,而剩余值在排序顺序中.是否有任何现有的API方法可以做到这一点?

Tof*_*eer 7

我只是写一个方法,你做了你描述的...类似于:

public static <T> void sortWithDefault(final List<T> list)
{
    Collections.sort(list);
    // remove the default item
    // insert the default item at the start of the list
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用比较器(尽管不那么明显),它总是将默认项目作为任何比较中的最低项目与其余项目的自然比较进行比较.为此你可以调用Collections.sort(List,Comparator);

以下是这样一个比较器的代码......再次.我真的不喜欢它,因为它不明显......但我认为这是一个合理的解决方案:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main
{
    public static void main(final String[] argv)
    {
        final List<Integer> list;

        list = new ArrayList<Integer>();

        for(int i = 10; i > 0; i--)
        {
            list.add(i);
        }

        Collections.sort(list, new DefaultAtStartComparator<Integer>(5));

        System.out.println(list);
    }
}

class DefaultAtStartComparator<T extends Comparable>
    implements Comparator<T>
{
    private final T defaultValue;

    public DefaultAtStartComparator(final T value)
    {
        defaultValue = value;
    }

    public int compare(final T a,
                       final T b)
    {
        if(a.equals(defaultValue))
        {
            return (-1);
        }

        if(b.equals(defaultValue))
        {
            return (1);
        }

        return (a.compareTo(b));
    }
}
Run Code Online (Sandbox Code Playgroud)


Abd*_*oud 5

ArrayList.add(int index,E element)
Run Code Online (Sandbox Code Playgroud)

将指定的元素(E)插入index此列表中的指定位置().将当前位于该位置的元素(如果有)和任何后续元素向右移动(向其索引添加一个元素).

index 如果需要将元素放在列表顶部,可以设置为0.