统计两个相对应集合的重复个数

来源:互联网 发布:mac系统内存清理 编辑:程序博客网 时间:2024/05/18 22:45
  大二的时候做程序,遇到一问题苦思冥想不得解决,于是壮着胆跑办公室问专业老师。。当时老师说这问题好,让我把问题整理下。。后来才知道,我的问题被载入每学期必须做的实验内容里。。后来上了大三,。。有一个别的专业的同学刚学java,跑过来找我,说老师让他问我,还说这个问题是我出的(哇咔咔~当时那是相当滴自豪呐。)。。。然后现在大四。。又有同学跑过来找我(这个。。你懂的)。额,不扯了,高兴归高兴,其实这问题也不难。。顺便觉得有必要在网上分享一下(虽然一直潜水)。。。如若有更好的方式,欢迎指出,大家共同学习。。

       当时记得老师给的思路是用两个map..Map里面的value值也是个Map类型的。。但是,今天又拿来做,用了一个新的方法,觉得也不错。。

       啊,其实,我还是比较喜欢操纵字符串。。。


问题描述:

    任意给出两组个数相同的集合a和b。 ( 例如,a为{2,1,2,2},  b为{1,0,0,1} ),编写程序求:
   a中每一个数与b中同一位置的数称为对应关系,统计a中每种数所对应的b的取值的个数:(如上述例子中,当a为2时,b中有0和1两种取值,其中0的取值个数为1个,1的取值个数为2个;当a为1时,b中只有0这一种取值,且0的取值个数为1。)


import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TT {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int a[] = {2,1,2,2};
        int b[] = {1,0,0,1};

     
        String[] str =new String[a.length];
        for(int i=0; i<a.length ;i++){
            String s=""+a[i]+b[i];
            str[i]=s;
        }

        Map<String, Integer> map = new HashMap<String, Integer>();
        for (String s : str) {
            map.put(s, map.get(s) == null ? 1 : map.get(s)+1);
        }

        //print
        Set<String> keySet = map.keySet();
        for (String ss : keySet) {
            System.out.println("数组a中的" + ss.charAt(0) + "对应于数组b中的"
                    + ss.charAt(1) + ",重复个数为:" + map.get(ss));
        }
    }

}

输出结果:
数组a中的2对应于数组b中的1,重复个数为:2
数组a中的2对应于数组b中的0,重复个数为:1
数组a中的1对应于数组b中的0,重复个数为:1

同样两个数组中的内容可以随便换,只要两个数组长度一样就行。。例如:

       int a[] = { 3,  4,  3,  3,  4,  3 };
        int b[] = { 2, 4,  1,  1,  4,  2};




原创粉丝点击