美文网首页
Android面试Java基础篇(一)

Android面试Java基础篇(一)

作者: 肖义熙 | 来源:发表于2021-03-22 11:35 被阅读0次

    问:Java集合类List,Map,Set相关的实现原理。

    答:List和Set都是Collection的子类

        (1)List的主要实现有:ArrayList、LinkedList、Vectory。

            ArrayList、LinkedList线程不安全,ArrayList底层是可变数组非同步实现的,LinkedList底层是基于双向链表非同步实现的。ArrayList在插入删除时,会重新排列位置,速度较慢,根据数组角标查询数据,查询较快。LinkedList在增删时位置不变,效率较高,查询时需要遍历节点,查询较慢。而Vectory与ArrayList类似,只是加了同步对象锁机制,线程安全。基于以上特性,如果程序要求多线程下操作则选择Vectory,如果不要求线程安全且查询速度快的情况下则选择使用ArrayList,如果插入删除需求较多的情况下则选择LinkedList。

        (2)在讲Set之前,需要先讲一下Map(键值对存储)
        Map的主要实现有:HashMap、LinkedHashMap、HashTable。

        HashMap是基于哈希表的Map接口的非同步实现(即线程不安全),底层以数组的形式存储,数组的每一项都是一个单向链表。存取对象时,根据key的hash值来确定数组中的存储位置,根据equals方法来确定在单向链表上的存储位置。

        LinkedHashMap继承自HashMap,是基于hash表与双向链表非同步实现的(即线程不安全),在HashMap的数组包了一层双向链表实现的,用于记录前后节点。

        HashTable与HashMap类似,只是它加了锁,同步实现的(线程安全的)。三种用法思想和List的三种用法思想一致。

        (3)Set与List的区别在于:Set唯一无序,List不唯一有序,主要实现有:HashSet、TreeSet

            HashSet基于HashMap实现,其值存储在HashMap的key中,value为一个固定对象。同样的,HashSet为线程不安全的。
            TreeSet是一个自动排列顺序的集合类,同样他也是一个非同步实现类,线程不安全。
            Set和list选择使用的情况下,就看是否需要去重,是否需要有序来进行选择。

    问:Java中String、StringBuilder、StringBuffer有什么区别?

    答:String 是final修饰,即终态数据类型,变量的值不可改变,在String字符串拼接时会产生大量的临时变量。如果有大量拼接操作时,使用StringBuilder或StringBuffer,前者线程不安全效率高,后者线程安全效率低。

    相关文章

      网友评论

          本文标题:Android面试Java基础篇(一)

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