第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

大堆數(shù)據(jù)放在ConcurrentHashMap里去,是分層放,還是放一層,哪個性能更好?

大堆數(shù)據(jù)放在ConcurrentHashMap里去,是分層放,還是放一層,哪個性能更好?

躍然一笑 2019-03-01 10:37:51
比如數(shù)據(jù)為 Apple, Orange, Pear,等一堆水果,每一個水果有一個ID,然后每個水果有一堆元數(shù)據(jù),用json string表示。 現(xiàn)在要把他們放到ConcurrentHashMap里去有兩種方案 1)放在一層ConcurrentHashMap<String, String>,key為字符串 水果名+ID, 譬如Apple_1323dfutffa342, Orange_dlfjao23231fs121122) 分兩層,用ConcurrentHashMap<Class<?>, ConcurrentHashMap>表示第一層,key為諸如 Apple.class, Orange.class第二層為ConcurrentHashMap<String, String>, key為ID 哪種性能更好,包括多線程同步性能?
查看完整描述

5 回答

?
拉莫斯之舞

TA貢獻1820條經(jīng)驗 獲得超10個贊

第一種,業(yè)務(wù)沒有需求,你寫第二種完全是瞎胡鬧,Map的get 和 put 操作性能都是常熟級的,倆個map就是倆次get倆次put,而且增加了業(yè)務(wù)復雜度

查看完整回答
反對 回復 2019-03-01
?
守候你守候我

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

查看完整回答
反對 回復 2019-03-01
?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

我通常使用第二種,這樣更符合java的設(shè)計思想。

至于效率:沒太大差別,可以不用考慮。

查看完整回答
反對 回復 2019-03-01
?
四季花海

TA貢獻1811條經(jīng)驗 獲得超5個贊

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

查看完整回答
反對 回復 2019-03-01
  • 5 回答
  • 0 關(guān)注
  • 934 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號