读书人

java 容器的简单有关问题 高手 几秒就

发布时间: 2011-12-31 23:50:30 作者: rapoo

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;



public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
AtomicInteger i=new AtomicInteger();
i.incrementAndGet();

System.out.println(i);
List <Integer> list = new ArrayList <Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(2);
list.add(9);
list.add(10);
list.add(8);
list.add(7);
list.add(2);
list.add(4);
list.add(2);
list.add(1);

int[] a = test(list);
System.out.println(a[0]+" "+a[1]);
}

public static int[] test(List <Integer> list){
int[] a = new int[2];
Map <Integer, Integer> map = new HashMap <Integer, Integer>();
int maxCount=0;//出现次数
int elem=0;//出现最多的元素
for(Integer i:list){
if(!map.keySet().contains(i)){
map.put(i,1);
}else{
map.put(i, map.get(i)+1);
}
}
for(Integer i:map.keySet()){
if(map.get(i)>maxCount){
elem = i;
maxCount = map.get(i);
}
}

System.out.println("出现最多的元素:"+elem+" 出现次数:"+maxCount);
a[0]=elem;
a[1]=maxCount;
return a;
}

}


[解决办法]
第一点,自己写循环算法,,比较普遍的,就跟楼上那些一样,你自己也可以想到,就是一个设计循环的问题,
第二点,查看api,融合一些其他的类库,看有没有提供一些其他的方法来解决,
第三点:可以自己想想思路,看有没有更好的处理方法,比如楼上有人说的,可以设计字符串来处理,呵呵,学习无止境

读书人网 >J2SE开发

热点推荐