Java中集合分为两大类:Map和Collection。
常用的集合有: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。