zoukankan      html  css  js  c++  java
  • 关于集合

    1.ArrayList

    • 是基于数组实现的,因此对指定下标的查找和修改比较快,但是删除和插入操作比较慢,因为需要移动插入或者删除位置后面的元素,并且涉及数组的复制

    • 默认容量10,构造ArrayList时尽量指定容量,减少扩容时带来的数组复制操作

    • 每次添加元素之前会检查是否需要扩容,每次扩容都是增加原有容量的一半

    • 每次对下标的操作都会进行安全性检查,如果出现数组越界就立即抛出异常

    • 非线程安全

    • 以上分析基于JDK1.7

    2.LinkedList

    • 是基于双向链表实现的,不论是增删改查方法还是队列和栈的实现,都可通过操作结点实现

    • LinkedList无需提前指定容量,因为基于链表操作,集合的容量随着元素的加入自动增加

    • LinkedList删除元素后集合占用的内存自动缩小

    • 非线程安全

    • 以上分析基于JDK1.7

     

     3.HashMap

    • 基于哈希表实现的(哈希表是由数组和链表共同构成)

    • extends AbstractMap<K,V>  implements Map<K,V>, Cloneable, Serializable
    • 默认容量是16,默认加载因子是0.75fthreshold的值="容量*加载因子",添加元素时,如果size>threshold,就会扩容为原来的两倍。

    • 在添加键值对时会先检查哈希表是否是个空表,如果是空表就进行初始化。根据key获取Hash码。根据hash码定位到Entry数组的指定槽位,然后对该槽位的单向链表进行遍历,如果传入的已经存在了就进行替换操作,否则就新建一个Entry添加到哈希表中。

    • 非线程安全

    • key、value允许为null
    • 以上分析基于JDK1.7

    4.Hashtable

    • 是基于哈希表实现的

    •  extends Dictionary<K,V>   implements Map<K,V>, Cloneable, java.io.Serializable
    • 线程安全

    • key、value不允许为null
    • 以上分析基于JDK1.7

      5.Array 和 ArrayList 的区别

    Array 可以包含基本类型和对象类型,ArrayList 只能包含对象类型;Array 的大小是固定的,ArrayList 的大小是动态变化的;ArrayList 提供了更多的方法和特性,譬如 addAll()、removeAll()、iterator() 等。

  • 相关阅读:
    [BJOI2019] 光线
    C# 从零开始写 SharpDx 应用 笔刷
    BAT 脚本判断当前系统是 x86 还是 x64 系统
    BAT 脚本判断当前系统是 x86 还是 x64 系统
    win2d 通过 CanvasActiveLayer 画出透明度和裁剪
    win2d 通过 CanvasActiveLayer 画出透明度和裁剪
    PowerShell 拿到显卡信息
    PowerShell 拿到显卡信息
    win10 uwp 如何使用DataTemplate
    win10 uwp 如何使用DataTemplate
  • 原文地址:https://www.cnblogs.com/mcahkf/p/8919298.html
Copyright © 2011-2022 走看看