JAVA集合只能存放引用类型得数据,不能存放基本数据类型。

Set集合:

加入Set的元素必须定义equals()方法,以确保对象的唯一性。

  1. HashSet:HashSet类按照哈希算法来存取集合中的对象,存取速度比较快;为快速查询你设计的Set,存入HashSet的对象必须定义hashCode();
  2. TreeSet:TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序,底层为树结构。
  3. LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

    List集合:

    其元素以线性方式存储,集合中可以存放重复的对象;

  4. ArrayList:由长度可变的数组实现。可以对元素进行随机访问,向ArrayList()中间插入与删除元素的速度慢。一个List可以生成ListIterator,使用它可以从两个方向遍历List;

  5. LinkedList:在实现中采用链表数据结构。对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:

    1. addFirst()、addLast()、getFirst()、getLast()、removeFirst()和removeLast()。
    2. 这些方法(没有在任何接口或者基类中定义过)使得LinkedList可以当作堆栈,队列和双向队列使用。

      Map集合:

      一种把键对象和值对象映射的集合,他的每一个元素都包含一对键对象和值对象。Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
  6. HashMap:Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子loadfactor,已调整容器的性能。不是线程安全的,key和value的值都可以是null。

  7. LinkeHashMap:类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时更快,因为它使用链表维护内部次序。
  8. TreeMap:基于红黑树数据结构的实现。查看“键”或者“键值对”时,他们会被顺序(次序由Comparable或者Compatator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一带有subMap()方法的Map,它可以返回一个子树。
  9. WeakHashMao:弱键(weak key)Map,Map中使用的对象也被允许释放:这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。
  10. IdentifyHashMap:使用==代替equals()对“键”作比较的hash map。转为解决特殊问题而设计。
  11. Hashtable: Hashtable是线程安全的一个map实现类,它实现线程安全的方法是在各个方法上添加了synchronized关键字。但是现在已经不再推荐使用HashTable了,因为现在有了ConcurrentHashMap这个专门用于多线程场景下的map实现类,其大大优化了多线程下的性能。线程安全的,key、value的值都不能是null。

    List和Set的区别:

  12. Set是无序不重复的,list相反。

    Set集合和hashCode以及equals方法的联系:

  13. 重写hashCode()用于获得元素的存储位置;重写equals()用于在两个元素的位置相同的时候比较两个元素是否相等。最终去掉HashSet中的重复元素。

    List和Map区别:

  14. List:是存储单列数据的集合,存储的数据是有序并且是可以重复的。

  15. Map:存储双列数据的集合,通过键值对存储数据,存储的数据是无序的,Key值不能重复,value值可以重复复。

    ArrayList于LinkedList的区别:

  16. ArrayList是一种可增长的数据实现,优点是它的随机存取速度快,缺点是新项的插入和现有项的删除花销大,除非变动是在ArrayList的末端。

  17. LinkedList是双向链表实现,新项的插入和现有项的删除开销很小,随机访问速度不比ArrayList()。

    ArrayList于Vector区别:

  18. Vecotr的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。

    HashMap和Hashtable的区别:

  19. HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行

  20. 线程安全方面Hashtable要比HashMap更安全,因为Hashtable中的方法都是synchronizd的,同时速度上比HashMap要慢,HashMap可以通过ConcurrentHashMap来使线程安全。
  21. 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其他线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法一处元素则不会抛出ConcurrentModificationException异常,但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。

    HashSet和HashMap区别:

  22. HashMap实现了Map接口,而HashSet实现了Set接口。

  23. HashMap存储的是键值对,而HashSet是存储对象。
  24. HashMap使用put()项Map添加元素,HashSe通过add()添加元素;
  25. HashMap使用Key计算hashcode,HashSet使用成员对象计算hashcode。
  26. HashMap要比HashSet快,因为它是使用唯一的键获取对象。