Tag: treeset

为什么Java的TreeSet remove(Object)不带E

从Java 6 TreeSet文档: boolean remove(Object o): Removes the specified element from this set if it is present. 为什么这会接受Object而不是genericsE? 唯一可以添加的对象是E类型,因此唯一的可移动类型应该是E类型。

比较器和等号()

假设我需要使用某些域逻辑排序的元素的TreeSet 。 通过这个逻辑,一些元素的顺序并不重要,因此比较方法可以返回0,但在这种情况下我不能将它们放在TreeSet 。 所以,问:我将从这样的代码中得到什么缺点: class Foo implements Comparable{} new TreeSet(new Comparator(){ @Override public int compare(Foo o1, Foo o2) { int res = o1.compareTo(o2); if(res == 0 || !o1.equals(o2)){ return o1.hashCode() – o2.hashCode(); } return res; } }); 更新 : 好。 如果它应该始终是方法equals() , hashcode()和compareTo()之间的一致性,如@SPFloyd – seanizer和其他人说。 如果我将删除Comparable接口并在Comparator移动此逻辑(我可以在没有破坏封装的情况下完成它)会更好甚至更好吗? 所以它将是: class Foo{} new TreeSet(new Comparator(){ @Override public […]

Treeset按降序排列元素

这是我用于Java 5.0的代码段 TreeSet treeSetObj = new TreeSet( Collections.reverseOrder() ) ; Collections.reverseOrder()用于获取比较器,以反转元素的存储和迭代方式。 有更优化的方式吗?

等于和可比较集

我在这里发布了一些代码,正确解决了海报的问题。 OP希望删除重复项并将某些特殊项目放在列表顶部。 我使用了一个TreeSet和一个特殊的Comparable类,它包含了他们正在使用的Locale来实现他们想要的东西。 然后我开始思考……正如你所做的那样…我通过从compareTo方法返回0来消除重复,而不是从equals实现返回true ,因为需要做的是正确地指示Set的重复(从一个Set的定义 )。 我不反对使用这种技术,但我使用的是什么可能被视为无证件的function ? 我可以安全地假设继续这样做会继续发挥作用吗?

如何在TreeSet中找到元素的索引?

我正在使用TreeSet ,我非常想在集合中找到数字的索引。 有没有一种很好的方法来实际利用二叉树的O(log(n))复杂度? (如果不是,我该怎么做,有谁知道为什么不呢?我很好奇为什么这样的类会被包含在Java中,而不会像搜索函数那样。)

为什么我的TreeSet不会添加除第一个元素之外的任何内容?

我在表单中有几个数组: private static String[] patientNames = { “John Lennon”, “Paul McCartney”, “George Harrison”, “Ringo Starr” }; 然后我像这样制作一个TreeSet: TreeSet patTreeSet = new TreeSet(); 患者是另一类产生“患者”对象的人。 然后我遍历我的数组中的每个元素来创建几个患者并将它们添加到我的patTreeSet如下所示: for(int i = 0; i< patientNames.length; i++){ Date dob = date.getDate("MM/dd/yyyy", patientBirthDates[i]); Patient p = new PatientImpl(patientNames[i], patientSSN[i], dob); patTreeSet.add(p); } 但是当我去检查我的patTreeSet.size()时它只返回“1” – 这是为什么? 我知道我的对象运行良好,因为当我尝试使用ArrayList做同样的事情时,一切正常。 所以我猜我正在使用TreeSet错误。 如果有帮助,患者有一个名为getFirstName()的方法,当我尝试执行以下操作时: Iterator patItr = patTreeSet.iterator(); […]

为什么TreeSet会抛出ClassCastException

在下面的代码我试图添加两个员工对象 Set s = new TreeSet(); s.add(new Employee(1001)); s.add(new Employee(1002)); 但Result是java.lang.ClassCastException: Exception in thread “main” java.lang.ClassCastException: Employee cannot be cast to java.lang.Comparable at java.util.TreeMap.put(TreeMap.java:542) at java.util.TreeSet.add(TreeSet.java:238) at MyClient.main(MyClient.java:9) 但如果我换到。 Set s = new TreeSet(); s.add(new Employee(1001)); 要么 Set s = new HashSet(); s.add(new Employee(1001)); s.add(new Employee(1002)); 那么结果就是成功也没有例外。 我没有在上面的代码中进行任何类转换活动。 请帮我找出原因并建议我解决方案。