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

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

如何在 java 中查找映射中某個值的出現(xiàn)次數(shù)

如何在 java 中查找映射中某個值的出現(xiàn)次數(shù)

米琪卡哇伊 2023-04-19 15:48:08
從控制臺輸入文件名。查找具有最大重復(fù)次數(shù)的一個或多個字節(jié)。在屏幕上顯示它們,以空格分隔。關(guān)閉 IO 流。如何解決這個任務(wù)?    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));    String fileName = reader.readLine();    FileInputStream inputStream = new FileInputStream(fileName);    Map<Integer, Integer> map = new HashMap<>();    int data;    Integer max = 0;    while (inputStream.available() > 0) {        data = inputStream.read();        if (map.containsValue(data)) map.replace(data, map.get(data) + 1);        else map.put(data, 1);        if (map.get(data) > max) max = map.get(data);    }        inputStream.close();    for (Map.Entry<Integer, Integer> entry : map.entrySet()){        if(entry.getValue() > max) {            System.out.print(entry.getKey() + "/t");        }    }    }}
查看完整描述

3 回答

?
喵喵時光機

TA貢獻(xiàn)1846條經(jīng)驗 獲得超7個贊

那一行:

if?(map.containsValue(data))?...

那不是你想要的。您從文件中讀取一個字節(jié),并且想知道該字節(jié)是否已存儲。作為關(guān)鍵,而不是價值!

因此你需要相應(yīng)的邏輯,像這樣:

int?counterForData?=?0;
if?(map.contains(data))?{
??counterForData?=?map.get(data);
}?
map.put(data,?counterForData+1);

意思是:你的是“數(shù)據(jù)字節(jié)”,你的是相應(yīng)的頻率。

當(dāng)該代碼有效時,您可以開始考慮編寫更少的代碼,例如使用computeIfAbsent()map.getOrDefault()甚至更好!


查看完整回答
反對 回復(fù) 2023-04-19
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊

  • containsKey將是正確的方法 io containsValue。

  • available給出可以從緩沖輸入中讀取多少字節(jié),而不會阻塞等待物理讀取。這意味著當(dāng)?shù)图?I/O 緩沖區(qū)為空時,仍然可能有數(shù)據(jù)。解決方案是讓代碼“阻塞”,等待下一次物理讀取。

  • 結(jié)果:所有具有最大計數(shù)的字節(jié)都需要遍歷 >= 或 == max。

因此:

Map<Byte, Integer> map = new HashMap<>();

int maxCount = 0;

//byte maxByte = 0;

int data;

while ((data = inputStream.read()) >= 0) {

    byte b = (byte)data;

    int count = map.getOrDefault(b, 0) + 1;

    map.put(b, count);

    if (count > maxCount) {

        maxCount = count;

        //maxByte = b;

    }

}

for (Map.Entry<Integer, Integer> entry : map.entrySet()){

    if (entry.getValue() == maxCount) {

        System.out.print(entry.getKey() + "\t");

    }

}

System.out.println();


查看完整回答
反對 回復(fù) 2023-04-19
?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊

這條線...

if?(map.containsValue(data))?map.replace(data,?map.get(data)?+?1);
else?map.put(data,?1);

檢查地圖是否已經(jīng)包含值(它不會因為你的地圖是空的)。您想要增加數(shù)據(jù)的數(shù)量(如果存在)或添加數(shù)據(jù)(如果尚不存在)。為此,請將上面的代碼片段替換為...

map.compute(data,?(k,?v)?->?(v?==?null)???1?:?v?+?1);

這會將新數(shù)據(jù)添加為[data, 1]并將現(xiàn)有數(shù)據(jù)更新為[data, previous value + 1].?如果你使用這個,你應(yīng)該閱讀有關(guān)compute功能


查看完整回答
反對 回復(fù) 2023-04-19
  • 3 回答
  • 0 關(guān)注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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