Java集合框架——大量数据处理操作练习题

1、用HashTable和HashMap测试插入是10万个数据的速度

Hashtable<Integer,Object> hashtable=new Hashtable<>();
long l = System.currentTimeMillis();//起始时间
Object o=new Object();
Random random=new Random();
        for (int i = 0; i < 100000; i++) {
    hashtable.put(random.nextInt(100),o);//插入数据获取
}
long l1 = System.currentTimeMillis();//截止时间
long l11 = l1 - l;//运行时间
System.out.print("Hashtable插入数据的时间为" + l11 + "    ");

long s = System.currentTimeMillis();//起始时间
Object o1=new Object();
HashMap<Integer,Object> hashmap=new HashMap<Integer, Object>();
Random random1=new Random();
for(int i=0;i<100000;i++){
    hashmap.put(random1.nextInt(100),o1);
}
long s1 = System.currentTimeMillis();//截止时间
long s11 = s1 - s;//运行时间
System.out.print("HashMap插入数据的时间为" + s11 + "    ");

2、 对十万个随机数,统计数字重复的次数

Random random=new Random();
ArrayList<Integer> list=new ArrayList<>();
for(int i=0;i<100000;i++){
    list.add(random.nextInt(100));//产生1到100中100000个随机数并添加到list中
}
//统计出现的次数  hashmap->key:数据本身    value->数据出现的次数
HashMap<Integer,Integer> hashmap=new HashMap<>();
Iterator<Integer> iterator=list.iterator();
while (iterator.hasNext()){
    Integer value=iterator.next();//得到list1中的值,也是hashmp中的key
    Integer num=hashmap.get(value);//get:通过key找value,返回的是key-value键值对的value
    //这里value相当于key-value中的key
    if(num==null){
        hashmap.put(value,1);
    }else{
        hashmap.put(value,num+1);
    }
}
//打印数据
Iterator<Map.Entry<Integer,Integer>> itr = hashmap.entrySet().iterator();
while(itr.hasNext()){
    Map.Entry<Integer,Integer> n = itr.next();
    Integer key = n.getKey();
    Integer value = n.getValue();
    System.out.println(key+"="+value);
}
System.out.println(); 

3、10万数据找出第一个重复的数据并打印

 HashMap<Integer, Integer> hashMap = new HashMap<>();
        Random random1 = new Random();
        ArrayList<Integer> list=new ArrayList<>();
        for (int i = 0; i < 100000; i++) {
            list.add(random1.nextInt(100));
        }
        HashMap<Integer,Integer> hashmap=new HashMap<>();
        Iterator<Integer> iterator=list.iterator();
        while(iterator.hasNext()){
            Integer value=iterator.next();
            Integer num=hashMap.get(value);
            if(num==null){
                hashMap.put(value,1);
            }
            else{
//                hashMap.put(value,num+1);
                System.out.println(value);
                break;
            }
        }

4、 10万数据找出出现次数最多的数据并打印

        HashMap<Integer,Integer> hashMap = new HashMap<>();
        Random random1 = new Random();
        ArrayList<Integer> list=new ArrayList<>();
        for(int i = 0;i < 100000;i++){
            list.add(random1.nextInt(100));
        }
//        list.add(1);
//        list.add(3);
//        list.add(4);
//        list.add(1);
//        list.add(2);
//        list.add(1);
//        list.add(3);
        HashMap<Integer,Integer> hashmap=new HashMap<>();
        Iterator<Integer> iterator=list.iterator();
        while(iterator.hasNext()){
            Integer val=iterator.next();
            Integer num=hashMap.get(val);
            if(num==null){
                hashMap.put(val,1);
            }
            else{
                hashMap.put(val,num+1);
            }
        }
        //以键值对的形式遍历hashMap
        Iterator<Map.Entry<Integer,Integer>> iterator1=hashMap.entrySet().iterator();
        int count=0;//统计重复次数最多的次数
        int data=0;//统计重复次数最多的数字
        while (iterator1.hasNext()){
            Map.Entry<Integer,Integer>entry=iterator1.next();
            Integer key=entry.getKey();
            Integer value=entry.getValue();
            if(value>count){
                Integer cur=entry.getValue();
                count=value;
                data=key;
            }
        }
        System.out.println(data+" "+count);

5、通过对ArrayList和LinkedList对10万个数据分别进行插入、获取操作,比较不同集合操作耗时

ArrayList list1 = new ArrayList();
long l = System.currentTimeMillis();//起始时间
Random random = new Random();
for (int i = 0; i < 100000; i++) {
    list1.add(random.nextInt(100000));//插入数据获取
}
long l1 = System.currentTimeMillis();//截止时间
long l11 = l1 - l;//运行时间
System.out.print("ArrayList插入数据的时间为" + l11 + "    ");

long t = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {//获取数据
    list1.get(i);
}
long t1 = System.currentTimeMillis();
long t11 = t1 - t;
System.out.println("ArrayList获取数据的时间为" + t11);

LinkedList list2 = new LinkedList();
long m = System.currentTimeMillis();
for (int j = 0; j < 100000; j++) {
    list2.add(j);
}
long m1 = System.currentTimeMillis();
long m11 = m1 - m;
System.out.print("LinkedList插入数据的时间为" + m11 + "    ");

long n = System.currentTimeMillis();
for (int j = 0; j < 100000; j++) {
    list2.get(j);
}
long n1 = System.currentTimeMillis();
long n11= n1 - n;
System.out.println("LinkedList获取数据的时间为" + n11);

猜你喜欢

转载自blog.csdn.net/ZQ_313/article/details/84797467