使用二进制搜索从TreeSet返回元素

exe*_*ent 8 java arraylist binary-search treeset

在TreeSet中有一个名为contains的方法,如果元素在集合中,则返回true.我假设此方法使用二进制搜索,并不按升序迭代所有元素.我对吗?

我有一个TreeSet,它包含一个类的对象,该类使用两个String实例变量来区分它与同一个类的其他对象.我希望能够通过比较两个实例变量(当然使用get方法)和另外两个String变量来创建一个搜索TreeSet的方法,如果它们相等,则返回该元素.如果实例变量小于转到右子树中的第一个元素,或者如果它们在左子树中搜索更大等等.有没有办法做到这一点?

我知道我可以将对象存储在ArrayList中并使用二进制搜索来查找对象,但这不会像搜索TreeSet那么快.

小智 14

set.tailSet(obj).first();
Run Code Online (Sandbox Code Playgroud)

做你想要的.


Col*_*inD 6

TreeSet您可以将对象存储在TreeMap<Foo, Foo>或中TreeMap<FooKey, Foo>(如果Foo每次要搜索时都无法轻松创建新的实际内容),而不是使用a .Sets并不是真正用于查找的.

对于FooKey例如,FooKey将只包含两个简单的不可变类StringS和是Comparable.找到Foo两个Strings 的值将是一个简单的问题treeMap.get(new FooKey(firstString, secondString)).这当然会使用您想要查找值的树遍历.