简单的Map集合练习题
需求:
/*** 給定["a", "b", "a", "b", "c", "a", "b", "c", "b"]字符串數組,* 然后使用Map的key來保存數組中字符串元素,value保存該字符串元素的出現次數* 最后統計出各字符串元素的出現次數。*/思路:
看到計算出現次數這種需求,我們就需要想到判重,如何將一個字符串里的元素找出出現的次數
for循環遍歷數組再裝入Map數組里
Map接口實現類常用的方法:
Map接口實現類的方法都是關于鍵值對的操作
-
put(key,value) 向集合中添加元素
-
get(key) 根據鍵對象找到值對象
-
keySet() 得到鍵對象的集合
-
values() 得到值對象的集合
-
remave(key) 根據鍵對象移除整個元素
-
containsKey(key) 判斷鍵對象在集合中是否存在
方法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代碼總結:
簡單的雙for循環遍歷數組,當重復時計數,這種計數并添加進Map集合,以外循環數組里的元素挨著去問自己的每一個元素,是你嗎,是你就+1,不是你就下一個。例如:
str里的a問了9個元素一遍后把自己出現的次數和自己(a)添加進了Map集合,等到第2個a去問的時候,毫無疑問是同樣的出現次數,再把自己(a)和自己出現的次數添加Map集合,第三個也如此。這里觸及到一個基礎知識點:
Map接口當中,鍵對象和值對象可以是任何類的實例,鍵不可以重復,值可以重復。
所以需求是將Map的key(鍵值)來保存數組中字符串元素,而不是將出現的次數放到鍵值(key)。
第一次put,map的值是{"a","3"},第二次還是{"a","3"}。。。一直覆蓋到最后的count值。
我們可以得知:用這種自身元素有重復的數組來遍歷自身判重時,數據量大的話效率會很低
由此我們可以借助另一個概念來解決這種循環次數太多的問題,Set和List之間的轉換。
這里又涉及到一個基礎知識點:
Set和List的區別之一,List集合可以存儲一列數據,數據內容可以重復,以元素安插的次序來方式元素,不會重新排列。而Set接口實現類,利用元素的hashCode和equals方法,判斷集合中元素是否重復。如果希望按元素的屬性值去除重復數據,需要重寫hashCode和equals方法
我們根據這個概念可以j將List轉為Set,Set只會保留去重后的集合,我們就可以實現第二種方法
方法二代碼:
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);方法二代碼總結:
對比代碼一,在面對數據量大的情況時,通過Set和List之間的轉換,我們可以得到去除重復后的集合,再用同等方式來進行判重,效率遠高于方法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);方法三代碼總結:
這個方法和上方倆個方法的思路完全不同,直接遍歷數組,在放進Map集合中是,判斷Map集合中的鍵值是否有重復的,最重要的一步是else,當第一次遍歷Map時,在Map集合里是沒有鍵值得,所以進入else賦值第一個鍵值和count次數
最后是輸出結果:
{a=3, b=4, c=2}(本文為接觸Java不久的菜鳥所寫,如有誤區,還望各位大佬在評論區多多指教,菜鳥虛心受教)
總結
以上是生活随笔為你收集整理的简单的Map集合练习题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米线刷/救砖简易教程
- 下一篇: 社交网络影响力最大化基础知识总结