本帖最后由 Fightin黑马 于 2014-9-1 23:49 编辑
答案是基于集合中的map集合,list集合实现的,需要具备集合所学知识
这里用集合实现了一下,利用map集合存储键值对的原理记录每个数字出现的次数,因为我们java中对于map集合所给的方法都是操作key的,并没有给操作value的方法,用了半个小时查了些资料得出下面的代码,回头专门发个怎样对map集合按照值进行排序的帖子.ps...这个里面的编辑器不是很会用,排版懒透了package com.itcast.test;
//问题:找出整型数组中数字出现次数最多的数字
import java.util.*; //导入java.util.*的包使用util里面的各种类
public class Test3 {
public static void main(String[] args) { //主函数
int arr[]={3,3,3,2,3,2,3,5,6,7,8,5,4,34,23,2,33,43}; //定义原始数组
TreeMap<Integer, Integer>treemap=new TreeMap<>(); //定义一个treemap(hashmap)用来接收数组中的数字,
//key记录数组中出现的数字,value记录该数字出现的次数
for (int i = 0; i < arr.length;i++) { //遍历数组
if(treemap.containsKey(arr)){
treemap.put(arr, treemap.get(arr)+1); //如果集合中包含这个数字,将这个数的次数加一 覆盖原来的value值
}else{
treemap.put(arr,1); //如果集合中没有这个数字,存入该数字,并另value为1
}
}
//下面代码是用来实现对map集合中按照值排序
List<Map.Entry<Integer, Integer>> list =
new ArrayList<Map.Entry<Integer, Integer>>(treemap.entrySet()); //新建一个list集合用来接收treemap中的键值对,在构造函数中调用传入集合的构造函数
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() { //调用Collections中的可以自定义比较器的sort方法,使用匿名内部类新建一个比较器
public int compare(Map.Entry<Integer, Integer> o1, //重写Comparator中的compare方法;
Map.Entry<Integer, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
}); //经过排序的list集合中索引为0的对象就是数组中出现次数最多的数字
System.out.println("出现最多次数的数字是:"+list.get(0).getKey()+ //调用list集合中第一个键值对的getKey和getvalue方法打印这个出现次数最多的数字
"\r出现次数是:"+list.get(0).getValue());
}
}
|