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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

对 Java 集合的巧妙利用

發(fā)布時間:2024/4/15 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对 Java 集合的巧妙利用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

對 Java 集合的巧妙利用

?

  我們直接切入正題。首先大致介紹一下 Java 三大集合的一些特征:

  ①、ArrayList:底層采用數(shù)組結構,里面添加的元素有序可以重復。

  ②、HashSet:底層采用哈希表算法,里面添加的元素無序不可重復。

  ③、HashMap:底層也是采用哈希表算法,但是里面添加的元素是 key-value 的形式。key 不允許重復,value 可以。

?

  那么我們在日常編程中就可以好好利用這些集合的原理,簡化我們的編程思路。

?

  一、如何統(tǒng)計一字符串中每個字符出現(xiàn)的次數(shù)?

  解析:給定一串字符串,統(tǒng)計每個字符出現(xiàn)的次數(shù)。那么最后統(tǒng)計出來的格式應該如下:

      a---num個

      b---num個

        ...

      j---num個等等

      很明顯,這種格式首先第一個統(tǒng)計的字符是不能重復的,而出現(xiàn)的個數(shù)我們可以不用管。那么很容易聯(lián)想到 Map 的集合原理,key-value。我們將統(tǒng)計的字符放在 Map<Character,Integer>中是一種很好的實現(xiàn)方式。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public class CountCharTest { ????? ????public static Map<Character, Integer> countChar(Map<Character, Integer> map,String str){ ????????//將所給的字符串解析為一個字符構造的數(shù)組 ????????char[] chars = str.toCharArray(); ????????? ????????for(char c : chars){ ????????????if(map.containsKey(c)){ ????????????????int oldCount = map.get(c); ????????????????map.put(c, oldCount+1); ????????????}else{ ????????????????map.put(c, 1); ????????????} ????????} ????????? ????????return map; ????} ? ????public static void main(String[] args) { ????????String str = "afoiasfoffqefljflsda"; ????????//定義一個 Map 集合,用來存放統(tǒng)計的???? 字符--個數(shù) ????????Map<Character, Integer> hashMap = new HashMap<>(); ????????System.out.println(countChar(hashMap,str)); ????????//{f=6, d=1, e=1, s=2, q=1, a=3, o=2, l=2, j=1, i=1} ????} }

  補充:這里我們用來保存統(tǒng)計字符的是 HashMap 的實現(xiàn)類,這里打印出來的字符統(tǒng)計是無序的。如果我們想根據(jù)字符串給定的順序有序的統(tǒng)計出來,可以使 LinkedHashMap

?
1 2 3 4 5 6 7 public static void main(String[] args) { ????????String str = "afoiasfoffqefljflsda"; ????????//定義一個 Map 集合,用來存放統(tǒng)計的???? 字符--個數(shù) ????????Map<Character, Integer> linkedHashMap = new LinkedHashMap<>(); ????????System.out.println(countChar(linkedHashMap,str)); ????????//{a=3, f=6, o=2, i=1, s=2, q=1, e=1, l=2, j=1, d=1} ????}

  如果想用 uicode 的編碼順序打印給定的字符串,那么我們使用 TreeMap?

?
1 2 3 4 5 6 7 public static void main(String[] args) { ????????String str = "afoiasfoffqefljflsda"; ????????//定義一個 Map 集合,用來存放統(tǒng)計的???? 字符--個數(shù) ????????Map<Character, Integer> treeMap = new TreeMap<>(); ????????System.out.println(countChar(treeMap,str)); ????????//{a=3, d=1, e=1, f=6, i=1, j=1, l=2, o=2, q=1, s=2} ????}

  

  

  二、給定一個數(shù)組,如何去掉重復的數(shù)據(jù)?

  解析:這個聯(lián)想到集合的特定,我們就很容易想到用 Set 集合來解決。將數(shù)組中的元素都放到Set,然后將 Set 集合轉變?yōu)閿?shù)組就可以了。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class ClearRepeatTest { ????? ????public static Integer[] clearRepeat(int [] array){ ????????Set<Integer> set = new HashSet<>(); ????????for(int i : array){ ????????????set.add(i); ????????} ????????Integer[] newArray = set.toArray(new Integer[set.size()]); ????????return newArray; ????} ????? ????? ????public static void main(String[] args) { ????????//創(chuàng)建一個數(shù)組,可以看出 2和4 是重復的 ????????int [] array = {1,2,3,4,8,2,5,4}; ????????Integer[] newArray = clearRepeat(array); ????????for(Integer i : newArray){ ????????????System.out.println(i); ????????} ????????//1 2 3 4 5 8 ????????? ????} ? }

  補充:同理我們可以 改變 Set 集合的實現(xiàn)類,hashSet 是無序的,我們可以會用 LinkedHashSet 保證既定順序;TreeSet 保證自然順序

轉載于:https://www.cnblogs.com/123hll/p/6903344.html

總結

以上是生活随笔為你收集整理的对 Java 集合的巧妙利用的全部內容,希望文章能夠幫你解決所遇到的問題。

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