集合
含义
1.集合是Java API所提供的一系列类,可以用于动态存放多个对象(集合只能存放对象,如果是想存int,则要存放int的包装类Integer)
2.集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型就行(集合中不能存放基本数据类型,但可以放基本数据类型的包装类)
3.集合类均支持泛型,是一种数据安全的做法
集合与数组的不同
数组:一旦初始化后,长度不可变;元素类型受限定(String类型的数组只能装String类型的数据);数组可以存储基本数据类型
集合:长度可变的序列,元素类型不受限定(一个集合可以存储多种类型的元素);结合只能存储引用类型的数据
集合继承关系图
Collection和Map区别
Colletion存单个值,其中实现了List接口的实现类可以获取迭代器进行遍历
Map存两个值(key-value),不可以获得迭代器,不能遍历(可以间接遍历)
Collection家族
List接口
特点:有序且可重复
实现类:
1.ArrayList
2.LinkedList
3.Vector
4.Stack
Set接口
特点:无序且不可重复
实现类:
1.HashSet
2.LinkedHashSet
3.TreeSet
注:无序 ≠ 随机,无序仅表示存入顺序和取出顺序不一致
Map家族
实现类:
1.HashMap
2.LinkedHashMap
3.HashTable
4.ConcurrentHashMap
5.TreeMap
6.Properties
比较ArrayList和LinkedList
1.LinkedList添加了:
栈模式removeLast()
队列模式removeFirst()
2.ArrayList底层是一维数组,LinkedList底层是双向链表
添加 -- 不扩容的情况下:ArrayList更快
扩容的情况下:LinkedList更快
删除 -- LinkedList更快
查找 -- ArrayList更快
修改 -- ArrayList更快
注:工作中常用ArrayList,因为许多需求都需要使用查询功能,ArrayList查询更快
各种集合的应用场景
ArrayList 存数据,线程不安全。在数据的查询、修改上有效率优势。(不扩容的情况下,添加也有效率优势)
LinkedList 需要用到队列模式、栈模式时使用,线程不安全。
Vector 弃用,线程安全
Stack 弃用,线程安全
HashSet 去重+无序,线程不安全
LinkedHashSet 去重+有序,线程不安全
TreeSet 去重+排序,重复、排序规则可以自定义,线程不安全。
HashMap 存key+value,key去重,无序,线程不安全。
LinkedHashMap 存key+value,key去重,有序,线程不安全。
HashTable 弃用,线程安全
ConcurrentHashMap 存key+value,key去重,无序,线程安全,据不加锁、CAS-效率高
TreeMap 存key+value,针对key排序、去重,排序、去重规则可以自定义
Properties 配置文件