使用索引访问Treeset中的元素

时间:2016-10-29 12:46:42

标签: java treeset

假设有一个元素1,2,3,4,5,6,7,8,9,10的字符串树集(ts)。 在树集中是否有任何内置方法,以便我可以访问一个元素。 例如,访问3可以执行ts。[2]并访问8 ts。[7]。(类似的东西)。 我使用这种方法:

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

虽然我跑的时候并没有显示任何o / p但是如果我做了 i = 0 那么它显示了所有的o / p即1,2,3,4,5 ,6,7,8,9,10。

其次,任何人都可以告诉我,最好使用hashset,treeset和linkedhashset

2 个答案:

答案 0 :(得分:0)

TreeSetNavigableSet,表示您拥有商品订单(默认为自然排序,但您可以使用ComparatorComparable定义自己的订购关系界面)您可以按此顺序浏览项目。但是没有索引机制。基本上TreeSet基于TreeMapred-black tree。在这样的数据结构中,索引(元素索引,而不是高效访问意义上的索引)没有多大意义。

另一方面,

HashSet基于HashMap,这是一种经典hash table实现。在此数据结构中,没有定义订单。由于使用了哈希函数,您可以在O(1)时间查找每个项目。

LinkedHashSetHashSet的子类。除了HashSet方法之外,没有定义任何新方法,因此LinkedHashSet不允许更多功能,如自然顺序或索引。但是它有一个辅助链表,可以跟踪元素的插入顺序。这样,当您通过LinkedHashSet方法或for循环遍历.iterator()时,您将按插入的顺序获取元素。

因此,如果您将单独访问元素,那么基本上HashSet更合适。或者是最简单的Set实现,您可以在通用案例中使用HashSet。如果您需要保留插入顺序,则需要使用LinkedHashSet,如果必须强制执行任何自定义排序或自然排序,请使用TreeSet

答案 1 :(得分:0)

如果您想访问集合中的元素,如ts [2],那么您最好使用集合内置方法将集合转换为数组。

否则,使用迭代器是访问集合中元素的标准且有效的方法。

对于第二个问题,Hashset用作哈希表; LinkedHashSet用作哈希表,其元素以与插入时相同的方式存储; TreeSet用于使用导航进行收集。

要获得完整的知识,您必须查看Oracle文档。