急!!有一个数组,其中有很多元素的内容是重复的,怎样数出其中重复的数以及其重复的次数。谢谢!! 个人觉得数据集可能比较快但是我是菜鸟,一个一个数去排列觉得太复杂,也希望达人能讲解一下最好给个Code比较直观一些。小弟跪谢了!

解决方案 »

  1.   

    用HashSet去做, 不断的Add,失败的就是重复的,计数,成功的就是不重复的。
      

  2.   

    public class Test {
    private Map map = new HashMap();

    public void add(Object element){
    int res;
    if( !map.containsKey(element) ){
    res = 1;
    }else{
    res = ((Integer)map.get(element)).intValue()+1;
    }

    map.put(element, new Integer(res));
    }

    public Iterator getElement(){
    return map.keySet().iterator();
    }

    public int getValue(Object element){
    return ((Integer)map.get(element)).intValue();
    }

    public static void main(String[] args) {
    Test cmp = new Test();
    String [] test = {"a","b","a","c","d","b","c","e","a"};
    for( int i=0; i<test.length; i++ ){
    cmp.add(test[i]);
    }

    Iterator it = cmp.getElement();
    while( it.hasNext() ){
    Object element = it.next();
    int res = cmp.getValue(element);
    System.out.println(element+":"+res);
    }
    }
    }
      

  3.   

    好长啊,好像是通用的,我看着好抽象有点看不懂,我是新手,能不能根据[1,2,2,3,3,4,5,2,6,]这个数组编一个,楼上的程序好多public
    头好大,但还是谢谢Code
      

  4.   

    public   static   void   main(String[]   args)   { 
    Test   cmp   =   new   Test(); 
    String   []   test   =   {"a","b","a","c","d","b","c","e","a"}; 
    for(   int   i=0;   i <test.length;   i++   ){ 
    cmp.add(test[i]); 
    } Iterator   it   =   cmp.getElement(); 
    while(   it.hasNext()   ){ 
    Object   element   =   it.next(); 
    int   res   =   cmp.getValue(element); 
    System.out.println(element+":"+res); 这个程序就可以吧但是
    Iterator   it   =   cmp.getElement(); 
    while(   it.hasNext()   ){ 
    Object   element   =   it.next(); 
    int   res   =   cmp.getValue(element); 
    System.out.println(element+":"+res); 
    有点看不懂哦,能跟我说一下数据集的用法吗?
      

  5.   


    import java.util.*;public class Test {
    public static void main(String args[]) throws Exception {
    int[] ints = new int[]{1,2,2,3,3,4,5,2,6};
    HashSet<Integer> set = new HashSet<Integer>();
    HashMap<Integer, Integer>/*重复的数,重复的次数*/ map = new HashMap<Integer, Integer>();
    int lastSetSize = 0;
    for(int i:ints){
    set.add(i);
    if(set.size()==lastSetSize){//如果是true则这个数字必定重复
    if(map.containsKey(i)){//如果是true,则不止一次重复
    map.put(i, map.get(i)+1);
    }else{
    map.put(i, 1);//数字i重复了1次
    }
    }
    lastSetSize = set.size();
    }
    System.out.println("重复数字列表");
    for(Integer i:map.keySet()){
    System.out.println("数字"+i+"重复次数"+map.get(i)+"次");
    }
    }
    }
      

  6.   

    手头没有Eclipse,看明白了就可以改了。
    #include <iostream>
    #include <set>
    #include <map>
    using namespace std;
    int main (int argc, char * const argv[])
    {
    int a[] = { 1, 2, 3, 1, 3, 1, 4, 2 }; set<int> s;
    map<int, int> m;
    for (int i = 0; i < sizeof(a) /  sizeof(int); ++i)
    {
    if (s.find(a[i]) != s.end())
    {
    m[a[i]] += 1;
    }
    else
    {
    s.insert(a[i]);
    m[a[i]] = 1;
    }
    }

    map<int, int>::iterator iter = m.begin();
    for (; iter != m.end(); ++iter)
    {
    cout<<iter->first<<" "<<iter->second<<"\n";
    }
    return 0;
    }
      

  7.   

    如果元素是0-n的,可以建一个array[n+1]的数组,初始化为0,
    遍历,array[i] += 1;
      

  8.   

    int lastSetSize = 0;
    set.size()
    map.containsKey(i)
    是什么意思啊?感谢八爪鱼的Code我现在水平就是会编条件循环什么的刚学不到1个月,比较面对于数据集也不太了解,希望大家多帮忙!!
      

  9.   

    map.put(i, map.get(i)+1);
    这个是什么意思有什么作用?
      

  10.   

    int[] ints = new int[]{1,2,2,3,3,4,5,2,6};
    为什么要这么定义呢?
      

  11.   

    觉得LZ应该多学习一下java基础知识...
      

  12.   

    1.int[]   ints   =   new   int[]{1,2,2,3,3,4,5,2,6}; 
      这是你说的“能不能根据[1,2,2,3,3,4,5,2,6,]这个数组编一个”,所以我就初始化了一个数组。
      其实也可以这样初始化:
      int[] ints = new int[9];
      ints[0] = 1;
      ......
      ints[8] = 62.int lastSetSize = 0;
       这个作用就是记录上一次HashSet的大小(HashSet是一个袋子,什么东西都可以往里面放,但是不能放重样的)。如果这一次放进去东西后HashSet大小还是原来那么大,说明这次放进去的东西是重样的。3.set.size()
       这个的返回值就是HashSet里有多少东西,术语说就是HashSet的当前的大小。4.map.containsKey(i)
       这个意思就是HashMap里是不是包含了i这个数。(你需要去下载一个JDK文档中文版,看map到底是什么东西)5.map.put(i,map.get(i)+1); 
       map里放的是一对一对的数,比如(x,y),x代表重复的数,y代表重复的次数。上面一行的意思是把重复的次数加1。
      

  13.   

    建议看Core Java这本书,我看这本书2个月后开始做真实的项目。
      

  14.   

    楼上上手速度真快,我2002年开始学Java,现在还没有做过项目呢 
      

  15.   

    八爪鱼你有JDK文档中文版吗?
    以后有不会的就请教你吧,你收个徒弟吧,你编程好规范啊!!!
    else{
                        map.put(i, 1);//数字i重复了1次
    为什么还要写这个呢?
    map.get(i)是什么意思?
    for(Integer i:map.keySet()){
    用Integer不用Int是说明i是类吗?挺麻烦你的,有空请你吃饭哈!
      

  16.   

    1.编程规范嘛,这是因为csdn自动给我代码格式化了2.jdk1.6中文版官方下载地址:
    http://gceclub.sun.com.cn/Java_Docs/jdk6/JDK_API_1_6_zh_CN.CHM3.map.put(i,   1);//数字i重复了1次 
    这个,当map里第一次放东西的时候需要这样,不然执行“map.put(i,map.get(i)+1);”时map.get(i)==null,null+1肯定出错。4.Integer和int可以互相之间自动转换,这是java1.5的新特性,所以这段代码在1.4版本及以下编译器编译时会出错。
      

  17.   

    public class Test {

    public static void main (String [] args){

    int a[] = { 1, 2, 3, 1, 3, 1, 4, 2 };
    int [] count = new int[a.length];
    for (int i = 0; i<a.length; i++){
    count[i]=0;
    for (int j = 0; j<a.length; j++){
    if(a[i]==a[j]){
    count[i]++;
    }
        }
        }
        for (int i = 0; i<a.length; i++){
         System.out.println (a[i]+"的个数有:"+count[i]);
        }

        }
    }
    我也是新手 写的比较简单
      

  18.   

    以前写了个求字符串的,原理差不多
    //在给定的字符串中,按照出现次数的多少重新排列,结果中不含重复的字符import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.TreeSet;
    public class JudgeCharTimes
    { public static String getMaxString(String s) //找出给定字符串中重复次数最多的字符
    {
    char[] ch = s.toCharArray(); //转换成字符数组
    ArrayList lists = new ArrayList();
            TreeSet set = new TreeSet();  
    for( int i = 0; i < ch.length; i++ )
    {
    lists.add( String.valueOf( ch[i] ) ); //添加到lists
    set.add( String.valueOf( ch[i] ) ); //添加去重复后的字符到set
    }
    // System.out.println("共有如下字符:" + set);
    Collections.sort( lists ); //对字符进行排序
    // System.out.println( "排序后为:" + lists );
    StringBuffer sb = new StringBuffer();
    for( int i = 0; i < lists.size(); i++ )
    {
    sb.append( lists.get( i ) );
    }

    s = sb.toString();
    int maxCount = 0;  //次数最多的字符的次数
    String maxString = "";
    ArrayList array = new ArrayList();

    for( int i = 1; i < 3; i++ )
    {
    Iterator it = set.iterator();  //使用迭代器
    while( it.hasNext() )
    {
    String o = (String)it.next();
    int begin = s.indexOf( o );
    int end = s.lastIndexOf( o );
    int value = end - begin + 1;
    if( value > maxCount )
    {
    maxCount = value;
    maxString = o; //此时的o为最大次数的字符
    }
    } } return maxString ;
    // return maxString +"  " + maxCount; //字符和其次数
    }
    //----------------------------------------------------------------------------
    public static String deleteElement(String s, String max) //删除给定字符串中给定的字符
    {
    ArrayList list = new ArrayList();

    for( int i = 0; i < s.length(); i++ )
    {
    list.add( s.charAt( i ) ); //添加到list
    }
    Collections.sort(list);
    StringBuffer sb = new StringBuffer();
    for( int i = 0; i < list.size(); i++ )
    {
    sb.append( list.get( i ) );
    }
    sb.delete( sb.indexOf(max), sb.lastIndexOf(max) + 1 );
    return sb.toString();
    }
    //-------------------------------------------------------------------------
    public static String getResult(String s)
    {
    StringBuffer sb = new StringBuffer();

    while( !s.equals( "" ))
    {
    sb.append( getMaxString( s ));
    s = deleteElement( s, getMaxString( s ) );
    }
    return sb.toString();
    }
    // ----------------------------------------------------------------------------
    public static void main(String[] args)
    {
    String s = "aasrtfgsadddppoyiutrjgnhgggdfffsdderrrruuubnvmcccvv";
    // System.out.println( getResult( s ) );  //返回按次数从大到小的序列,去掉重复
    System.out.println( getMaxString( s ) );  //返回最大字符和其次数
    }
    }
      

  19.   

        public static void main(String[] args) {
            int[] a = {1,2,2,3,4,5};
            Set<Integer> set = new HashSet<Integer>();
            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            for (int i : a) {
                if (set.add(i)) {
                    map.put(i, 1);
                } else {                
                    map.put(i, map.get(i)+1);
                }
            }        Set<Map.Entry<Integer, Integer>> entrySet = map.entrySet();
            for(Map.Entry<Integer, Integer> entry : entrySet) {
                System.out.println(entry.getKey() + ":" +entry.getValue());
            }
        }
      

  20.   

    sun_3211 
    我为java狂 java为我赚钱 
    等 级:
     发表于:2008-01-11 10:23:3021楼 得分:0 
    Java codepublic class Test {
        
        public static void main (String [] args){
            
            int a[] = { 1, 2, 3, 1, 3, 1, 4, 2 };
            int [] count = new int[a.length];
            for (int i = 0; i<a.length; i++){
                count[i]=0;
                for (int j = 0; j<a.length; j++){                
                    if(a[i]==a[j]){
                        count[i]++;
                    }
                }
            }
            for (int i = 0; i<a.length; i++){
                System.out.println (a[i]+"的个数有:"+count[i]);
            }
            
        }
    }
    我也是新手   写的比较简单 我为java狂,最后输出时count[i]应该减一了,因为在两层for循环内循环的if判断中下标是从0开始的,和自身比较了一次!
     
      

  21.   

    import java.util.*;public class Test {
        public static void main(String args[]) throws Exception {
            int[] ints = new int[]{1,2,2,3,3,4,5,2,6};
            HashSet<Integer> set = new HashSet<Integer>();
            HashMap<Integer, Integer>/*重复的数,重复的次数*/ map = new HashMap<Integer, Integer>();
            int lastSetSize = 0;
            for(int i:ints){
                set.add(i);
                if(set.size()==lastSetSize){//如果是true则这个数字必定重复
                    if(map.containsKey(i)){//如果是true,则不止一次重复
                        map.put(i, map.get(i)+1);
                    }else{
                        map.put(i, 1);//数字i重复了1次
                    }
                }
                lastSetSize = set.size();
            }
            System.out.println("重复数字列表");
            for(Integer i:map.keySet()){
                System.out.println("数字"+i+"重复次数"+map.get(i)+"次");
            }
        }
    }如果有一个数重复4次我想输出“重复了四次”
    如果只有一个数重复了2次我想输出“一个数字重复了两次”
    如果有两个数字分别重复了两次输出“两个数字重复了两次”
    如果一个数重复了三次一个数重复了两次输出“一个重复两次一个重复三次”
    怎么从Map里读出重复的数的次数然后判断,跪求希望能根据以上程序改一下,小弟跪谢了!
      

  22.   

    import java.util.*;public class Test {
        public static boolean main(String args[]) throws Exception {
            int[] ints = new int[]{1,2,2,2,3,4,5,2,6};
            int j=0;
            HashSet<Integer> set = new HashSet<Integer>();
            HashMap<Integer, Integer>/*重复的数,重复的次数*/ map = new HashMap<Integer, Integer>();
            int lastSetSize = 0;
            for(int i:ints){
                set.add(i);
                if(set.size()==lastSetSize){//如果是true则这个数字必定重复
                    if(map.containsKey(i)){//如果是true,则不止一次重复
                        map.put(i, map.get(i)+1);
                    }else{
                        map.put(i, 1);//数字i重复了1次
                    }
                }
                lastSetSize = set.size();
            }
            for(Integer   i:map.keySet()){ 
                j=map.get(i).intValue(); 
                             if (j==4){
               return true;
            }
            else{
             return false;
            }
          }
        }
    }我写了一个判断的程序好像不行编译出错
    如果按照判断的形式分别写
    如果有一个数重复4次我想输出“Truee” else 'False'
    如果只有一个数重复了2次我想输出“True” else 'False'
    如果有两个数字分别重复了两次输出“True” else 'False'
    如果一个数重复了三次一个数重复了两次输出“True”else 'False'