这个问题在这里已经有了答案:HashsetvsTreeset(14个回答)关闭8年前.我已经阅读了很多关于这个主题的博客,但我仍然不清楚何时在另一个哈希集或树集上使用一个。举个例子:我有一个可比较的对象。我已将它们放入HashSet中。现在,当(仅当我想要)我想设置为基于compareTo逻辑进行排序时,我可以调用Collections.sort(object)而Treeset默认总是使用compareTo或compare(obj1,obj2)一直。因此,TreeSet会影响性能,但输出将与#1(Collections.sort)相同。这种理解正确吗? 最佳
我正在使用TreeSet我很想在集合中找到一个数字的索引。有没有一种很好的方法可以真正利用二叉树的O(log(n))复杂度?(如果没有,我应该怎么做,有谁知道为什么不呢?我很好奇为什么Java中会包含这样一个类而没有类似搜索功能的东西。) 最佳答案 我在TreeSet及其接口(interface)上闲逛了一会儿,发现获取元素索引的最佳方法是:set.headSet(element).size()headSet(element)返回小于其参数的元素的子TreeSet,因此该集合的大小将是相关元素的索引。确实是一个奇怪的解决方案。
我正在使用TreeSet我很想在集合中找到一个数字的索引。有没有一种很好的方法可以真正利用二叉树的O(log(n))复杂度?(如果没有,我应该怎么做,有谁知道为什么不呢?我很好奇为什么Java中会包含这样一个类而没有类似搜索功能的东西。) 最佳答案 我在TreeSet及其接口(interface)上闲逛了一会儿,发现获取元素索引的最佳方法是:set.headSet(element).size()headSet(element)返回小于其参数的元素的子TreeSet,因此该集合的大小将是相关元素的索引。确实是一个奇怪的解决方案。
这是我用于Java5.0的一段代码TreeSettreeSetObj=newTreeSet(Collections.reverseOrder());Collections.reverseOrder()用于获取比较器,以反转元素的存储和迭代方式。有没有更优化的方法? 最佳答案 为什么您认为这种方法不会被优化?反向顺序Comparator只是将实际Comparator的输出符号翻转(或compareTo上的输出符号插入可比较的对象),因此我认为它非常快。另一种建议:与其更改存储元素的顺序,不如使用descendingIterator()
这是我用于Java5.0的一段代码TreeSettreeSetObj=newTreeSet(Collections.reverseOrder());Collections.reverseOrder()用于获取比较器,以反转元素的存储和迭代方式。有没有更优化的方法? 最佳答案 为什么您认为这种方法不会被优化?反向顺序Comparator只是将实际Comparator的输出符号翻转(或compareTo上的输出符号插入可比较的对象),因此我认为它非常快。另一种建议:与其更改存储元素的顺序,不如使用descendingIterator()
在使用树集时,我发现了非常奇特的行为。根据我的理解,下面的程序应该打印两条相同的行:publicclassTestSet{staticvoidtest(String...args){Sets=newTreeSet(String.CASE_INSENSITIVE_ORDER);s.addAll(Arrays.asList("a","b"));s.removeAll(Arrays.asList(args));System.out.println(s);}publicstaticvoidmain(String[]args){test("A");test("A","C");}}但奇怪的是它会打
在使用树集时,我发现了非常奇特的行为。根据我的理解,下面的程序应该打印两条相同的行:publicclassTestSet{staticvoidtest(String...args){Sets=newTreeSet(String.CASE_INSENSITIVE_ORDER);s.addAll(Arrays.asList("a","b"));s.removeAll(Arrays.asList(args));System.out.println(s);}publicstaticvoidmain(String[]args){test("A");test("A","C");}}但奇怪的是它会打
我的列表包含像[1,3,5][2,6,4]等集合,它们的大小都相同。我试过这样做,但它似乎不起作用。List>block;for(TreeSett:block){block.stream().sorted((n,m)->n.compareTo(m)).collect(Collectors.toSet());}我想要的最终结果是[1,2,3][4,5,6]。我可以尝试将所有元素添加到ArrayList中并对其进行排序,然后创建一个包含TreeSet的新List。但是是否存在某种单一的衬垫?更新:Listlist=newArrayList();for(TreeSett:block){for
我正在尝试将TreeSet存储在DistributedCache上,以供Hadoopmap-reduce作业使用。到目前为止,我有以下用于将文件从HDFS添加到DistributedCache的方法:Configurationconf=newConfiguration();DistributedCache.addCacheFile(newURI("/my/cache/path"),conf);Jobjob=newJob(conf,"myjob");//ProceedwithremainderofHadoopmap-reducejobset-upandrunning如何有效地将TreeS
我正在尝试使用以下代码将TreeSet存储在SharedPreferences中:SetchemicalValuesSet=newTreeSet();chemicalValuesSet.add("id:"+checkForNull(jsonChemicalValues.getString("id")));editor.putStringSet(SP_CHEMICAL_VALUES,chemicalValuesSet);editor.apply();但是,当我尝试访问那个TreeSet时,我遇到了转换错误,就好像这个集合被声明为HashSet一样。SharedPreferencessha