集合--------------Java集合详解(Set、List、Map)

java集合概述

为了保证数量不确定的数据,以及保存具有映射关系的数据,Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。Java集合大致可分为Set、List、Map和Queue四种体系,其中本文章主要详解前三种体系,Set代表无序、不可重复的集合;List代表有序、重复的集合;Map代表具有映射关系的集合

集合继承结构图

Collection接口

Collection接口LIst、Set和Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集合。

下面介绍Collection的常用方法

boolean add(Object o):    该方法用于向集合里添加一个元素。如果集合对象被添加操作改变了,则返回true。

void clean():   清除集合里的所有元素,将集合长度变为0。   

boolean  contains(Object o):  返回集合里是否包换指定元素。

Iterator iterator ():  返回一个Iterator对象,用于遍历集合里的元素

int size (): 该方法返回集合里元素的个数。

Object [ ] toArray(): 该方法把集合转换成一个数组,所有的集合元素编程对应的数组元素。

Iterator接口

Iterator对象被称为迭代器

下面介绍Iterator的常用方法

boolean hasNext(): 如果被迭代的集合元素还没有被遍历完,则返回true。

Object next ():返回集合里的下一个元素

void remove(): 删除集合里上次next方法返回的元素

Set集合

Set集合不允许包含相同的元素,如果师徒把俩个相同的元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被添加。主要介绍HashSet和TreeSet实现类。

HashSet类

HashSet具有以下特点:

1.不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。

2.HashSet不是同步的,如果多个线程同时访问一个HashSet,假设有俩个或俩个以上线程同时修改啊了HashSet集合时,     则必须通过代码来保证其同步。

3.集合元素值可以是null。

4. HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构
5. 哈希表又叫做散列表,哈希表底层是一个数组,这个数字中每一个元素是一个单向链表。
    每个单向链表都有一个独一无二的hash值,代表数字的下标。
    在某个单向链表中的每一个节点上的hash值相等的。hash值实际上是key调用hashCode方法, 在通过哈希算法转换成        的值。
6. 如何向哈希表中添加元素:
   *       先调用被存在存储的key的hashCode方法,经过某个算法得出hash值,如果在这个哈希表中不存在这hash值,则直接加入元素。
   *       如果该hash值已经存在,继续调用key之间的equals方法,如果equals方法返回false,则将该元素添加。如果equals方法返回true,
   *       则放弃添加该元素。   
   *  
7.HashSet其实是HasjMap中的key部分。HashSet有什么特点,HashMap中的key应该具有相同的特点

TreeSet类

TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。TreeSet并不是根据元素的插入顺序进行排序的,而是根据实际值的大小来进行排序的。

List集合

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。

List增加的常用方法

Object get(int index ): 返回集合index索引处的元素

int  indexOf(Object o): 返回对象o在List集合中第一次出现的位置索引

ArrayList类和Vector类

1.ArrayList集合底层是数组,数组是有下标的, 所以ArrayList集合有很多自己的特性
2.ArrayList集合底层默认初始化容量是10, 扩大之后的容量是原容量的1.5倍
3.Vector集合底层默认初始化容量也是10.扩大之后的容量是原容量的2倍
4.如何优化ArrayList和Vector ?
 *  尽量减少扩容操作,因为扩容需要数组拷贝,数组拷贝很耗内存
 *  一般推荐在创建集合的时候指定初始化容量。

Map集合

Map用于保存具有映射关系的数据,因此Map集合里保存着俩组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value都可以使任何引用类型的数据。Map的key不允许重复。key和value之间存在单向一对一关系,既通过指定的key,总能找到唯一的、确定的value。

如果把Map里所有的key放在一起看,它们就组成了一个Set集合(所有的key没有顺序,key与key之间不能重复);如果把Map里所有value放在一起来看,它们又非常类似于一个List:元素与元素之间可以重复,每个元素可以根据索引来查找,只是Map中的索引不再使用整数值,而是以另一个对象作为索引。

Map集合的常用方法

void clean ():删除该Map对象中的所有key-value对

Boolean containsKey(Object key):查询Map中是否包含指定的Key,如果包含返回true

Boolean containsValue(Object value):查询Map中是否包含指定的value,如果包含返回true

Object get (Object key ):返回指定key所对应的value;如果此Map不包含该key,则返回null

Object put(Object key,Object value):    添加一个key-value对,如果当前Map中已经有一个与该key相等的key-value                                                                          对,则新的key-value对会覆盖原来的key-value对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值