日期:2014-05-20  浏览次数:20786 次

java 容器的简单问题 高手 几秒就解决
在java容器中(如List),怎样得到出现次数最多的那个元素?

------解决方案--------------------
呵呵,下面高手来回答
------解决方案--------------------
转成数组 比较下 不知道有没有 写好的方法
------解决方案--------------------

------解决方案--------------------
...也是一个经常性的问题了...
给你一个思路 不管什么容易 你把里面的元素取出来组成一个字符串str 可以吧?这个字符串的长度为m 然后遍里容器内的元素 然后利用字符串替换,把str里的所有该元素替换掉 然后这个新字符串的长度是n 该元素对应的字符串长度是a的话 那么该元素出现的次数就是(m-n)/a
------解决方案--------------------
探讨
for 循环

取第一个和后面比较

如果equals 那么代表这个的变量加1

取第二个和其他比较
.....

------解决方案--------------------
探讨
...也是一个经常性的问题了...
给你一个思路  不管什么容易  你把里面的元素取出来组成一个字符串str  可以吧?这个字符串的长度为m  然后遍里容器内的元素  然后利用字符串替换,把str里的所有该元素替换掉  然后这个新字符串的长度是n  该元素对应的字符串长度是a的话  那么该元素出现的次数就是(m-n)/a

------解决方案--------------------
我的想法是。。。先吧list的东西全部放到个set里面。。。那重复的就没有了
然后一个个依次比较。。。找到相同的就+1.。。最后把这个字符和在list里占多少个的数字存在个list里面。。。
然后再找出数字最大的对应的字符。。。
貌似烦了点。。额。。。
------解决方案--------------------
Java code

import java.util.*;

public class FindMaxcountInList
{
    public static void main(String [] args) throws Exception
    {
        Vector<Integer> v = new Vector<Integer>();
        v.add(1);
        v.add(2);
        v.add(3);
        v.add(4);
        v.add(2);
        v.add(3);
        v.add(4);
        v.add(5);
        v.add(2);
        v.add(9);
        v.add(10);
        v.add(8);
        v.add(7);
        v.add(2);
        v.add(4);
        v.add(2);
        System.out.println(v);

        int maxCount = 0;
        Object objToFind = null;

        while (true)
        {
            if (v.size() <= 0)
            {
                break;
            }

            int currentCount = 1;
            Object currentObj = v.remove(0);

            int begin = 0;

            finder :
            while (true)
            {
                for (int i = begin; i < v.size(); i++)
                {
                    if (currentObj.equals(v.get(i)))
                    {
                        currentCount++;
                        v.remove(i);
                        begin = i;
                        continue finder;
                    }
                }
                if (currentCount > maxCount)
                {
                    maxCount = currentCount;
                    objToFind = currentObj;
                }
                break;
            }
        }

        System.out.println(objToFind + " : " + maxCount);
    }
}

------解决方案--------------------
探讨
引用:
...也是一个经常性的问题了...
给你一个思路  不管什么容易  你把里面的元素取出来组成一个字符串str  可以吧?这个字符串的长度为m   然后遍里容器内的元素  然后利用字符串替换,把str里的所有该元素替换掉  然后这个新字符串的长度是n  该元素对应的字符串长度是a的话   那么该元素出现的次数就是(m-n)/a


赞同~

------解决方案--------------------
我的代码里没有对原始LIST进行保存, 实际做的时候最好用副本做
------解决方案--------------------
Java code
package test; 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;