hashMap、Arraylist跟set的区别
hashMap、Arraylist和set的区别
区别:(1)
collection map
/ \ |
list set hashmap
|
arraylist
如果你单说这三个的区别,那就多了
第一,set是接口,arraylist和hashmap是类
第二,arraylist和set是在collection下的和hashmap的数据存储结构是不一样的,hashmap是以key,value的形式存储的。这是有本质的不同
第三,arraylist是有序链表,而set是无序的,(这里的有序和无序代表的是数据存储结构)
如果单说数据值的排序,set下面也有sortset,treeset
(2)
集合有三种:list (列表) set (集) map()
List<E> list= new ArrayList<E>
Set<.E> set=new HashSet<E>
这两个用法很接近,但是list内容可以重复,而set不允重复,
Map<key,value> map = HashMap<key,value>
是用K来保存value的值,与上面两种都不同
(3)
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 的初始容量为
区别:(1)
collection map
/ \ |
list set hashmap
|
arraylist
如果你单说这三个的区别,那就多了
第一,set是接口,arraylist和hashmap是类
第二,arraylist和set是在collection下的和hashmap的数据存储结构是不一样的,hashmap是以key,value的形式存储的。这是有本质的不同
第三,arraylist是有序链表,而set是无序的,(这里的有序和无序代表的是数据存储结构)
如果单说数据值的排序,set下面也有sortset,treeset
(2)
集合有三种:list (列表) set (集) map()
List<E> list= new ArrayList<E>
Set<.E> set=new HashSet<E>
这两个用法很接近,但是list内容可以重复,而set不允重复,
Map<key,value> map = HashMap<key,value>
是用K来保存value的值,与上面两种都不同
(3)
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 的初始容量为