java集合分类以及特点是什么,Java集合分类以及各自特点

Java中集合分为两大类:Map和Collection。

202011081533187335.png

常用的集合有:ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap。

数组和集合的区别:

1:

数组可以存储基本数据类型/引用数据类型

基本数据类型存的是值? 引用数据类型存的是地址

数组在创建的时候就会定义存储的数据类型,也就是只能存储一种数据类型

集合只能存储引用数据类型(对象)

集合中也可以存储基本数据类型(装箱)但是最终存储的还是Object

如果没有泛型限定默认存储的都是Object类型的数据,也就是任意型

2:

数组长度是固定的,不能自动增长

集合是长度可变的,根据元素的多少决定长度

?

集合:

集合中保存的都是引用类型,如果是基本类型的话会自动转成其包装类。

List是有序的(存取顺序),可以有重复的元素,有索引,可以存在多个空值

Set是无序的(存取顺序),不能有重复元素,无索引值,只能存在一个空值

1.List下面的三个子集合的区别

Vector:

底层数据结构是数组,查询快,增删慢,线程安全,效率低,默认长度为10,超过会100%延长,

变成20,浪费空间

ArrayList:

底层数据结构是数组,查询快,增删慢,线程不安全,效率高,默认长度为10,超多就会new,

一个新的数组50%延长,节省空间

LinkedList:

底层数据结构是链表(双向链表),查询慢,增删快,线程不安全,效率高,支持头插和尾插

等操作,可以当做堆栈(stack),队列(queue)或双向队列(deque)

2.Set集合下面的三个子集合的区别:

HashSet:

底层数据结构是哈希表(无序,唯一),通过hashcode()和equals()保证元素唯一。

LinkedHashSet:

底层数据结构是链表和哈希表(FIFO插入有序,唯一),由链表保证元素有序,由哈希表保

证元素唯一。

TreeSet:

底层数据结构是红黑树(唯一,有序),通过自然排序和比较器排序保证元素有序,根据比

较返回值是否是0来保证元素唯一性。

如何使用Collection集合:

是否唯一?

是:Set

是否排序?

是:TreeSet或LinkedHashSet

否:HashSet

如果只知道用Set,但是不知道用哪个,就用HashSet

否:List

是否线程安全?

是:Vector

否:ArrayList或LinkedList

查询多:ArrayList

增删多:LinkedList

若果只知道用List,不知道用哪个,就用ArrayList

总结:如果知道用Collection,但是不知道用谁,用Arra

Map:

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable

TreeMap是有序的,HashMap和HashTable是无序的

HashTable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别

HashMap和HashTable的区别:

HashTable是线程安全的,HashMap不是线程安全的

HashMap效率比较高,HashTable效率比较低

如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。

HashTable的所有public方法声明都有synchronized关键字,而HashMap没有

HashTable不允许null值,HashMap允许(key和value都可以)

HashTable的父类是Dictionary,HashMap的父类是AbstractMap

List。如果知道用集合,就用ArrayList。