日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的Map集合练习题

發(fā)布時(shí)間:2024/8/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的Map集合练习题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

需求:

/*** 給定["a", "b", "a", "b", "c", "a", "b", "c", "b"]字符串?dāng)?shù)組,* 然后使用Map的key來保存數(shù)組中字符串元素,value保存該字符串元素的出現(xiàn)次數(shù)* 最后統(tǒng)計(jì)出各字符串元素的出現(xiàn)次數(shù)。*/

思路:

看到計(jì)算出現(xiàn)次數(shù)這種需求,我們就需要想到判重,如何將一個(gè)字符串里的元素找出出現(xiàn)的次數(shù)

for循環(huán)遍歷數(shù)組再裝入Map數(shù)組里

Map接口實(shí)現(xiàn)類常用的方法:

Map接口實(shí)現(xiàn)類的方法都是關(guān)于鍵值對(duì)的操作

  • put(key,value) 向集合中添加元素

  • get(key) 根據(jù)鍵對(duì)象找到值對(duì)象

  • keySet() 得到鍵對(duì)象的集合

  • values() 得到值對(duì)象的集合

  • remave(key) 根據(jù)鍵對(duì)象移除整個(gè)元素

  • containsKey(key) 判斷鍵對(duì)象在集合中是否存在

方法1代碼:

String[] str = {"a", "b", "a", "b", "c", "a", "b", "c", "b"};Map<String, Integer> map = new HashMap();for (int i = 0; i < str.length; i++) {int count = 0;for (int j = 0; j < str.length; j++) {if (str[i].equals(str[j])) {count++;}}map.put(str[i], count);}System.out.println(map);

方法1代碼總結(jié):

簡(jiǎn)單的雙for循環(huán)遍歷數(shù)組,當(dāng)重復(fù)時(shí)計(jì)數(shù),這種計(jì)數(shù)并添加進(jìn)Map集合,以外循環(huán)數(shù)組里的元素挨著去問自己的每一個(gè)元素,是你嗎,是你就+1,不是你就下一個(gè)。例如:

str里的a問了9個(gè)元素一遍后把自己出現(xiàn)的次數(shù)和自己(a)添加進(jìn)了Map集合,等到第2個(gè)a去問的時(shí)候,毫無疑問是同樣的出現(xiàn)次數(shù),再把自己(a)和自己出現(xiàn)的次數(shù)添加Map集合,第三個(gè)也如此。這里觸及到一個(gè)基礎(chǔ)知識(shí)點(diǎn):

Map接口當(dāng)中,鍵對(duì)象和值對(duì)象可以是任何類的實(shí)例,鍵不可以重復(fù),值可以重復(fù)。

所以需求是將Map的key(鍵值)來保存數(shù)組中字符串元素,而不是將出現(xiàn)的次數(shù)放到鍵值(key)。

第一次put,map的值是{"a","3"},第二次還是{"a","3"}。。。一直覆蓋到最后的count值。

我們可以得知:用這種自身元素有重復(fù)的數(shù)組來遍歷自身判重時(shí),數(shù)據(jù)量大的話效率會(huì)很低

由此我們可以借助另一個(gè)概念來解決這種循環(huán)次數(shù)太多的問題,Set和List之間的轉(zhuǎn)換。

這里又涉及到一個(gè)基礎(chǔ)知識(shí)點(diǎn):

Set和List的區(qū)別之一,List集合可以存儲(chǔ)一列數(shù)據(jù),數(shù)據(jù)內(nèi)容可以重復(fù),以元素安插的次序來方式元素,不會(huì)重新排列。而Set接口實(shí)現(xiàn)類,利用元素的hashCode和equals方法,判斷集合中元素是否重復(fù)。如果希望按元素的屬性值去除重復(fù)數(shù)據(jù),需要重寫hashCode和equals方法

我們根據(jù)這個(gè)概念可以j將List轉(zhuǎn)為Set,Set只會(huì)保留去重后的集合,我們就可以實(shí)現(xiàn)第二種方法

方法二代碼:

String[] str = {"a", "b", "a", "b", "c", "a", "b", "c", "b"};Map<Object, Integer> map = new HashMap();List list = Arrays.asList(str);Set set = new HashSet(list);for (Object item : set) {int count = 0;for (int i = 0; i < list.size(); i++) {if (item.equals(list.get(i))) {count++;}}map.put(item, count);}System.out.println(map);

方法二代碼總結(jié):

對(duì)比代碼一,在面對(duì)數(shù)據(jù)量大的情況時(shí),通過Set和List之間的轉(zhuǎn)換,我們可以得到去除重復(fù)后的集合,再用同等方式來進(jìn)行判重,效率遠(yuǎn)高于方法1

方法三代碼:

String[] str = {"a", "b", "a", "b", "c", "a", "b", "c", "b"};Map<String, Integer> map = new HashMap();for (int i = 0; i < str.length; i++) {if (map.containsKey(str[i])) {int v = map.get(str[i]);map.put(str[i], ++v);} else {map.put(str[i], 1);}}System.out.println(map);

方法三代碼總結(jié):

這個(gè)方法和上方倆個(gè)方法的思路完全不同,直接遍歷數(shù)組,在放進(jìn)Map集合中是,判斷Map集合中的鍵值是否有重復(fù)的,最重要的一步是else,當(dāng)?shù)谝淮伪闅vMap時(shí),在Map集合里是沒有鍵值得,所以進(jìn)入else賦值第一個(gè)鍵值和count次數(shù)

最后是輸出結(jié)果:

{a=3, b=4, c=2}

(本文為接觸Java不久的菜鳥所寫,如有誤區(qū),還望各位大佬在評(píng)論區(qū)多多指教,菜鳥虛心受教)

總結(jié)

以上是生活随笔為你收集整理的简单的Map集合练习题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。