目录
一、集合概念
1、集合类存放于java.util包中。
2、集合类型主要有3种:set(集)、list(列表)和map(映射)。
3、集合存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。
简单来讲:集合就是一个放数据的容器,准确的说是放数据对象引用的容器。
二、集合作用
1、在类的内部,对数据进行组织
2、简单而快速的搜索大数量的条目
3、有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关的元素
4、有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以使任意类型
三、关系图
红色的是接口,蓝色的是实现类。
Collection接口被List接口和Set接口继承;
List接口有三个实现类,ArrayList,LinkedList,Vector;
Set接口被HashSet类实现,TreeSet类实现SortedSet接口,SortedSet接口和LinkedHashSet类继承HashSet类;
Map接口有两个实现类,HashMap,HashTable。 Propertise类继承HashTable;
Map接口被SortedMap接口继承,TreeMap是SortedMap接口的实现类;
四、分述
1.Collection接口
1、list
1.Collection接口是单列集合的最顶层接口
2.List :java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了 List 接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。
方法:
get(int index,E e) 获取指定位置的元素;remove(int index)移除指定位置的元素;
add(int index,E e) 将元素添加到指定位置;set(int index,E e) 用元素替换指定位置的元素;
3.ArrayList:java.util.ArrayList 集合数据存储的结构是数组结构 . 元素增删慢,查找快,由于日常开发中使用最多的功能是查询数据,遍历数据,所以 ArrayList 是最常用的集合之一。
4.Vector:底层数据结构是数组,查询快,增删慢;线程安全,效率低
5.LinkedList:java.util.LinkedList 集合数据存储的结构是链表结构。方便元素添加、删除的集合。
LinkedList常用方法:
2、set接口
1.HashSet:java.util.HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不能保证不一致)。 java.util.HashSet 底层的实现其实是一个 java.util.HashMap 支持。
2.LinkedHashSet:HashSet保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序,怎么办呢?在HashSet下面有一个子类 java.util.LinkedHashSet ,它是链表和哈希表组合的一个数据存储结构。
2.collection常用方法
int size() 获取元素个数
boolean isEmpty()是否个数为 0
boolean contains(Object element)是否包含指定元素
boolean add(E element)添加元素,成功时返回 true
boolean remove(Object element)删除元素,成功时返回 true
Iterator<E> iterator()获取迭代器
boolean containsAll(Collection<?> c) 是否包含指定集合 c 的全部元素
boolean addAll(Collection<? extends E> c) 添加集合 c 中元素到本集合集合有改变就返回 true
boolean removeAll(Collection<?> c) 删除本集合中和 c 集合中一致的元素集合有改变就返回 true
boolean retainAll(Collection<?> c) 保留本集合中 c 集合中两者共有的,集合有改变就返回 true
void clear() 删除所有元素
Object[] toArray() 返回一个包含集合中所有元素的数组
<T> T[] toArray(T[] a) 返回一个包含集合中所有元素的数组,运行时根据集合元素的类型指定数组的类型
2.Map接口
1.map
元素包含两个值(key,value)即键值对, key不允许重复,value可以重复, key与value是一一对应的。元素无序;
Map接口是双列集合的最顶层接口
2.HashMap实现类:
特点:查询快,元素无序,key不允许重复但可以为null,value可以重复。
底层分析:和HashSet底层相类似
3.LinkedHashMap实现类:
底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。
4.HashTable实现类
特点:查询快,元素无序,key不允许重复并且不可以为null,value可以重复。
底层分析:HashTable和Vector一样是古老的集合,有遗留缺陷,在JDK1.2之后 被更先进的集合取代了;HashTable是线程安全的,速度慢,HashMap是线程不安全的,速度快;
5.TreeMap实现类
特点:查询快,元素有序,key不允许重复并且不可以为null,value可以重复。
底层分析:和TreeSet底层相类似
6.map接口方法:
V put(K k,V v);//新增元素,返回被替换的V
K不能重复,如果重复了返回被替换的V
如果K没有重复,则返回null
V remove(Object obj);//根据K删除整个键值对,返回被删除的V
V get(Object k);//根据K获取V
Set<K> keySet();//获取所有的K
Set<Entry<K,V>> entrySet();返回map中所含键值对所组成的set集合
Collection<V> values();返回map中所有value组成的collection
boolean containsKey(Object key);查询map中是否包含指定key
boolean containsValue(Object value);查询map中是否包含指定value
boolean isEmpty();查询map是否为空
int size();map键值所对个数
void clear();清空map
五、内容比较
1.ArrayList和LinkedList对比
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
2.HashSet和TreeSet对比
HashSet比TreeSet的性能要好,因为TreeSet需要额外的红黑树算法来维护集合的次序。所以只有当需要保持排序的Set时候,才会使用TreeSet,否则都应该使用HashSet。
3.HashSet和HashMap对比
都是采用Hash算法来决定元素的存储位置,并通过hash算法来增加集合大小的。其中最大的区别就是,HashSet实现的Set接口,他不允许有重复的值。HashMap实现的是Map接口,里面存储的是键值对,map中不允许存在重复的key。
六、结语
目前为止我正在夯实我的基础,文章深度不够,我会在日后的碎碎念更新中不断加强文章的深度,本次仅仅是将集合的大体内容进行总结归纳,日后的深度加强版也会再对集合内容进行更加详细的补充,加油!