统计十万数据出现的次数,第一个重复的数据,出现次数最多的数据,重复性元素只打印一次
题目
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+" ");
}
结果截图: