2016-10-29 2 views
0

Предположим, что существует цепочка деревьев (ts) элементов 1,2,3,4,5,6,7,8,9,10. Есть ли встроенный метод в treeet, чтобы я мог получить доступ к элементу. Например, для доступа 3 я могу сделать ts. [2] и получить доступ к 8 ts. [7]. (Что-то вроде этого). я использовал этот метод:Прикрепление элемента в Treeset с использованием индекса

 Iterator<String> it = ts.iterator(); 
     int i=0; 
     while(it.hasNext()) { 
      String ele=it.next(); 
      if(i==2){ 
       System.out.println(ele+""); 
      } 
      i++; 
     } 

, хотя, когда я побежал он не проявлял о/р, но если я сделал я = 0 тогда он показал все о/р ИЭ 1,2,3, 4,5,6,7,8,9,10.

Во-вторых может кто-нибудь сказать мне, что, когда это лучше всего использовать HashSet, TreeSet и LinkedHashSet

ответ

0

TreeSet это NavigableSet означает, что вы имеете порядок элементов (естественного порядка, как по умолчанию, но вы можете определить свой собственный порядок отношения с использованием интерфейса Comparator или Comparable), и вы можете перемещаться по элементам по этому заказу. Однако механизм индекса отсутствует. В основном TreeSet основан на TreeMap, который является red-black tree. В такой структуре данных индексы (индексы элементов, а не индексы в смысле эффективного доступа) не имеют большого значения.

HashSet с другой стороны основывается на HashMap, что является классической реализацией hash table. В этой структуре данных порядок не определен. Вы можете просмотреть каждый элемент на O(1) времени, хотя из-за использования функции хэша.

LinkedHashSet является подклассом HashSet. Другие методы HashSet не определены новый метод, поэтому LinkedHashSet не позволяет больше возможностей, таких как естественный порядок или индексы. Однако у него есть вспомогательный список, который отслеживает порядок вставки элементов. Таким образом, когда вы перебираете метод LinkedHashSet по методу .iterator() или цикл for, вы получаете элементы в том порядке, в котором вы вставили.

Таким образом, в основном HashSet является более подходящим, если вы будете обращаться к элементам индивидуально. Или, будучи простейшей версией Set, вы можете использовать HashSet в общих случаях. Если вам нужно сохранить порядок вставки, вам необходимо использовать LinkedHashSet, и если вам необходимо обеспечить соблюдение любого пользовательского заказа или естественного заказа предметов, вы должны использовать TreeSet.

0

Если вы хотите получить доступ к элементам в своей коллекции, например, ts [2], то вам лучше преобразовать вашу коллекцию в массив с использованием встроенного метода коллекции.

В противном случае использование итератора является стандартным и эффективным способом доступа к элементам в коллекции.

Для второго вопроса, Hashset используется как хеш-таблица; LinkedHashSet используется как хэш-таблица с элементами, хранящимися так же, как и вставленные; TreeSet используется для сбора, используя навигацию.

Для получения полной информации вы должны проверить документацию Oracle.

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