I am trying to merge multiple sorted lists into one TreeSet.. And then I am thinking to apply Binary Search algorithm on that TreeSet to retrieve the element in O(log n) tim
TreeSet, by it's nature is a sorted set and uses a red-tree-black-tree via TreeMap as it's backing
Basically: TreeSet.add(E) -> TreeMap.put(E,NULL);
As it is already a binary, sorted tree structure any 'get' or 'contains' will result in an O(log n) operation.
Your code and your question though don't line up.
You're flattening a List<List<Integer>>
and just putting them all in to get all unique elements (or, at least, that's what this code will do).
But then your following method says "given this integer, give me a List<Integer>
" which isn't achievable in the above code
So, let me answer your questions in order:
If you need to do something like a "Set extraction" then use a TreeMap or turn your set back into a list and do myList.get(Collections.binarySearch(myElement));
You could use TreeSet.floor(), which according to the docs
Returns the greatest element in this set less than or equal to the given element, or null if there is no such element.
TreeSet
is backed by a NavigableMap
, a TreeMap
specifically. Calling contains()
on a TreeSet
delegates to TreeMap.containsKey()
, which is a binary search implementation.
You can check if an object is contained in the set by using TreeSet.contains()
, but you have to have the object first. If you want to be able to look up and retrieve an object, then a Map
implementation will be better.