关于集合

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() 等。

原文地址:https://www.cnblogs.com/mcahkf/p/8919298.html