各种集合类的区别以及原理

集合区别:

list:(有序可重复)

  ArrayList:底层实现是数组,但是没有定义具体的长度和大小,有下标,所以查询快,增删慢,线程不安全

  LinkedList: 底层是链表,因为有指针所以增删快查询慢,线程不安全

  Vector:底层是数组,线程安全,有下标所以查询快增删慢,有synchronized修饰,现已被ArrayList替代

Set:(无序不重复)

  HashSet:底层是hash表结构,实现了set接口,其实是基于hashMap实现的,不能有null值,在添加数据时(add方法),会调用对象的hashcode()方法在set中去查找,比较要添加的值和set中的值若是hash值相等,若是相等则用equals方法比较,如果不相等,则添加(说明没有重复的值)

  TreeSet:底层是二叉树结构,不可以存重复对象,根据数据自身进行排序,如果没有可比性,则实现comparable接口重写compareTo方法(该方法是使某个对象具有可比性),也可重写compartor接口重写compare方法(该方法是使某个集合具有可比性)

Map(存键值对)

  HashMap:底层是哈希表(数组+链表)结构,线程不安全,可以存一个null键和多个null值,若要线程安全则Collections.synchronizedMap()方法,在添加新值的时候(put)会去计算将添加key值的hashCodehashCode%length = i,要存的entry,若此时entry上已经有值了那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。如果数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。

  HashTable:底层是哈希表(数组+链表)结构,线程安全,不可以存null键或者null

  TreeMap:底层实二叉树结构,可以存重复对象,实现comparable接口重写compareTo方法(该方法是使某个对象具有可比性),也可重写compartor接口重写compare方法(该方法是使某个集合具有可比性)

原文地址:https://www.cnblogs.com/rgever/p/8887548.html