Java中Map和Set練習(xí)項目實例代碼
查找字母出現(xiàn)的次數(shù)
這道題的思路在后面的題目過程中能用到,所以先把這題給寫出來
題目要求:給出一個字符串?dāng)?shù)組,要求輸出結(jié)果為其中每個字符串及其出現(xiàn)次數(shù)。
思路:我們可以把數(shù)組里的字符串按順序放進map中,對于沒被放進去過的字符串,放進去次數(shù)為1,之前被放進過去的字符串,那就在其上重新放入,并把次數(shù)重新加1.
舉個例子,輸出的內(nèi)容是:
"this", "dog", "cat", "cat", "this", "dog"
現(xiàn)在是把每個元素放進去,在沒遇到一樣數(shù)據(jù)之前的過程,如是上面所示,如果遇到了一樣的數(shù)據(jù),
這個操作看起來可能是把第二個cat放進去了,但是實際上是把cat重新輸入了,然后把Key值輸入為2了。因為map其中節(jié)點的樣子如上圖所示。
代碼部分如下
import java.util.HashMap; import java.util.Map; import java.util.Set; public class Test { public static Map<String, Integer> countWords(String[] words){ Map<String, Integer> map = new HashMap<>(); for(String word : words){ if(map.get(word) == null){ map.put(word, 1); }else { int val = map.get(word); map.put(word, val+1); } } return map; } public static void main(String[] args) { String[] words = {"this", "dog", "cat", "cat", "this", "dog"}; Map<String, Integer> map = countWords(words); Set<Map.Entry<String, Integer>> entryset = map.entrySet(); for (Map.Entry<String, Integer> entry : entryset){ System.out.println("Key: " + entry + " Val: " + entry.getKey()); } } }
只出現(xiàn)一次的數(shù)字
題目鏈接:只出現(xiàn)一次的數(shù)字 - 力扣(LeetCode)
題目描述:給一個 非空 整數(shù)數(shù)組 nums
,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。
思路:這里的思路和上面的 查找字母出現(xiàn)的次數(shù) 有些像。依次把元素放到set中,如果set中沒有該元素,就把該元素放進去,如果有,就把這個元素從set中刪去。最后輸出set中的元素
以 {1,2,3,4,1,2,3} 為例,當(dāng)?shù)谝淮瓮锓?,沒有遇到重復(fù)的元素時,如下圖
按照數(shù)組的順序,接著向下放,就會遇到重復(fù)的元素,這時候就要把set中的元素給刪除了
后面的2,3也要依次從set中刪除。
public static int singleNumber(int[] nums){ HashSet<Integer> set = new HashSet<>(); for (int i = 0; i < nums.length; i++) { if(set.contains(nums[i])){ set.remove(nums[i]); }else{ set.add(nums[i]); } } for (int i = 0; i < nums.length; i++) { if(set.contains(nums[i])){ return nums[i]; } } return -1; } public static void main(String[] args) { int[] array = {1,2,3,4,1,2,3}; System.out.println(singleNumber(array)); }
運行結(jié)果如下
壞鍵盤打字
題目鏈接:
題目描述:舊鍵盤上壞了幾個鍵,于是在敲一段文字的時候,對應(yīng)的字符就不會出現(xiàn)?,F(xiàn)在給出應(yīng)該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。
輸入在兩行中分別給出應(yīng)該輸入的文字、以及實際輸入的文字
按照發(fā)現(xiàn)順序,在一行中輸出壞掉的鍵。其中英語字母只輸出大寫,每個壞鍵只輸入一次。
示例
輸入
7_This_is_a_test
_hs_s_a_es
輸出
7TI
題目思路:該題的思路在于如何找出壞鍵,這里提供一種思路,先把實際輸入的數(shù)據(jù)放到set中,然后再把應(yīng)該輸入的文字遍歷一遍,如果其中有set中沒有的數(shù)據(jù),那些沒有的數(shù)據(jù)便是壞掉的鍵。
public static void func(String str1, String str2){ //將字符串大寫 str1 = str1.toUpperCase(); str2 = str2.toUpperCase(); HashSet<Character> setAct = new HashSet<>(); for (int i = 0; i < str2.length(); i++) { char ch = str2.charAt(i); setAct.add(ch); } for (int i = 0; i < str1.length(); i++) { char ch = str1.charAt(i); if(!setAct.contains(ch)){ System.out.print(ch); } } } public static void main(String[] args) { func("7_This_is_a_test", "_hs_s_a_es"); }
這樣的代碼還是存在問題,沒辦法把其中重復(fù)出現(xiàn)的元素給消去,輸出的結(jié)果是
現(xiàn)在問題變成了如何去重,這部分不難能想到,我們可以創(chuàng)建一個setBroken來存放已經(jīng)查找到的壞鍵,如果set和setBroken中都沒有這個元素才打印.
public class Test { public static void func(String str1, String str2){ str1 = str1.toUpperCase(Locale.ROOT); str2 = str2.toUpperCase(Locale.ROOT); HashSet<Character> setAct = new HashSet<>(); for (int i = 0; i < str2.length(); i++) { char ch = str2.charAt(i); setAct.add(ch); } //第一步是把不同的數(shù)給挑出來,然后對于重復(fù)輸出的數(shù)據(jù)給去重 HashSet<Character> setBroken = new HashSet<>(); for (int i = 0; i < str1.length(); i++) { char ch = str1.charAt(i); if(!setAct.contains(ch) && !setBroken.contains(ch)){ setBroken.add(ch); System.out.print(ch); } } } public static void main(String[] args) { func("7_This_is_a_test", "_hs_s_a_es"); } }
輸出結(jié)果為
總結(jié)
到此這篇關(guān)于Java中Map和Set練習(xí)項目的文章就介紹到這了,更多相關(guān)Java Map和Set練習(xí)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Web學(xué)習(xí)之Cookie和Session的深入理解
這篇文章主要給大家介紹了關(guān)于Java Web學(xué)習(xí)之Cookie和Session的相關(guān)資料,需要的朋友可以參考下2018-04-04@RequiredArgsConstructor如何實現(xiàn)構(gòu)造器注入
這篇文章主要介紹了@RequiredArgsConstructor如何實現(xiàn)構(gòu)造器注入問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09SpringBoot ThreadLocal 簡單介紹及使用詳解
ThreadLocal 叫做線程變量,意思是 ThreadLocal 中填充的變量屬于當(dāng)前線程,該變量對其他線程而言是隔離的,也就是說該變量是當(dāng)前線程獨有的變量,這篇文章主要介紹了SpringBoot ThreadLocal 的詳解,需要的朋友可以參考下2024-01-01