码迷,mamicode.com
首页 > 编程语言 > 详细

Java-集合

时间:2020-05-11 23:23:56      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:循环   lin   shc   efault   pac   vat   stat   比较   equal   

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() 比较两个对象的值是否相同.

Java-集合

标签:循环   lin   shc   efault   pac   vat   stat   比较   equal   

原文地址:https://www.cnblogs.com/qifengle1412/p/12872784.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!