碎碎念②关于集合

​​​​​​

目录

一、集合概念

二、集合作用

三、关系图

四、分述

1.Collection接口

1、list

 2、set接口

2.collection常用方法

2.Map接口

1.map

2.HashMap实现类:

3.LinkedHashMap实现类:

4.HashTable实现类

5.TreeMap实现类

6.map接口方法:

五、内容比较

1.ArrayList和LinkedList对比

2.HashSet和TreeSet对比

3.HashSet和HashMap对比

六、结语


一、集合概念

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。

六、结语

目前为止我正在夯实我的基础,文章深度不够,我会在日后的碎碎念更新中不断加强文章的深度,本次仅仅是将集合的大体内容进行总结归纳,日后的深度加强版也会再对集合内容进行更加详细的补充,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值