5 回答

TA貢獻1820條經(jīng)驗 獲得超10個贊
第一種,業(yè)務(wù)沒有需求,你寫第二種完全是瞎胡鬧,Map的get 和 put 操作性能都是常熟級的,倆個map就是倆次get倆次put,而且增加了業(yè)務(wù)復雜度

TA貢獻1802條經(jīng)驗 獲得超10個贊
如果id是UUID/GUID,就沒有必要用兩層Map,因為不會有Hash Collision;如果id在不同類型之間有重復的,你就必須用兩層Map。所以用一層或兩層Map并不在于性能,通常你也不需要考慮性能,Map的操作是很快,及時數(shù)據(jù)量很多。如果你因為擔憂Hash Collision(通常這種情況很少發(fā)生),你需要根據(jù)具體的數(shù)據(jù)結(jié)構(gòu),調(diào)整它的Hash算法或想其它的方法,多層的Map不是解決Hash Collision的一個有效的方案。另外,如果沒有什么原因,最好用HashMap
,而不是ConcurrentHashMap

TA貢獻1811條經(jīng)驗 獲得超5個贊
你這個問題基本上是無法回答的。因為沒有更加確切的信息和使用場景。
比如:總的數(shù)據(jù)量有多少,數(shù)據(jù)是初始化時一次加載的還是隨時更新的,如果更新的話更新頻率是多少,數(shù)據(jù)的訪問頻率是多少,是多個線程同時訪問/更新,還是單線程訪問/更新。更新和訪問場景,是每次局部化在某種特定水果類別里訪問不同id,還是和類別關(guān)系不大?
性能更好指的是加載性能,訪問性能還是修改更新性能?
為什么性能更好這個問題這么重要?多快算性能好呢?你有沒有做過基準測試來量化不同的性能對系統(tǒng)的影響。并且明確你想達到的目標呢?
添加回答
舉報