看了一个帖子,里面的问题自己简单的实现下,肯定不是最优的,但目前能力只能写这样的。
http://bbs.9ria.com/thread-9417-1-1.html
初始:
private static void findMatchingNum() {
int[] array1 = { 47, 56, 56, 82, 42, 28, 35, 76, 86, 56, 56, 45, 54, 56 };
Map<Integer, Integer> keyMap = new TreeMap<Integer, Integer>();
Map<Integer, Integer> countMap = new TreeMap<Integer, Integer>();
//把所有出现过的数字计数为0
for (int i = 0; i < array1.length; i++) {
int temp = array1[i];
keyMap.put(temp, temp);
countMap.put(temp, 0);
}
//开始统计所有数组出现的次数。
for (int i = 0; i < array1.length; i++) {
int temp = array1[i];
int old = (keyMap.get(temp));
if (old == temp) {
int countv = countMap.get(temp);
countv++ ;
countMap.put(temp, countv);
}
}
System.out.println("出现次数最多的数组:" + countMap);
Object[] objs = countMap.values().toArray();
Arrays.sort(objs);
int temp = (Integer) objs[objs.length-1];
Iterator<Integer> iterator1 = countMap.keySet().iterator();
Iterator<Integer> iterator2 = countMap.values().iterator();
for (int i = 0; i < objs.length; i++) {
if (iterator2.hasNext()) {
int value = iterator2.next();
int key = iterator1.next();
if (value == temp) {
System.out.println("出现次数最多的数::" + key+",出现次数为:"+value);
}
}
}
}
改进的:
private static void findMatchingNum() {
int[] array1 = { 47, 56, 56, 82, 42, 28, 35, 76, 86, 56, 56, 45, 54, 56 };
Map<Integer, Integer> retMap = new TreeMap<Integer, Integer>();
//把所有出现过的数字计数为0
for (int i = 0; i < array1.length; i++) {
int temp = array1[i];
retMap.put(temp, 0);
}
System.out.println("出现次数最多的数组:" + retMap);
//开始统计所有数组出现的次数。
for (int i = 0; i < array1.length; i++) {
int temp = array1[i];
//判断结果集中是否包含已经存在的值
if (retMap.keySet().contains(temp)) {
int old = (retMap.get(temp));
old++;
retMap.put(temp, old);
}
}
System.out.println("出现次数最多的数组:" + retMap);
}