Java基础学习之集合笔记整理

Java基础学习之集合笔记整理

一、集合简述

​ Java是面向对象的语言,当我们对多个对象进行存储操作时,数组长度不可变,这就满足不了我们的需求,所以Java为我们提供了集合。

​ 集合的基本特点

  1. 集合的长度可变

  2. 集合只能存储对象

  3. 集合可以存储多种类型的对象

二、 集合的体系

集合作为存储容器,可以存储多个元素,但是根据底层数据结构的不同,Java提供了不同种类的集合。而且Java把共性的功能进行提取,形成了一个集合体系。

Java集合体系的关系图如下:
在这里插入图片描述
在这里插入图片描述

三、Collection接口

​ Collection是一个单值列集合,是最基本的集合接口,包含有两个子类接口List和Set.该接口定义在java.util包中。

​ List和Set的一些区别

在这里插入图片描述

Collection常用方法
方法名称方法描述
public boolean add( E e)向集合中插入一个元素
public boolean addAll(Collection<? extends E> c)向集合中插入一组元素
public void clear()清除集合中的所有元素
public boolean remove(Object o)从集合中删除一个指定的对象
public boolean removeAll(Collection<?> c);从集合中删除指定的一组对象元素
public boolean isEmpty()判断集合是否为空
public boolean contains(Object o)查找一个元素是否在集合存在
public boolean containsAll(Collection<?> c)查找一组元素是否在集合中存在
public Iterator iterator()用来获取集合中的每一个元素(为Iterator接口实例化)
public int size()获取集合中元素的个数
boolean retainAll(Collection<?> c)判断两个集合中是否有相同的元素(求两个元素的交集)
public Object[] toArray()将对象转换为对象数组
T[] toArray(T[] a)将指定类型的对象转换为指定类型的数组
public boolean equals(Object o)比较指定的对象是否同(从Object中覆写过来)
public int hashCode()返回对象的32位的十六进制的哈希值(从Object中覆写过来)
List接口

​ List接口下元素的存储有序(存储和取出的顺序),元素可以重复。

List接口的常用方法
方法名称方法描述
public void add(int index,E element)在指定位置添加元素
boolean addAll(int index,Collection<? extends E> c)在指定位置处添加一组元素
public E get(int index)根据索引位置取出元素
public int indexOf(Object o)返回元素在在集合中第一次出现的索引位置,不存在则返回-1
public int lastIndexOf(Object o)返回元素在在集合中最后一次出现的索引位置,不存在则返回-1
public ListIterator listIterator()遍历列表的迭代器:(返回ListIterator的接口实例)
public ListIterator listIterator(int index)返回指定位置的ListIterator的接口实例
public E remove(int index)删除指定位置的元素
public E set(int index,E element)修改指定位置的元素
List subList(int fromIndex,int toIndex)截取集合(返回集合的子集合)
Set接口

​ Set接口下存储的元素是无序(存储和取出的元素)无重复的。

HashSet

​ HashSet的底层是哈希表结构,非线程安全的,效率较高

​ 保证元素唯一性的方法 hashCode()和equals()

​ 顺序:

​ 先判断hashCode()值是否相同

​ 相同:

​ 继续走equals()方法,看比较结果

​ 如果返回true:就不添加到集合

​ 如果返回false:添加到集合

​ 不相同:就添加到集合

TreeSet

​ TreeSet底层是二叉树结构,是非线程安全的,效率比较高。

​ 保证元素唯一性的方法是根据返回值为0

​ 保证排序的两种方法:

​ 自然排序:实现comparable接口

​ 比较器排序:实现comparator接口

四、Map接口

​ map是一个键值对列的集合,以key-value的形式存储,键不可以重复,值可以重复。

在这里插入图片描述

​ map的接口的定义如下:

public interface Map<K,V>
Map的常用方法如下
方法名称方法描述
void clear()清空Map集合中的所有内容
boolean containsKey(Object key)判断集合中是否存在指定的key
boolean containsValue(Object value)判断集合中是否存在指定的value
Set<Map.Entry<K,V>> entrySet()将Map接口变为Set集合
V get(Object key)根据给定的key获取对应的1值
Set keySet()将全部的key变为Set集合
Collection values()将全部的value变为Collection集合
V put(K key,V value)向集合中添加元素
void putAll(Map<? extends K,? extends V> m)向集合中添加一组元素
V remove(Object key)根据key删除内容

Map 本身是一个接口,所以一般会使用以下的几个子类:HashMap、TreeMap、Hashtabl

HashMap

​ HashMap是Map的子类,此类的定义如下:

public class HashMap<K,V> extendsAbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable

此类继承了 AbstractMap 类,同时可以被克隆,可以被序列化下来

HashSet

​ Hashtable 是一个最早的 key->value 的操作类,本身是在 JDK 1.0 的时候推出的。其基本操作与 HashMap 是类似的

​ 操作的时候,可以发现与 HashMap 基本上没有什么区别,而且本身都是以 Map 为操作标准的,所以操作的结果形式都一样。但是 Hashtable 中是不能向集合中插入 null 值的。

HashMap和HashTable的区别

区别点HashMapHashTable
推出时间JDK 1.2 之后推出的,新的操作类JDK 1.0 时推出的,旧的操作类
性能非线程安全,效率较高线程安全,效率低
null允许设置为 null不允许设置,否则将出现空指向异常

五、迭代器的使用

迭代器Iterator
迭代器的使用步骤
  1. 通过集合获取迭代器对象

  2. 使用hasNext()方法判断是否存在下一个元素

  3. 存在,使用next()方法获取元素

    迭代器的使用原理

    由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。

    ​ 这个时候,我们就把判断和获取功能定义在了一个接口中,当遍历哪种集合的时候,只要该集合内部实现这个接口即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值