美文网首页Java
Java基础二 容器

Java基础二 容器

作者: 不会忘的名字 | 来源:发表于2021-03-30 14:15 被阅读0次

    1.Java容器有哪些?

    Java容器.png
    具体如下结构:
    Collection
      List
        ArrayList
        LinkedList
        Vector
        Stack
      Set
        HashSet
        LinkedHashSet
        TreeSet
    Map
      HashMap
         LinkedHashMap
      TreeMap
      ConcurrentHashMap
      Hashtable
    

    2. Collection 和 Collections 有什么区别

    1.java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。
    Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是
    为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
    
    2.Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,
    用于对集合中元素进行排序、搜索以及线程安全等各种操作
    

    3.List、Set、Map 之间的区别是什么

    1.List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。
    
    List_set_Map.png

    4.说一下HashMap实现原理

    1.HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。
    2.HashMap的数据结构: 在Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过8个之后,
    该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn). 链表+ 红黑树
    3.我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到
    这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素
    将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,
    就直接将该元素放到数组的该位置上。
    

    5. HashSet 的实现原理?

    HashSet底层由HashMap实现
    HashSet的值存放于HashMap的key上
    HashMap的value统一为present
    

    6.HashMap 和 Hashtable 有什么区别?

    1.存储上: hashMap允许空键值,而hashTable不允许。
    2.线程安全: HashMap是线程非安全的(多线程建议使用ConcurrentHashMap ), 
    Hashtable是线程安全的
    3.Hashtable同步的,而HashMap是非同步的,效率上比hashTable要高
    

    7.如何决定使用 HashMap 还是 TreeMap

    对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。
    然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。
    

    List

    8.ArrayList和LinkedList的区别

    1.底层数据结构: Arraylist 底层使用的是Object数组,支持快速随机访问(实现了RandomAccess接口),而 
    LinkedList 的底层数据结构是双向循环链表,不支持随机访问。
    2.Arraylist: 优点 get和set调用花费常数时间, 查询速度快. 
                 缺点 插入和删除元素时间复杂度为O(n-i), 速度慢
     LinkedList: 优点: 插入和删除时间复杂度不受位置影响,O(1)
                 缺点: get和set 花费时间多.
    3.内存占用:  ArrayList的空间浪费主要体现在在list列表的结尾会预留一定的容量空间,
    LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间
    (链表结构需要存放指向下一个地址)
    

    9.Array 和 ArrayList 有何区别?

    1.Array可以容纳基本类型和对象,而ArrayList只能容纳对象。 
    2.Array是指定大小的, 而ArrayList是动态数组,自动扩容。
    3.Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。
    

    10. ArrayList 和 Vector 的区别是什么?

    1.线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的
    2.性能:ArrayList 在性能方面要优于 Vector。
    3.扩容:ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次会增加 1 倍,
    而 ArrayList 只会增加 50%。
    

    11.迭代器 Iterator 是什么?

    迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

    12. Iterator 怎么使用?有什么特点?

    (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
    (2) 使用next()获得序列中的下一个元素。
    (3) 使用hasNext()检查序列中是否还有元素。
    (4) 使用remove()将迭代器新返回的元素删除。

    13.Iterator 和 ListIterator 有什么区别?

    (1).Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
    (2).Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。

    相关文章

      网友评论

        本文标题:Java基础二 容器

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