假设有一个元素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
答案 0 :(得分:0)
TreeSet
是NavigableSet
,表示您拥有商品订单(默认为自然排序,但您可以使用Comparator
或Comparable
定义自己的订购关系界面)您可以按此顺序浏览项目。但是没有索引机制。基本上TreeSet
基于TreeMap
,red-black tree。在这样的数据结构中,索引(元素索引,而不是高效访问意义上的索引)没有多大意义。
HashSet
基于HashMap
,这是一种经典hash table实现。在此数据结构中,没有定义订单。由于使用了哈希函数,您可以在O(1)
时间查找每个项目。
LinkedHashSet
是HashSet
的子类。除了HashSet
方法之外,没有定义任何新方法,因此LinkedHashSet
不允许更多功能,如自然顺序或索引。但是它有一个辅助链表,可以跟踪元素的插入顺序。这样,当您通过LinkedHashSet
方法或for循环遍历.iterator()
时,您将按插入的顺序获取元素。
因此,如果您将单独访问元素,那么基本上HashSet
更合适。或者是最简单的Set
实现,您可以在通用案例中使用HashSet
。如果您需要保留插入顺序,则需要使用LinkedHashSet
,如果必须强制执行任何自定义排序或自然排序,请使用TreeSet
。
答案 1 :(得分:0)
如果您想访问集合中的元素,如ts [2],那么您最好使用集合内置方法将集合转换为数组。
否则,使用迭代器是访问集合中元素的标准且有效的方法。
对于第二个问题,Hashset用作哈希表; LinkedHashSet用作哈希表,其元素以与插入时相同的方式存储; TreeSet用于使用导航进行收集。
要获得完整的知识,您必须查看Oracle文档。