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   的初始容量为