java面试系列--J2SE基础(十三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weisong530624687/article/details/79498528

29. foreach与正常for循环效率对比。


foreach与for如何选择:

数组结构的数据,建议使用普通for循环,它采用下标访问,检索速度很快,但是foreach性能也还可以。
链表结构的数据,一般不要使用普通for循环获取数据,会依次检索,效率低,数据量很大时异常占用资源。


代码实例:

package com.ws.compareforeach;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class CompareForeachDemo {

    public static void main(String[] args) {
        //测试ArrayList
        //结果(毫秒数)
//        584
//        484
//        461
//        List<Integer> lists = new ArrayList<>();
        //测试LinkedList
        //结果(毫秒数)
//        7539
//        451
//        436
        List<Integer> lists = new LinkedList();
        for (int i = 0; i < 100000; i++) {
            lists.add(i);
        }

        long time1 = System.currentTimeMillis();
        long timeStart = System.currentTimeMillis();
        for (int i = 0; i < lists.size(); i++) {
            System.err.println(lists.get(i));
        }
        long time2 = System.currentTimeMillis();

        for (Iterator iterator = lists.iterator(); iterator.hasNext();) {
            Integer integer = (Integer) iterator.next();
            System.err.println(integer);
        }
        long time3 = System.currentTimeMillis();


        for (Integer integer : lists) {
            System.err.println(integer);
        }
        long time4 = System.currentTimeMillis();
        
        System.err.println((time2-time1));
        System.err.println((time3-time2));
        System.err.println((time4-time3));

    }

}

30. 泛型常用特点,List<String>能否转为List<Object>。

能。但是List<Object>转List<String>不一定可行。

代码实例:

package com.ws.list;

import java.util.ArrayList;
import java.util.List;

public class ListDemo {

    public static void main(String[] args) {
        List<String> strList = new ArrayList<>();
        List<Object> objList = new ArrayList<>();
        
        strList.add("a");
        strList.add("b");
        
        //测试一:存入Object为Integer的对象,在转String的时候报错
        //objList.add(new Integer(1));
        //objList.add(new Integer(2));
        //The method add(String) in the type List<String> is not applicable for the arguments (Object)
        //strList.add(objList.get(0));
        
        //测试二:存入Object为String的对象,在转String的时候可行
//        objList.add("11");
//        objList.add("22");
//        strList.add((String) objList.get(0));
        
        //测试三:存入Object为String/Integer的对象,在转String的时候
        //(String) objList.get(0) 会报错,(String) objList.get(1)可行,为什么
        //因为你objList获取的当前的值的类型决定了是否可以转换成String
        //Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        objList.add(new Integer(1));
        objList.add("11");
        objList.add("22");
        strList.add((String) objList.get(0));
        
        
        
        objList.add(strList.get(0));
        
        for (String str : strList) {
            System.err.println(str);
        }
        
        for (Object object : objList) {
            System.err.println(object);
        }

    }

}

其他文章参考:

https://www.cnblogs.com/ljxe/p/5521840.html


打赏

如果觉得我的文章对你有帮助,有钱就捧个钱场,没钱就捧个人场,欢迎点赞或转发 ,并请注明原出处,谢谢....



猜你喜欢

转载自blog.csdn.net/weisong530624687/article/details/79498528