powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / небольшой вопрос с коллекциями
20 сообщений из 20, страница 1 из 1
небольшой вопрос с коллекциями
    #39111477
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два ArrayList одинакового размера list1(1,2,3) и list2(4,5,6).
нужно записать в list1 эл-ты двух листов , которые идут последовательно [1,4,2,5,3,6].
Причем нужна высокая эффективность алгоритма.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111497
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
начинай. потом запости сюда свое решение.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111515
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
  ListIterator iteratorA = a.listIterator(); 
		Iterator iteratorB = b.iterator();
		
		while (iteratorB.hasNext()) {
			
			iteratorA.next();
			iteratorA.add(iteratorB.next());
			
		}
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111537
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эффективность алгоритма O(n) нужна
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111552
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanЕсть два ArrayList одинакового размера list1(1,2,3) и list2(4,5,6).
нужно записать в list1 эл-ты двух листов , которые идут последовательно [1,4,2,5,3,6].
Причем нужна высокая эффективность алгоритма.
Указав реализацию ArrayList ты искусственно ограничил нас в алгоритмах. Это печально.

Но если отойти от реализации и если договориться что один из списков - read-only то на базе связного
списка (CustomLinkedList) можно сделать эту операцию за фиксированное время.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111661
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня в задаче были именно Arraylist.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111669
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanэффективность алгоритма O(n) нужна
А у вас какая получилась? Для пущей эффективности можно capacity задать, так как ожидаемый размер известен.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111931
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfan,

Не каждый list одни и те же операции позволяет сделать за O(n)
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111932
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,


Но с ArrayList все просто.
Новый размером как два старых и последовательно из каждого в новый.
Подмену старого.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39111998
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
ListIterator iteratorA = a.listIterator(); 
		Iterator iteratorB = b.iterator();
		
		while (iteratorB.hasNext()) {
			
			iteratorA.next();
			iteratorA.add(iteratorB.next());
			
		}


т.е. эффективность этого алгоритма O(n) ?
Может кто-нибудь объяснить почему эффективность равна O(n)?
мы ведь пробегаем по всем элементам n и при добавлении тоже эл-ты сдвигаются
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112006
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanи при добавлении тоже эл-ты сдвигаются
Зачем они сдвигаются, если добавлять в конец?
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112007
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczmightyducksfanи при добавлении тоже эл-ты сдвигаются
Зачем они сдвигаются, если добавлять в конец?
Аа, тьху. Понял. Так это. А 3й массив принципиально нельзя заводить? В этом вся соль задачи или что?
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112013
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112019
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfan,

Идея проста до нельзя. Добавляем 1й массив сам в себя. Затем читаем его с середины, а пишем с начала.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112132
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно было-бы создать

Код: java
1.
2.
public ChainedList implements List{
}

но действующее ограничение на ArrayList всё портит.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112146
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я упустил.. это перемешивание должно быть в методе, который возвращает void .
И получается 3 массив мы уже не заведем
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112153
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfanда я упустил.. это перемешивание должно быть в методе, который возвращает void .
И получается 3 массив мы уже не заведем
Почему нет? Локальной переменной, с последующим копированием в один из оригиналов. Мы всё равно останемся в O(n) с фиксированым числом проходов по длине массива.
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112238
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mightyducksfan,

Тебе же написали как использовать сам Список как третий - за счет добавления самого себя.
Можно и просто увеличить размер и идти с конца (середины).

Но за такое на экзамене 5 не поставят. :)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
public class ArrayMixer {

  public static void mix(@NotNull final ArrayList destination, @NotNull final ArrayList source) {
    final int l = destination.size();
    if (l < 1) return;
    if (l != source.size()) throw new IndexOutOfBoundsException();
    destination.ensureCapacity(l * 2);
    Field f = null;
    try {
      f = Unsafe.class.getDeclaredField("theUnsafe");
      f.setAccessible(true);
      Unsafe unsafe = (Unsafe) f.get(null);
      f = destination.getClass().getDeclaredField("elementData");
      f.setAccessible(true);
      Object[] o = (Object[]) f.get(destination);
      for (int i = 0; i < l; i++) {
	o[(l - i) * 2 - 1] = source.get(l - i - 1);
	o[(l - i) * 2 - 2] = destination.get(l - i - 1);
      }
      f = destination.getClass().getDeclaredField("size");
      unsafe.putInt(destination, unsafe.objectFieldOffset(f), l * 2);
    } catch (NoSuchFieldException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    }

  }
}

...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39112707
Роман_мск77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой есть вариант:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestOne {
public static void main(String[] args) {
List<Long> oneList = new ArrayList<Long>();
List<Long> twoList = new ArrayList<Long>();
List<Long> includeList = new ArrayList<Long>();
oneList.add(1L);
oneList.add(2L);
oneList.add(3L);

twoList.add(4L);
twoList.add(5L);
twoList.add(6L);

Iterator<Long> iter = oneList.iterator();
while(iter.hasNext()) {
Long tmp = iter.next();
includeList.add(tmp);
iter.remove();
Iterator<Long> iter2 = twoList.iterator();
while(iter2.hasNext()) {
Long tmp2 = iter2.next();
includeList.add(tmp2);
iter2.remove();
break;
}
}
System.out.println("========>"+includeList.toString());
}

}



Результат
========>[1, 4, 2, 5, 3, 6]
...
Рейтинг: 0 / 0
небольшой вопрос с коллекциями
    #39113540
mightyducksfan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Роман_мск77Вот такой есть вариант:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestOne {
public static void main(String[] args) {
List<Long> oneList = new ArrayList<Long>();
List<Long> twoList = new ArrayList<Long>();
List<Long> includeList = new ArrayList<Long>();
oneList.add(1L);
oneList.add(2L);
oneList.add(3L);

twoList.add(4L);
twoList.add(5L);
twoList.add(6L);

Iterator<Long> iter = oneList.iterator();
while(iter.hasNext()) {
Long tmp = iter.next();
includeList.add(tmp);
iter.remove();
Iterator<Long> iter2 = twoList.iterator();
while(iter2.hasNext()) {
Long tmp2 = iter2.next();
includeList.add(tmp2);
iter2.remove();
break;
}
}
System.out.println("========>"+includeList.toString());
}

}



Результат
========>[1, 4, 2, 5, 3, 6]

так эффективность алгоримта будет O(n*n) . нужна O(n)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / небольшой вопрос с коллекциями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]