Comments (14)
Just wondering: why to go with the 1.0f
factor? This way we are using the DEFAULT_LOAD_FACTOR
of 0.75f
.
from jodd.
The same to jodd.cache.FIFOCache
and jodd.cache.LRUCache
. If loadFactor less than 1.0f, It leads to additional capacity expansion when the capacity can't be fully utilized.
from jodd.
If loadFactor less than 1.0f, It leads to additional capacity expansion when the capacity can't be fully utilized.
As it does when it exceeds 1.0f
.
There is a reason why Sun decided to go with 0.75f
As a general rule, the default load factor (.75) offers a good tradeoff between time and space costs. Higher values decrease the space overhead but increase the lookup cost (reflected in most of the operations of the HashMap class, including get and put).
from jodd.
Perhaps you didn't recognize my real problem. When Map is initialized, its capacity is fixed, then this does not matter with any space costs.
cacheMap = new HashMap<>(maxSize + 1, 1.0f);
This makes no costs later after it's be initialized. Right?
from jodd.
I am not sure what you mean by "fixed". That is the initial capacity.
Can you elaborate how Sun was wrong with their standard approach?
from jodd.
Not Sun's problem. Maybe my English is poor..
from jodd.
Well, you are saying that Sun's default value is an issue.
from jodd.
Not yet. Waiting for another one to answer my question...
from jodd.
I believe that since we should not allow more then maxSize
elements, the Map internal size should be limited to this number as well. Otherwise, once when we reach 75% the HashMap will grow, but we can use only remaining 25%, and not the rest.
from jodd.
Not yet? That is what you have been saying and it would be good to know why you disagree with Sun.
@igr, I am not sure I quite follow.
from jodd.
Sorry @neroux didn't explain myself.
So what is going on here is that we don't need any factor, as we have initial size that never gets resized.
What @wnjustdoit says is that he assumes that initial size is less then maxSize
. In such case he would be correct: if e.g. maxSize is 100, and initial size is 60, when we add element 61, the internal size would grow > 100.
@wnjustdoit since we are setting the initial seize to be max+1, the internal resize would never happened. agree?:)
from jodd.
Thanks for the summary, @igr. Yeah, that should never be an issue in the first place and to be fair, even 0.75f
shouldn't be an issue.
Again, Sun's stance on that :)
As a general rule, the default load factor (.75) offers a good tradeoff between time and space costs. Higher values decrease the space overhead but increase the lookup cost (reflected in most of the operations of the HashMap class, including get and put).
from jodd.
@igr So what's the conclusion?
from jodd.
Since it is not really an issue, this should be closed @wnjustdoit ... let me know if I am missing something :)
from jodd.
Related Issues (20)
- optional return types for jodd-json HOT 3
- jodd-http set body encoding HOT 2
- java.lang.IndexOutOfBoundsException HOT 8
- java.lang.IndexOutOfBoundsException HOT 17
- When I send one email with attachment, the attachment name is gibberish in Chinese. HOT 2
- envelopeOnly() results in lots of fetching compared to folder.search HOT 2
- java.lang.IndexOutOfBoundsException for 27 pages - tested 862_674 pages. HOT 42
- jodd-petite singleton scope bean is thread safe?? HOT 1
- petite problem: when invoke addBean will throw MalformedParametersException HOT 4
- Can you integrate Swagger Doc like Spring frame? HOT 1
- Duplicate class HOT 22
- fix jodd-db document HOT 1
- InterfaceImplementation.java ClassCastException when interface return primitive type but not number HOT 1
- [How to] register custom action annotation? HOT 1
- Required OSGi headers missing HOT 3
- IDEA: Provide PathMacros in util module HOT 1
- LRUCache has Concurrency problem HOT 5
- tag missing problem
- 🧚🤖 Pixeebot Activity Dashboard
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jodd.