Tag: sortedset

Java中Set和SortedSet接口之间的逻辑不一致

我注意到Java中的Set和SortedSet接口之间存在逻辑不一致。 如果在比较期间它们相同,则SortedSet将不同的对象(通过equal()方法)识别为equals,但它在逻辑上是不正确的。 对象的比较应仅对对象的顺序负责。 例如:我可以有很多产品,我想按价格对它们进行排序。 在这种情况下,SortedSet不能包含具有相同价格的不同产品:[“salt”,0.5 $],[“milk”,1 $],[“bread”,1 $],[“bananas”,2 $ ]在上面的例子中,牛奶将被面包取代。 在这种情况下,将违反inheritance的Set接口的合同,因为不相等的对象会相互替换。 我更新了SortedSet的JavaDoc并且知道这个行为有很好的记录,但我认为这是一个逻辑上的失败。 你有什么看法,也许你已经和Set和SortedSet有类似的问题了?

有限的SortedSet

我正在寻找具有有限数量元素的SortedSet的实现。 因此,如果添加了更多元素,则指定的最大值比较器决定是否添加项目并从集合中删除最后一个项目。 SortedSet t1 = new LimitedSet(3); t1.add(5); t1.add(3); t1.add(1); // [1,3,5] t1.add(2); // [1,2,3] t1.add(9); // [1,2,3] t1.add(0); // [0,1,2] 标准API中是否有一种优雅的方法来实现这一目标? 我写了一个JUnit Test来检查实现: @Test public void testLimitedSortedSet() { final LimitedSortedSet t1 = new LimitedSortedSet(3); t1.add(5); t1.add(3); t1.add(1); System.out.println(t1); // [1,3,5] t1.add(2); System.out.println(t1); // [1,2,3] t1.add(9); System.out.println(t1); // [1,2,3] t1.add(0); System.out.println(t1); // [0,1,2] Assert.assertTrue(3 == […]

SortedSet,Arrays,Serializable的序列化问题

我在这个过程之前有这个: protected void onPostExecute(SortedSet result) { List list=Arrays.asList(result.toArray()); lancon.putExtra(“results”, list.toArray()); // as serializable } 然后在我的另一部分 Object o=this.getIntent().getSerializableExtra(“results”); //at this point the o holds the correct value (checked by debugger) RatedMessage[] rm = (RatedMessage[]) o;// this line hangs out w ClassCastException resultSet = new TreeSet(new Comp()); Collections.addAll(resultSet, rm); 为什么我得到ClassCastException?

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

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