问题标签 [treeset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2038 浏览

java - 在 Java 中将 TreeSet contains() 与整数一起使用

contains() 方法不能按我预期的方式工作,即比较整数!输出为 15 ,当正常工作时应该为 9 , if(processed.contains(h1)==false) 当元素已经存在时返回 true !

代码可能在哪里出错?

0 投票
3 回答
1958 浏览

java - 如何在 TreeSet 中查找元素的排名

我知道您可以在树集中找到第一个和最后一个元素。如果我想知道第二个或第三个元素是什么而不进行迭代怎么办?或者,更可取的是,给定一个元素,找出它在树集中的排名。

谢谢

编辑:我认为你可以使用 tailset 来做到这一点,即。将原始集的大小与尾集的大小进行比较。tailset 的效率如何?

0 投票
2 回答
1125 浏览

java - 对 TreeSet 中的元素进行排名

我知道java树集不能有相同的元素,所以我必须以某种方式将一个元素与另一个元素区分开来,即使它们具有相同的“值”。我希望能够对元素进行排名,并且我注意到一个有趣的行为。

这是输出:

这是耳机应该做的:

我按降序排序,所以我认为它应该做相反的事情。第一个元素没有什么比它大,所以它返回 0,然后我加 1 来获得它的排名。第二个元素有一个比它大的东西,所以我认为它应该返回 1,加 1 等于 2。这有点奇怪。我想我犯了一个简单的错误。我还需要弄清楚如何处理这两个 20 年代。我希望他们的排名都是 3,但树集认为他们是不同的数字。我想我可以使用 TreeMultiSet 或其他一些第三方库。

0 投票
5 回答
3176 浏览

java - 修剪排序集

我有一个SortedSet(特别是 a TreeSet)包含更新。更新类似于 SVN 提交、Facebook 墙贴、新 Trac 票等。我将这些存储在 a 中是SortedSet因为:

  • 排序:更新需要按日期降序排序。
  • 集合:从更新源获取最新更新时,我通常会收到集合中已经存在的更新。

现在,过了一段时间,这个集合会变得非常大,所以我想从集合中删除除前 X 个项目之外的任何东西(因为无论如何其他项目都不会显示)。我该怎么做,因为它不是List?

0 投票
3 回答
4166 浏览

java - Java TreeSet contains() 给出错误结果

我正在尝试用java编写一些数学。我想要做的是将分圆陪集放到 TreeSet 中。陪集有一个索引和一组整数。如果集合具有相同的元素,则陪集等于其他陪集。如果集合不同,则陪集按其索引排序。

例如:

足够好的数学。我选择将陪集放到 TreeSet 中,因为我不需要重复的元素,我需要让它们按索引排序。

问题是即使 TreeSet.contains() 返回 false,我仍然可以在 TreeSet 中找到一个在使用 compareTo() 和 equals() 方法时相等的元素。

这是程序的实际打印输出:

我附上下面的代码。我不想让代码变得更简单,因为我发现它有一些魔力。如果您在代码中将 MAGIC_INDEX值更改为 7 或更少,它就会开始工作。对我来说,这似乎是一个 JVM 错误。

http://2m.lt/files/Main.java

http://2m.lt/files/Coset.java

有什么建议么?

0 投票
11 回答
24011 浏览

java - 比较器和 equals()

假设我需要TreeSet使用一些域逻辑排序的元素。按照这种逻辑,一些不相等的元素的顺序无关紧要,因此 compare 方法可以返回 0,但在这种情况下,我无法将它们放入TreeSet.

所以,问题:像这样的代码我会有什么缺点:

更新

好的。如果它应该始终是方法之间的一致性equals()hashcode()并且compareTo()正如@SPFloyd-seanizer 和其他人所说的那样。如果我删除Comparable接口并移动这个逻辑会更好甚至更好Comparator(我可以在不破坏封装的情况下做到这一点)?所以它将是:

更新 2

System.identityHashCode(x)hashCode()我不需要稳定排序更好吗?

0 投票
5 回答
663 浏览

java - 为什么我们可以为 TreeSet 提供 Comparator 而不能为 HashSet 提供类似 Hasher 的东西?

在 Java 6 中,我的理解是,您可以在创建 TreeSet 时为它提供一个 Comparator 以覆盖集合中对象的“自然顺序”。

你有什么想法为什么 Java 不支持提供覆盖集合中对象的“自然散列”的“Hasher”?

编辑:在未来设计 API 时,从您那里获得输入可能会对我有所帮助。

谢谢。

0 投票
4 回答
48177 浏览

java - 在 TreeSet 中,基于不同属性的自定义对象的排序和唯一性

下面是我的学生课

最新修改:但仍然没有得到正确的结果

如果我创建 TreeSet<Student> 的对象,我将获得基于唯一名称和按名称排序的 Student 对象的排序列表。

但是我的 TreeSet<Student> 中需要唯一的学生姓名,并按 student-rollNo 顺序排列。

比较器可以吗?任何人都可以帮助我,每一个建议都表示赞赏。谢谢。

更新:这是完整的程序:

更新:2:谢谢大家的建议,我还需要更多:)

输出

朋友们,无论我使用两个比较器得到什么,在添加对象时是否可以实现相同的效果?我不能先添加元素然后使用新的比较器来实现所需的顺序。
我正在操纵数千个值,因此还需要考虑性能。

0 投票
2 回答
849 浏览

java - 排序集和比较器

我正在使用一个TreeSet用于存储在执行 A* 算法期间使用的寻路位置的方法。

基本上,直到有“开放”元素(仍然要彻底访问),每个开放元素的邻居都会被考虑并添加到 aSortedSet中,以使它们按成本和启发式成本排序。这意味着我有一个像这样的课程:

以这种方式,首先考虑总成本,然后,由于需要总排序(与 equals 一致),因此要考虑根据 x,y 坐标的排序。

这应该有效,但如果我在算法执行期间迭代 TreeSet 就像在

我得到的结果没有保持正确的顺序,例如:

(7,7,6) (7,6,7) (6,8,6) (6,6,7) (5,8,7) (5,7,7) (6,7,6) ( 6,6,7) (6,5,7) (5,7,7) (5,5,8) (4,7,7) (4,6,8) (4,5,8)

我错过了什么微妙的东西吗?谢谢!

0 投票
4 回答
263 浏览

java - 泛型和树集

使用泛型绝对是我的弱点,在这方面可以使用一些帮助。

该项目是开发一个简单的订单/库存系统,该系统可以下订单、跟踪项目和库存,并记录自程序首次启动以来的所有库存和客户添加/删除。这需要读取和写入文件,我选择了 CSV 格式进行解析。有两个文件需要解析,一个Customers用于Items.

我想使用 TreeSet 来添加/搜索日志 N,但是我的文件解析遇到了一些问题。我不想让两个具有重复代码的类为其对象类型工作,我希望有一个解析类在执行时接收集合和文件路径,并将文件处理成一组完整的对象,两者都有不同领域和方法。

我想出的唯一解决方案是TreeSet<? extends Object>,但这意味着我必须将每个对象装箱,然后在结构中访问每个对象时将其拆箱。

有没有更简单的方法?