Как вывести элемент на вершину ArrayList в Java - PullRequest
2 голосов
/ 16 июля 2010

У меня есть ArrayList, который мне нужно отсортировать, а также мне нужен определенный элемент по умолчанию, чтобы быть в верхней части списка.Я могу сделать это сам, проверив список массивов, удалив элемент по умолчанию и вставив его в верхнюю часть списка.

В основном список должен иметь значение по умолчанию сверху и остальные значения в отсортированном порядке.Есть ли какой-либо метод API, который делает это?

Ответы [ 3 ]

7 голосов
/ 16 июля 2010

Я бы просто написал метод, который сделал то, что вы описываете ... что-то вроде:

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
}

Вы также можете использовать компаратор (хотя это будет менее очевидно), где он всегда сравниваетсяэлемент по умолчанию как самый низкий в любом сравнении и естественное сравнение для остальных элементов.Для этого вы должны вызвать Collections.sort (List, Comparator);

Вот код для такого 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));
    }
}
5 голосов
/ 26 ноября 2012
ArrayList.add(int index,E element)

Вставляет указанный элемент (E) в указанную позицию (index) в этом списке. Смещает элемент, находящийся в данный момент в этой позиции (если есть), и любые последующие элементы вправо (добавляет один к их индексам).

index можно установить на 0, если вам нужно поместить элемент в начало списка.

4 голосов
/ 16 июля 2010

Не то, чтобы я знал. Возможно, вам просто нужно сделать что-то вручную, как вы сказали ... например,

List<T>  list = new ArrayList<T>();
//  Insert items into list
...

Collections.sort(list);

T defaultValue = null;
for (int i = 0; i < list.size(); i++) {
    T value = list.get(i);
    if (isDefaultValue(defaultValue)) {           
        defaultValue = list.remove(i);
    }        
}

if (defaultValue != null) {
    list.add(0, defaultValue);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...