2016-08-08 2 views
-1

Цель структуры данных, которые будут иметь эти свойства:Цель структуры данных

  1. фиксированного размера (как Array).
  2. Не может содержать одинаковые элементы (например, HashSet).
  3. Возможность удалять элемент из любого положения (например E remove(int i) в ArrayList).
  4. Установить элемент в любом положении, но только если он пуст, в противном случае выведите исключение.

Есть такая структура данных? Или мне нужно реализовать себя?

+4

Так что вы хотите его фиксированного размера ... но с возможностью удаления или добавления элементов ?! – Tunaki

+0

Почему бы вам не создать свой собственный класс, чтобы сделать все это? – VatsalSura

+0

Вы видите, что он сказал, что может это сделать ... он просто просит более эффективное решение. Yeesh – RobotKarel314

ответ

2

Возможно класс с T [] и HashSet<T>. Если HashSet содержит элемент, который нужно добавить, это дубликат. Если T [] имеет ненулевой (или любой другой флаг), этот элемент занят. Чтобы удалить, вам нужно удалить из обеих структур данных. Размер может быть ограничен через T [].

При этом все 4 операции будут O(1) раз.

+0

Почему 'HashMap', а не' HashSet'? Для чего используется значение карты? – Andreas

+0

@Andreas true ... Я думал, что это было бы полезно по какой-то причине (возможно, удаление по значению вместо индекса). –

+0

Итак, ваш ответ на вопросы * «Есть ли такая структура данных? Или мне нужно реализовать себя?» * «** Нет ** и ** Да **»? Если да, возможно, вы должны на самом деле ответить на вопросы. – Andreas

1

Вы можете сделать это с помощью Arrays.asList:

  • Это структура данных фиксированного размера, поддержанный массивом.
  • Вы можете установить элементы в нуль, используя list.set(i, null)
  • Вы можете проверить, если элемент содержится в списке уже, используя list.contains(element). Это будет проверять содержимое линейно; Я предполагаю, что список будет довольно небольшим, так что это на практике.

Например:

List<Integer> ints = Arrays.asList(new Integer[5]); 

// Unset the value in the second slot, if it is non-null. 
if (ints.get(2) != null) { 
    ints.set(2, null); 
} 

// Add 123 to the first slot which is null. 
if (!ints.contains(123)) { 
    ints.set(ints.indexOf(null), 123); 
} 
Смежные вопросы