Java-集合

Posted 起风了1412

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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() 比较两个对象的值是否相同.
















以上是关于Java-集合的主要内容,如果未能解决你的问题,请参考以下文章

201621123062《java程序设计》第九周作业总结

Java方法

金蝶handler中 collection 代码片段理解

Alfred常见使用

比较 C# 中的字符串片段并从集合中删除项目

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]