今天工作中遇到了LinkedHashMap,于是就百度下它和HashMap的区别,LinkedHashMap遍历的话是有顺序的,遍历的话是以存储的顺序输出,HashMap遍历是没有顺序的,线程不安全的,可以同时写,并且key可以有一个为null,value可以有多个为null,HashTable是线程安全的,key和value都不可以为null。实现HashMap同步:Map<String String> map = Collections.synchronizedMap(new LinkedHashMap(<String String));  TreeMap可以把保存的记录按键值排序。

顺便再回忆下 ArrayList和Hashset和LinkedList的区别:

List:元素是有顺序的,元素可以重复因为每个元素有自己的角标(索引)
  |-- ArrayList:底层的数据结构是数组结构,特点是:查询很快,增 删 稍微慢点,线程不同步

  |-- LinkedList:底层使用的是链表数据结构,特点是:增 删很快,查询慢。

  |--Vector:底层是数组数据结构,线程同步,被ArrayList代替了,现在用的只有他的枚举。


Set:元素是无序的,且不可以重复(存入和取出的顺序不一定一致),线程不同步。

  |--HashSet:底层是哈希表数据结构。根据hashCode和equals方法来确定元素的唯一性

  |--TreeSet:可以对Set集合中的元素进行排序(自然循序),底层的数据结构是二叉树,也可以自己写个类实现Comparable 或者 Comparator 接口,定义自己的比较器,将其作为参数传递给TreeSet的构造函数。