码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-04-20 01:10:36      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:com   eset   hashmap   ali   方法   重复   tor   edm   说明   

集合区别:

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方法(该方法是使某个集合具有可比性)

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

标签:com   eset   hashmap   ali   方法   重复   tor   edm   说明   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!