集合是用来存储引用类型数据的容器
集合分为两大类:
Collection集合: 单个存储
Map集合: 是按<键,值>对的形式存储. <员工姓名,工资>
- Collection集合
java.util包中Collection集合结构
- List集合
List接口继承了Collection, Collection有的操作List都能继承
List为每个元素指定了一个索引值,主要增加了针对索引值的操作:
add( index, o)
remove( index )
get( index )
sort(Comparator)
ArrayList与Vector
- ArrayList与Vector
-
- 底层数据结构都是数组, Vector是线程安全的, ArrayList不是线程安全的
-
- 默认初始化容量: 10
-
- ArrayList扩容: 1.5倍 , Vector扩容: 2 倍
LinkedList
LinkedList底层是双向链表, 主要增加了针对第一个元素/最后一个元素的操作
addFirst(o) addLast(o)
removeFirst() removeLast()
getFirst() getLast()
push(o) pop()
offer(o) poll()
4.5 Set集合
特点:
无序, 不可重复
4.6 HashSet
-
- HashSet底层是HashMap
-
- 向HashSet中添加元素,实际上就是把该元素作为键添加到底层的HashMap中
-
- HashSet就是Hashmap键的集合
4.7 TreeSet
- 1 . TreeSet实现了SortedSet接口,可以对集合中的元素自然排序, 要求集合中元素必须是可比较的
-
1)在创建TreeSet集合时,可以在构造方法中指定Comparator比较器
-
2)如果没有指定Comparator比较器,要求元素的类实现Comparable接口
-
- TreeSet底层是TreeMap
-
- 向TreeSet添加元素时, 就是把该元素作为键添加到了底层的TreeMap中
- 4 .TreeSet就是TreeMap键的集合
4.8 Collection小结
Collection集合特点: 单个数据存储
Collection是一个接口, 定义了一组操作集合的规范, 所有的实现类都需要重写Collection接口的方法 . 常用的方法:
add( o ) , remove( o ) , contains( o) , size() ,
iterator()返回迭代器, hasNext() , next() , remove()
---- List集合
有序, 存储顺序就是添加顺序
可重复, 可以存储重复的数据
为每个元素指定了索引值, 增加了针对索引值的操作
add( index, o ) remove( Index ) get(index) sort( Comparator )
-------- ArrayList
底层是数组, 访问快, 添加删除慢
初始化容量: 10
扩容: 1.5倍
--------Vector
底层也是数组, 与Arraylist相比,它是线程安全的, ArrayList不是线程安全的
初始化容量: 10
扩容: 2倍
--------LinkedList
底层是双向链表, 添加删除快, 访问慢
增加了针对第一个元素/最后一个元素的操作
addFirst()/addLast() removeFirst()/removeLast() getFirst()/getLast(0
push(o) / pop() 模拟栈 offer(o) /poll() 模拟队列
-----------应用场景--------------------------------------------------------------------------------------------
如果存储重复的数据选择List集合
如果以查询访问为主选择ArrayList
如果频繁添加删除选择LinkedList
如果是多线程环境选择java.util.concurrent. CopyOnWriterArrayList
注意**********************************************************
如果List集合存储自定义类型, contains(o)/remove(o)等方法需要调用对象的equals()方法, 应该在自定义类中重写equals()/hashCode()方法
---- Set
无序, 存储顺序可能与添加顺序不一样
不可重复, 在Set集合中不能存储重复的数据
--------HashSet
底层是 HashMap
向HashSet添加元素就是把该元素作为键添加到了底层的HashMap中
HashSet就是HashMap键的集合
--------TreeSet
TreeSet实现了SortedSet接口, 可以对集合中的元素自然排序, 要求元素必须是可比较的, 要么在构造方法中指定Comparator比较器, 如果没有指定comparator比较器的情况下,元素的类需要实现Comparable接口
TreeSet是先选择Comparator, 没有Comparator的情况下再选择Comparable
对于开发人员来说,一般情况下通过Comparable接口定义一个默认的比较规则,在Comparator中可以定义很多不同的比较规则
TreeSet底层是TreeMap
向TreeSet添加元素就是把该元素作为键添加到了底层的TreeMap中
TreeSet就是TreeMap键的集合
----------应用场景----------------------------------------------------------------------------------------------------
存储不重复的数据选择Set集合
如果不需要排序选择HashSet
如果需要排序就选择TreeSet
如果在多线程环境中, 不排序选择java.util.concurrent.CopyOnWriteArraySet, 如果需要排序选择ConcurrentSkipListSet
注意********************************************************
选择HashSet集合, 需要重写equals()/hashCode()方法
选择TreeSet集合需要指定比较规则