各种集合类的区别以及原理
Posted 小毛喵喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各种集合类的区别以及原理相关的知识,希望对你有一定的参考价值。
集合区别:
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值的hashCode,hashCode%length = i,要存的entry,若此时entry上已经有值了那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。如果数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。
HashTable:底层是哈希表(数组+链表)结构,线程安全,不可以存null键或者null值
TreeMap:底层实二叉树结构,可以存重复对象,实现comparable接口重写compareTo方法(该方法是使某个对象具有可比性),也可重写compartor接口重写compare方法(该方法是使某个集合具有可比性)
以上是关于各种集合类的区别以及原理的主要内容,如果未能解决你的问题,请参考以下文章
Java中Collection和Collections的区别