开博第一篇,呵呵,一直在做维护项目,好长时间不写代码了,手都感觉生疏了。以后尽量每天至少一篇练练手。
找出数组中重复次数最多的元素并打印
1 package test; 2 3 import java.util.Arrays; 4 import java.util.HashMap; 5 import java.util.Iterator; 6 import java.util.Map; 7 import java.util.Map.Entry; 8 import java.util.Random; 9 import java.util.Set; 10 11 public class Test { 12 13 private static int[] arr = new int[1000]; 14 15 public static void main(String[] args) { 16 // 准备数组 17 createArray(); 18 // 方法一:用Map 19 test01(arr); 20 test02(arr); 21 } 22 23 /** 24 * 首先准备一个长度为1000的数组作为测试对象 25 * 通过random类来随机插入整数 26 */ 27 public static void createArray() { 28 Random r = new Random(); 29 for (int i = 0; i < 1000; i++) { 30 arr[i] = r.nextInt(100); 31 } 32 } 33 34 /** 35 * 第一个方法是依次读取数组中每个值,把读取到的值和它出现的次数分别作为key和value放到一个Map中去, 36 * 读取完成之后,再找到此Map中value值最大的那个key就可以了。 37 * @param arr 38 */ 39 public static void test01(int[] arr) { 40 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 41 for (int i = 0; i < arr.length; i++) { 42 if (map.containsKey(arr[i])) { 43 // 如果已存在相同的key,则其value值加1 44 map.put(arr[i], map.get(arr[i]) + 1); 45 } else { 46 // 如果还没有相同的key,则value值为1并添加到map中 47 map.put(arr[i], 1); 48 } 49 } 50 // 遍歷Map 51 Set<Entry<Integer, Integer>> set = map.entrySet(); 52 Iterator<Entry<Integer, Integer>> it = set.iterator(); 53 int nums = 0;// 定义次数 54 int key = 0;// 定义出现次数最多的数 55 while (it.hasNext()) { 56 Entry<Integer, Integer> entry = it.next(); 57 if (entry.getValue() > nums) { 58 nums = entry.getValue(); 59 key = entry.getKey(); 60 } 61 } 62 System.out.println("出现次数最多的数是:" + key + "; 出现了" + nums + "次!"); 63 } 64 65 /** 66 * 此方法为先对数组进行排序,然后遍历数组求结果。 67 * 不推荐此方法,为了考虑到数组的各种可能状况,写了一个小时,唉,估计还有bug。 68 * @param arr 69 */ 70 public static void test02(int[] arr) { 71 // 先对数组进行排序 72 Arrays.sort(arr); 73 // 排完序之后,进行依次遍历 74 int nums = 0;// 定义次数 75 int key = 0;// 定义出现次数最多的数 76 // 遍历开始 77 int i = 1; 78 int tmpNums = 1; 79 int tmpKey = arr[0]; 80 while (i < arr.length) { 81 if (arr[i] == tmpKey) { 82 tmpNums++; 83 } else { 84 if (tmpNums > nums) { 85 key = tmpKey; 86 nums = tmpNums; 87 tmpKey = arr[i]; 88 tmpNums = 1; 89 } else { 90 if (i < arr.length - 1) { 91 tmpNums = 1; 92 tmpKey = arr[i+1]; 93 } 94 } 95 } 96 i++; 97 } 98 // 如果最后几个数都一样且出现的次数最多则进入此if语句 99 if (tmpNums > nums) { 100 key = tmpKey; 101 nums = tmpNums; 102 } 103 // 如果数组中所有数都一样,则进入此if语句 104 if (nums == 0) { 105 nums = tmpNums; 106 key = tmpKey; 107 } 108 System.out.println("出现次数最多的数是:" + key + "; 出现了" + nums + "次!"); 109 } 110 }
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/19427.html