#java #list #replace
#java #Список #заменить
Вопрос:
У меня есть список
ArrayList list = new ArrayList(Arrays.asList(1,2,3,4,5,3,4,2,4,5,3,10));
И у меня есть другой подсписок
ArrayList sublist = new ArrayList(Arrays.asList(4,5,3));
Я искал функциональность для замены
подсписка внутри списка
другим подсписком
ArrayList sublist = new ArrayList(Arrays.asList(100,100)));
итак, после поиска и замены новый список должен стать :
list = (1,2,3,100,100,4,2,100,100,10);
Я не смог найти никакого API для этого в java.
Ответ №1:
Не уверен, существует ли какой-либо API для этого или нет, но то, что вы могли бы сделать, это воспользоваться интерфейсом списка в Java.
Если вы объединяете использование containsAll(Collection c), возвращает true, если этот список содержит все элементы указанной коллекции.
removeAll(коллекция c) Удаляет из этого списка все его элементы, которые содержатся в указанной коллекции (необязательная операция).
и
addAll(int index, Collection c) Вставляет все элементы из указанной коллекции в этот список в указанной позиции (необязательная операция).
Я думаю, вы можете легко выполнить то, что вам нужно.
Взгляните сюда: http://download.oracle.com/javase/6/docs/api/java/util/List.html
Комментарии:
1. Это просто проверит / удалит / добавит отдельные элементы переданной коллекции, но не будет рассматривать их как единый список. Например. в примере, найденном внутри вопроса, это приведет к удалению ВСЕХ 4s, 5s и 3s.
Ответ №2:
Если вы создадите подсписок как истинный подсписок list
, например, используя List#subList()
, то (неструктурные) изменения, внесенные в sublist
, будут отражены list
.
List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5, 3, 4, 2, 4, 5, 3, 10);
List<Integer> sublist = list.subList(3, 6);
for (int i=0; i<sublist.size(); i )
{
sublist.set(i, 100);
}
System.out.println(sublist);
// prints 100, 100, 100
System.out.println(list);
// prints 1, 2, 3, 100, 100, 100, 4, 2, 4, 5, 3, 10
Демонстрация: http://ideone.com/ljvd0
Lists.newArrayList(...)
происходит от Google Guava.