统计十万数据出现的次数,第一个重复的数据,出现次数最多的数据,重复性元素只打印一次

题目

10万数据,范围在1~1000,做一下处理

1、统计数据重复出现次数并打印
首先要生成10万数据,这里我们用了Random类,将产生的元素存入arraylist中

ArrayList <Integer> arrayList = new ArrayList<Integer>(10000000);
        HashMap<Integer,Integer> hashMap = new HashMap<Integer,Integer>();
        Random random = new Random();
        //随机产生数据
        for (int i = 0; i < 100000; i++){//存入arrayList中
            arrayList.add(random.nextInt(100)+1);
        }
        System.out.print(arrayList.toString());

根据HashMap的特性:键不可重复,值可以重复
将arraylist的所有元素存入hashmap中,进行遍历打印

        Iterator <Integer> iterator =  arrayList.iterator();
        while (iterator.hasNext()) {//先将arrayLis中的数据按顺序存入hashmap中
            Integer key = iterator.next();//定义键
            if (hashMap.containsKey(key)){//遍历键是否存在
                hashMap.put(key,hashMap.get(key)+1);//有相同的键时,值+1
            }else{
                hashMap.put(key,1);//没有相同的时,值置为1
            }
        }
        //迭代器的使用
        Iterator<Map.Entry<Integer,Integer>> iterator1 = hashMap.entrySet().iterator();
        while (iterator1.hasNext()){
            Map.Entry<Integer,Integer> next = iterator1.next();//重新定义一个节点
            Integer key = next.getKey();//得到key值
            Integer value = next.getValue();//得到value值
            System.out.println(key+":"+value);
        }

2、找出第一个重复的数据是什么并打印
运用HashSet的特性,遍历数组,找到第一个重复的数据进行打印

        HashSet<Integer>hashSet = new HashSet<Integer>();
        Iterator<Integer>iterator2 = arrayList.iterator();
        while (iterator2.hasNext()){//与for(int i= 0;iterator2.hasNext();i++)一样
            Integer a = iterator2.next();
            if (hashSet.contains(a)){//遍历到a
                System.out.println("第一次重复出现的元素"+a);
                break;
            }else{//没有遍历到a
                hashSet.add(a);//将a存入,继续循环
            }
        }

3、找出出现次数最多的数据并打印
即就是比较value值的大小,将value值最大的key找出来

        Iterator<Map.Entry<Integer,Integer>> iterator3 = hashMap.entrySet().iterator();
        int key = 0;//定义两个变量key,value用来存放目标值
        int value = 0;
        while (iterator3.hasNext()){
            Map.Entry<Integer,Integer> next = iterator3.next();//定义新的节点
            Integer a = next.getKey();//获取节点的key值
            Integer b = next.getValue();//获取节点的value值
            if (b > value){//进行比较
                key = a;
                value = b;
            }
        }
        System.out.println("出现次数最多的数是:"+key);

4、打印全部数据,重复性元素只打印一次
根据HashMap的性质,将所有存在的键打印一遍
也可以用HashSet,它具有键值不能重复的特性

Iterator<Integer> iterator4 = hashMap.keySet().iterator();
        while (iterator4.hasNext()){//只打印key值,根据键不重复的特性
            Integer a = iterator4.next();
            System.out.println(a+" ");
        }

结果截图:
统计十万数据出现的次数,第一个重复的数据,出现次数最多的数据,重复性元素只打印一次