zoukankan      html  css  js  c++  java
  • 对 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 保证自然顺序

  • 相关阅读:
    电视剧的拍摄和发行
    常用键盘快捷键
    河北省各城市名称由来
    爱情16谈
    人生赏心十六件乐事
    Android——apk反编译
    Android.mk
    Android——init可执行程序
    Android启动脚本init.rc(2)
    MountService初探
  • 原文地址:https://www.cnblogs.com/ysocean/p/6834690.html
Copyright © 2011-2022 走看看