Есть ли реализация List (в Java), которая поддерживает вставку со сдвигом? - PullRequest
2 голосов
/ 05 июня 2010

Предположим, у меня есть список с элементами

4,7,9,17,24

и я хочу вставить 11, но держать их в порядке. Поэтому я хотел бы сделать что-то вроде

list.add (3, 11) и получить следующий список:

4,7,9,11,17,24

но если я сделаю это, я заменю 17 на 11. Вы можете помочь?

Ответы [ 5 ]

8 голосов
/ 05 июня 2010

Метод add(int index, E element) должен делать то, что вы хотите.В javadoc говорится следующее:

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

Если это не так, вы используете ошибочную пользовательскую реализацию List... или ваше приложение не делает то, что вы думаете, оно делает.(Возможно, вы использовали list.set(3, 11)) ...)

3 голосов
/ 05 июня 2010

Если вам нужен упорядоченный список, почему бы не использовать что-то вроде TreeSet . Он будет использовать естественное упорядочение объектов или вы можете передать его в свой собственный компаратор.

2 голосов
/ 05 июня 2010

Покопайтесь в документации Коллекции, посмотрите, сможете ли вы найти ту, которая соответствует вашим потребностям:

http://java.sun.com/javase/7/docs/api/java/util/LinkedList.html

http://java.sun.com/docs/books/tutorial/collections/implementations/list.html

1 голос
/ 05 июня 2010

Метод add интерфейса java.util.List указывает, что объект должен быть вставлен (а не заменен). Так что любопытно, что в вашей программе он не вставляется.

Было бы полезно, если бы вы могли опубликовать свой конкретный код, вызывающий проблему

0 голосов
/ 05 июня 2010

Если списки маленькие, вы можете просто добавить в конец списка и затем позвонить list.sort()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...