当前位置:编程学习 > JAVA >>

求一个算法 算出数组中 元素重复次数 并列出重复次数最多的前10项

比如一个数组 {AAA BBB CCC DDD AAA AAA DDD KKK LLL};
结果就是列出 AAA 3次  DD2次  这样
因为这个数组内容是计算出来的 所以最初是不知道长度的 
所以用了Arraylist 

List<String> listofXXX = new ArrayList<String>();
listofXXX.add(XXX);//XXX为变量 计算得出

然后输出里面排名前10次数的元素 并且附上重复次数

非常感谢 --------------------编程问答-------------------- 为什么不用map 很好用 --------------------编程问答-------------------- 所以是预先知道有什么元素的? --------------------编程问答--------------------
引用 2 楼  的回复:
所以是预先知道有什么元素的?

不知道的 元素都是算出来的 然后塞到LIST里面的 --------------------编程问答--------------------
引用 1 楼  的回复:
为什么不用map 很好用


HASH MAP吗。。求指点。。 --------------------编程问答-------------------- 看球之余,写个小逻辑,如下:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class Test {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<String,Integer>();
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("a");
list.add("d");
list.add("e");
list.add("c");
list.add("b");
list.add("a");
list.add("a");

//整理每个字符串出现次数
TreeSet<Integer> numset = new TreeSet<Integer>();
for(int i = 0;i < list.size();i++){
int len = list.size();
String s = (String)list.get(i);
Set<String> set = new HashSet<String>();
set.add(s);
list.removeAll(set);
map.put(s, len - list.size());
numset.add(len - list.size());
i = 0;
}

//输出出现次数最多的10个字符串。如果字符串少于10个,则全部输出后终止
List<Integer> nums = new ArrayList<Integer>(numset);
int j = 1;
for(int i = nums.size() - 1; i > 0;i--){
for(String key : map.keySet()){
if(11 == j){
break;
}
if(map.get(key) == nums.get(i)){
System.out.println(key);
j++;
}
}
}
}

}
--------------------编程问答--------------------
 import java.util.*;


public class Test0803 {
public static void main(String[] args) {        
        Map<String,Integer> map = new HashMap<String,Integer>();
        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("a");
        list.add("d");
        list.add("e");
        list.add("c");
        list.add("b");
        list.add("a");
        list.add("a");
        Iterator<String> ir=list.iterator();
        String str=null;
        while(ir.hasNext()){
         str=ir.next();
         if(map.containsKey(str)){
         int a=map.get(str);
         a++;
         map.put(str, a);       
         }else{
         map.put(str, 1);
         }    
        }
        System.out.println(map.toString());
}
}
--------------------编程问答-------------------- 刚没看清题,参考了下网上关于value的排序,代码如下
public class Test0803 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("a");
        list.add("d");
        list.add("e");
        list.add("c");
        list.add("b");
        list.add("a");
        list.add("a");
Iterator<String> ir = list.iterator();
String str = null;
while (ir.hasNext()) {
str = ir.next();
if (map.containsKey(str)) {
int a = map.get(str);
a++;
map.put(str, a);
} else {
map.put(str, 1);
}
}

ArrayList<Entry<String, Integer>> l = new ArrayList<Entry<String, Integer>>(
map.entrySet());
Collections.sort(l, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
});
if (map.size() < 10)
System.out.println(map.keySet());
else {
for (int i = 0; i < 10; i++) {
System.out.println(l.get(i).getKey() + ":"
+ l.get(i).getValue());
}
}

}
}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,