對 Java 集合的巧妙利用


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

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

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

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

 

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

 

  一、如何統計一字符串中每個字符出現的次數?

  解析:給定一串字符串,統計每個字符出現的次數。那么最后統計出來的格式應該如下:

      a---num個

      b---num個

        ...

      j---num個等等

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

public class CountCharTest {
	
	public static Map<Character, Integer> countChar(Map<Character, Integer> map,String str){
		//將所給的字符串解析為一個字符構造的數組
		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 集合,用來存放統計的     字符--個數
		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}
	}
}

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

public static void main(String[] args) {
		String str = "afoiasfoffqefljflsda";
		//定義一個 Map 集合,用來存放統計的     字符--個數
		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 

public static void main(String[] args) {
		String str = "afoiasfoffqefljflsda";
		//定義一個 Map 集合,用來存放統計的     字符--個數
		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}
	}

  

  

  二、給定一個數組,如何去掉重復的數據?

  解析:這個聯想到集合的特定,我們就很容易想到用 Set 集合來解決。將數組中的元素都放到Set,然后將 Set 集合轉變為數組就可以了。

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) {
		//創建一個數組,可以看出 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 集合的實現類,hashSet 是無序的,我們可以會用 LinkedHashSet 保證既定順序;TreeSet 保證自然順序

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM