美文网首页程序员
19-11-03 ArrayList和list区别

19-11-03 ArrayList和list区别

作者: 该死的懦弱 | 来源:发表于2019-11-03 08:15 被阅读0次

    装箱:由值类型向引用类型转换

    拆箱:由引用类型向值类型转换

    值类型:直接将值存储在栈内,由系统自动释放资源的数据类型

    引用类型:引用类型存放在内存的堆之中;通俗讲,new出来的都是引用类型

    栈:存放值类型的地方,由大到小分配,内存溢出就是栈分配完毕

    堆:由小到大分配,随意储存,存放引用类型的地方

    区别

    首先,list是一个抽象类,list不能被实例化,就是不能new list;而ArrayList是这个接口的实现类,可以被new 出来比如 List<Object> objects =new ArrayList<>();

    为什么要用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?

            问题就在于List接口有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如 

    LinkedList或者Vector等等,这时你只要改变这一行就行了: List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。

     其次性能问题,由于ArrayList的每个item默认是Object的类型,所以当我们执行语句list.add(1);的时候,就是做了一次装箱的操作。同理,在for循环里list的每一项都要做一个拆箱的操作才能得到变量i,最后到打印变量i时,由于字符串也是引用类型,所以也要做一次的装箱的操作。这里前后一共做了6次的装箱拆箱(4次装箱,2次拆箱),每一次的装箱拆箱都涉及CPU以及内存的分配,都是性能的损耗。

    CSDN:原文链接:https://blog.csdn.net/qq_32868167/article/details/83211355

    相关文章

      网友评论

        本文标题:19-11-03 ArrayList和list区别

        本文链接:https://www.haomeiwen.com/subject/mqrkbctx.html