请看我的代码,我有注释:
- import java.util.*;
- /*查找一个数组中出现次数最多且最大的数。
- * int[] a={1,2,3,2,4,2,4,2}
- * */
- public class TestFindArray {
- public static void main(String[] args) {
- int[] in ={2,4,3,2,4,4,4,2,4,3,3,3,3};
- findElement2(in);
- }
- public static void findElement(int[] in){
- Map<Integer,Integer> map =new TreeMap<Integer,Integer>();
- for(int x = 0;x<in.length;x++){
- Integer value = map.get(in[x]);
- if(value==null){
- map.put(in[x],1);
- }
- else
- map.put(in[x], ++value);
- }
- Set<Integer> set = map.keySet();
- Iterator<Integer> iterator = set.iterator();
- while(iterator.hasNext()){
- Integer key = iterator.next();
- int count = map.get(key);
- System.out.println(key+"出现了"+count+"次");
- }
-
- }
- /*
- 需求:取出整型数组中那个出现次数最多且数值最大的元素
- 思路:
- 1、创建一个map集合
- 2、将int数组中的元素逐个添加进Map集合中,key存储元素,value存储次数,在添加过程中如果元素已经存在,则将该元素对应的value值自增后再存入
- 3、遍历集合取出出现次数最多,且数值最大的元素
- */
- public static void findElement2(int[] arr){
- Map<Integer,Integer> map=new LinkedHashMap<Integer,Integer>();
- //逐个将数组中的元素添加进集合中
- for (int i=0;i<arr.length ;i++ )
- {
- Integer value=map.get(arr[i]);
- if (value!=null)
- {
- map.put(arr[i],++value);
- }
- else
- map.put(arr[i],1);
- }
- //遍历map集合,同时记录符合条件的key和value
- Integer keyMax=(Integer)arr[0];
- Integer valueMax=(Integer)map.get(arr[0]);
- //我用entrySet方式遍历的
- for (Object obj:map.entrySet() )
- {
- Map.Entry me=(Map.Entry)obj;
- Integer key=(Integer)me.getKey();
- Integer value=(Integer)me.getValue();
- System.out.println(key+":"+value);
-
- //获取次数最多的元素及其出现次数记录下来,如果value相等再比较key值的大小,取出key值大的记录下来
- if (value>valueMax)
- {
- valueMax=value;
- keyMax=key;
- }else if (value==valueMax)
- {
- if (key>keyMax)
- {
- keyMax=key;
- }
- }
- }
- System.out.println("出现次数最多的元素以及出现的次数为:");
- System.out.println(keyMax+":"+valueMax);
-
-
- }
- }
复制代码 |