2014-12-08 3 views
6

Я ищу коллекцию, которая была бы своего рода списком, который позволяет пробелы. Цели заключаются в следующем:Есть ли реализация списка, которая позволила бы разрывы?

  • Каждый элемент имеет определенный индекс в коллекции, который имеет смысл.
  • коллекция должна быть редкой и не непрерывной; его размер должен возвращать количество правильных элементов, поэтому обходной путь инициализации с null не будет работать.
  • subList метод является желательным подсписков доступа в соответствии с интервалами индекса

Использование Пример случая:

List<Integer> list = /* ? */; 
list.add(0,5); 
list.add(1,4); 
list.add(5,3); 
for(Integer i : list) 
{ 
    System.out.print(i + " "); 
} 
/* desired output : "5 4 3 "*/ 
+1

Ваше требование для 'size' конфликтов метод с' интерфейсом list'. Метод 'get' в' List' * имеет *, чтобы вывести «IndexOutOfBoundsException» индекса < 0 or > 'size()', поэтому ваш метод 'size() * имеет *, чтобы вернуть самый высокий индексный элемент, который можно получить с помощью метод get(). –

ответ

5

Используйте Map<Integer,Integer>. Ключ будет вашим индексом, а значение - значением списка.

Для вашего требования к сублисту, возможно, будет работать TreeMap<Integer,Integer>, так как он держит ключи отсортированными и упрощает итерацию по суб-списку.

Конечно, это означает, что вы не можете использовать интерфейс List. Если вы должны использовать интерфейс List, вы можете сделать свою собственную реализацию List при поддержке TreeMap (например, list.add(5,3) позвонит map.put(5,3)).

+4

Все, что реализует интерфейс 'NavigableMap' (который включает в себя« TreeMap'), должен делать, поскольку он предоставляет [subMap] (http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap .html # subMap% 28K,% 20boolean,% 20K,% 20boolean% 29) метод, который удовлетворяет потребностям OP для подсписок. – curiousinternals

Смежные вопросы