is there a sorted set implementation that allows one to get the first element in O(1)? C++'s std::set can do this, so I don't see why we can't do this in Java. Thanks!
Java SortedSet Implementation that allows you to get smallest/largest element in O(1)
566 Views Asked by Hisham Hijjawi At
1
There are 1 best solutions below
Related Questions in JAVA
- I need the BIRT.war that is compatible with Java 17 and Tomcat 10
- Creating global Class holder
- No method found for class java.lang.String in Kafka
- Issue edit a jtable with a pictures
- getting error when trying to launch kotlin jar file that use supabase "java.lang.NoClassDefFoundError"
- Does the && (logical AND) operator have a higher precedence than || (logical OR) operator in Java?
- Mixed color rendering in a JTable
- HTTPS configuration in Spring Boot, server returning timeout
- How to use Layout to create textfields which dont increase in size?
- Function for making the code wait in javafx
- How to create beans of the same class for multiple template parameters in Spring
- How could you print a specific String from an array with the values of an array from a double array on the same line, using iteration to print all?
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Accessing Secret Variables in Classic Pipelines through Java app in Azure DevOps
- Postgres && statement Error in Mybatis Mapper?
Related Questions in COLLECTIONS
- Collections.max with custom Comparator on list
- ImportError: cannot import name 'Mapping' from 'collections' (E:\Anaconda\envs\nlp\Lib\collections\__init__.py)
- How to solve sonarqube issue based on bug to return a copy
- Pluck from a Java Collection using stream
- Havin a error with working a collection after deserialize json
- Are there any drawbacks in merging collections with Stream.concat()?
- Iterate with List(mylist.size){ index -> TODO()} or Map in kotlin Kotlin
- How to Pass-in a Collection name and Document Key to an AQL query to update the document
- Unexpect Behavior with Multiple Java Threads and TreeMap.put()
- Kotlin - Lists operations between lists with different T's
- C# Dictionary.Add(KeyValue, Structure) updates all existing records with last added structure but with the new KeyValue
- Mongodb find operation in embedded document
- what's the purpose of a local variable copy of internal array in dotnet collections source code
- How to implement read and write locking for a MongoDB collection?
- Custom equality comparator for set operation in Kotlin
Related Questions in SORTEDSET
- SortedSet.Remove() doesn't remove element returned by SortedSet.Min
- C# PropertyInfo.GetValue() when the property is a SortedSet<T>
- Problem with removing an element from SortedSet
- how to do a trending list of posts that a user has not seen already
- SortedSet is not removing some element from it
- How can I fix the 'AttributeError: 'int' object has no attribute 'items'' in Redis when using zadd() to add values to a sorted set?
- Redis: set all scores in a sorted set to a given value
- User Rank from sorted set using dense ranking method
- Complexity of Overlaps SortedSet<T>
- C# bank system SortedSet
- Where would a sortedSet go in this UML diagram?
- Redis sortedset get top 100 or N scores with values in descending order error
- Redis, how to search by value in a sorted set?
- Using custom comparer with Dictionary and SortedSet
- Why does my main sorted set treeset get modified when i modify my tailset in java?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I presume you've seen the
firstandlastmethods:The Java API docs don't say what their Big-O performance is. They could conceivably be O(1).
SortedSetis an interface, so it depends on the concrete implementation you use.Tree set
SortedSets are usuallyTreeSets, so in practice they are O(log n).TreeSetleveragesTreeMap, andTreeMapdoesn't cache the first and last nodes. When you callfirstorlast, or create an iterator, it starts at the root and traverses down and left (or down and right) to find the target node. That takes O(log n) time.See the OpenJDK source:
Practically speaking, O(log n) is pretty close to O(1). In a sorted set with a million elements it would only take 20 traversals to find the first/last node (log2 1,000,000 ≈ 20).
Heap or priority queue
If you want true O(1) performance then a heap—i.e., a
PriorityQueue—is a better data structure than a tree. A heap doesn't maintain the entire set of elements in sorted order. Yet you can always get the head element in O(1) time. Removing the head takes O(log n) time, after which the new head is available for instant lookup.Skip list
There is also a lesser used
ConcurrentSkipListSetclass. Per Wikipedia:Finding the first element is O(1). There's a loop but it only loops more than once if it needs to clean up nodes that have been marked for deletion. It returns immediately when it doesn't have any deletions to process. See the OpenJDK source:
Finding the last element, on the other hand, is... um... not O(1).