【发布时间】:2012-04-07 04:11:17
【问题描述】:
在 TreeSet 中有一个名为 contains 的方法,如果元素在集合中,则该方法返回 true。我假设此方法使用二进制搜索并且不会按升序遍历所有元素。我对吗?
我有一个 TreeSet,它包含一个类的对象,该类使用两个 String 实例变量来将其与同一类的其他对象区分开来。我希望能够通过将对象的两个实例变量(当然使用 get 方法)与其他两个 String 变量进行比较来创建一个搜索 TreeSet 的方法,如果它们相等,则返回元素。如果实例变量小于转到右子树中的第一个元素,或者如果它们在左子树中进行更大的搜索等。有没有办法做到这一点?
我知道我可以将对象存储在 ArrayList 中并使用二进制搜索来查找对象,但这不会像搜索 TreeSet 一样快。
【问题讨论】:
-
你怎么知道
ArrayList中的二分查找没有那么快?你试过了吗? -
我的意思是每次我需要搜索一个元素并返回它时将元素从 TreeSet 传递到一个新的 ArrayList 很慢。
-
啊,是的,那肯定会很慢。但是,如果您首先构建集合,然后多次搜索,那么对
ArrayList进行排序和二进制搜索可能会非常快。 -
如果一个实例变量大于其对应变量而另一个实例变量小于其对应变量怎么办?那应该怎么排序呢?
-
@Carl Manaster:对象首先按其中一个字符串排序,然后是另一个。就像姓名列表会先按姓氏排序,然后按名字排序。
标签: java arraylist binary-search treeset