java 容器的简单问题 高手 几秒就解决
在java容器中(如List),怎样得到出现次数最多的那个元素?
[解决办法]
呵呵,下面高手来回答
[解决办法]
转成数组 比较下 不知道有没有 写好的方法
[解决办法]
[解决办法]
...也是一个经常性的问题了...
给你一个思路 不管什么容易 你把里面的元素取出来组成一个字符串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); }}
[解决办法]
[解决办法]
我的代码里没有对原始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,融合一些其他的类库,看有没有提供一些其他的方法来解决,
第三点:可以自己想想思路,看有没有更好的处理方法,比如楼上有人说的,可以设计字符串来处理,呵呵,学习无止境