ArrayList、HashSet、HashMap异同

来源:学生作业帮助网 编辑:六六作业网 时间:2024/04/28 17:24:24
ArrayList、HashSet、HashMap异同ArrayList、HashSet、HashMap异同ArrayList、HashSet、HashMap异同ArrayList类  ArrayLi

ArrayList、HashSet、HashMap异同
ArrayList、HashSet、HashMap异同

ArrayList、HashSet、HashMap异同
ArrayList类
  ArrayList实现了可变大小的数组.它允许所有元素,包括null.ArrayList没有同步.
size,isEmpty,get,set方法运行时间为常数.但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间.其他的方法运行时间为线性.
  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小.这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义.当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率.
  和LinkedList一样,ArrayList也是非同步的(unsynchronized).
HashMap类
  HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key.,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例.因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低.
两个通用Set实现是HashSet 和TreeSet.要决定用哪一个,那是非常简单明了的.HashSet 要快得多 (对大多数操作是常数时间之于对数时间(constant time vs.log time)),但不提供排序保证.如果你需要使用 SortedSet 中的操作,或者按顺序迭代对你来说是重要的,那么请使用 TreeSet.否则,使用 HashSet.在大多数时间都不使用 HashSet ,对你来说是个公平的赌博.
  关于 HashSet,有一件事应该牢记,即就条目数和容量之和来讲,迭代是线性的.因此,如果迭代性能很重要,那就应该慎重选择一个适当的初始容量.容量选得太大,既浪费空间,也浪费时间.默认的初试容量是101,一般来讲,它比你所需要的要多.可以使用 int 构造函数来指定初始容量.要分配 HashSet 的初始容量为