zoukankan      html  css  js  c++  java
  • Java集合

    Java集合

    • List,Set,Map区别?

    List:列表,有序.
    Set:不允许重复的集合.
    Map:key,value键值对,key不能重复

    • Arraylist 与 LinkedList 区别?

      1. 都是线程不安全的.
      2. 底层结构:
        Arraylist -> private static final Object[] EMPTY_ELEMENTDATA = {}即Object数组;
        LinkedList -> 双向链表
      3. 插入删除效率:
        Arraylist -> 默认add()直接再list尾部添加,时间复杂度O(1),但是在指定位置i添加,时间复杂度为O(n-i),因为添加后n-i的元素都要向前或向后移动一位.
        LinkedList -> 默认add()插入删除的时间复杂度近似O(1),在指定i位置添加删除的时间复杂度为O(n),因为要先移动到i位置处.
      4. 随机访问:
        Arraylist -> 支持随机访问 get(index)
        LinkedList 不支持
      5. 空间占用:
        Arraylist -> 主要浪费体现在list末尾会预留空间.
        LinkedList -> 主要浪费在他的每一个元素都比Arraylist的元素大,因为他的元素还要存储前驱后继以及数据.
      6. RandomAccess接⼝
        Arraylist实现了此接口,所以它支持随机访问
    • List遍历:

      1. 实现了 RandomAccess 接口,优先for循环,其次foreach.
      2. 未实现  RandomAccess 接口,优先iterator,其次foreach.
      
    • Arraylist扩容机制?

      1. 初始大小为10
      private static final int DEFAULT_CAPACITY = 10;
      2. 默认1.5倍扩容
      int newCapacity = oldCapacity + (oldCapacity >> 1);
      
    • HashMap 和 Hashtable 的区别?

      1. 线程安全:HashMap非线程安全,Hashtable 线程安全,方法基本使用synchronized修饰.
      2. 效率:Hashtable 要频繁使用synchronized,所以效率不如HashMap,而且它基本被淘汰了,不建议在代码中使用.
      3. key或value可否为null: HashMap的key只有一个可以为null,但是值可以有多个null, Hashtable只要key为null就会报NullPointerException.
      4. 初始容量与扩容:
        Hashtable 初始容量为11,每次扩容变为2n+1.
        HashMap 初始容量为16,每次扩容变为2n.
      5. 底层结构:
        Hashtable -> 数组+链表;
        HashMap -> 数组+链表(1.8以前),数组+链表+红黑树(1.8),当链表长度大于8时变为红黑树,小于6时变成链表.
    • HashMap 和 HashSet区别?

    HashSet底层基于HashMap 实现,只有少量方法是自己实现的.

    • HashSet如何检查重复?

    一个对象加入HashSet时,先计算 hashcode 得到对象加入的位置,同时和其他元素的 hashcode 比较,若没有相同那么这个对象不重复,否则调用 equals() 比较两个对象的值是否相同.

    转自JavaGuide面试突击版

  • 相关阅读:
    算法练习-寻找和为定值的两个数
    算法练习-字符串全排列
    算法练习-最长回文子串
    判断一点是否在三角形的外接圆内
    用递归方法计算行列式的值
    算法练习-回文判断
    算法练习-字符串转换成整数(实现atoi函数)
    算法练习-字符串包含
    数据结构-队列
    结构体(或者联合体)变量的成员在内存里是如何分布的
  • 原文地址:https://www.cnblogs.com/qifengle1412/p/12872784.html
Copyright © 2011-2022 走看看