Java集合

概述

  • Java集合就像一种容器,可以动态的把多个对象的引用放入容器中
  • Java集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组

Java集合可分为 Collection 和 Map 两种体系

  • Collection接口:单列数据,定义了存取一组对象的方法的集合
    List 接口:元素有序、可重复的集合
    Set 接口:元素无序、不可重复的集合
  • Map接口:双列数据,保存具有映射关系“key-value”的集合

Collection接口:单列数据,定义了存取一组对象的方法的集合

Collection接口中的常用方法:

  • boolean add(e):将元素 e 添加到集合中
  • int size():获取元素的个数
  • boolean addAll(Collection coll):将coll集合中的元素添加到当前的集合中
  • boolean isEmpty():判断当前集合中是否有元素
  • boolean clear():清空集合元素
  • boolean contains(Object obj):判断当前集合中是否包含obj,通过调用obj对象所在类的equals()
  • boolean containsAll(Collection coll):判断形参coll中的所有元素是否都存在于当前集合中
  • boolean remove(Object obj):从当前集合中移除obj元素
  • boolean removeAll(Collection coll):从当前集合中移除coll中的所有元素
  • boolean retainAll(Collection coll):交集:获取当前集合和coll集合的交集,并返回给当前集合
  • boolean equals(Object obj):当前集合和形参集合的元素都相同时返回true
  • int hashCode():返回当前对象的哈希值
  • Object[] toArray():集合向数组的转换
  • iterator():返回Iterator接口的实例,用于遍历集合元素
    迭代器接口 Iterator 的使用:
    boolean hasNext()
    next():指针下移,将下移以后集合位置上的元素返回
    remove():可以在遍历的时候删除集合中的元素,不同于集合直接调用remove()

List 接口:元素有序、可重复的集合
主要方法:

  • void add(int index, Object ele):在 index 位置插入 ele 元素
  • boolean addAll(int index, Collection eles):从 index 位置开始将 eles 中的所有元素添加进来
  • Object get(int index):获取指定 index 位置的元素
  • int indexOf(Object obj):返回 obj 在集合中首次出现的位置
  • int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置
  • Object remove(int index):移除指定 index 位置的元素,并返回此元素
  • Object set(int index ,Object ele):设置指定 index 位置的元素为 ele
  • List subList(int fromIndex ,int toIndex):返回从fromIndex到toIndex位置的子集合

具体为三个实现类:

  • ArrayList: 作为List接口的主要实现类:线程不安全的,效率高,底层使用Object[ ] 存储
  • LinkedList: 对于频繁的插入、删除操作,使用此类比使用ArrayList效率高:底层使用双向链表存储
  • Vector 作为List接口的古老实现类:线程安全的,效率低,底层使用Object[] 存储

Set接口:元素无序、不可重复的集合

以HashSet为例说明:

  1. 无序性: 不等于随机性。存储的数据在底层数组中并非按照数组索引的顺序添加的,而是根据数据的哈希值决定的。
  2. 不可重复性: 保证添加的元素按照equals()判断时,不能返回true。即相同的元素只能添加一个。
  3. 添加元素过程: 首先调用需插入元素所在类的hashCode()方法,计算元素的哈希值,此哈希值接着通过某种算法计算出在HashSet底层数组中的存储位置(即索引位置),判断数组此位置上是否已有元素,如果此位置没有其他元素,则添加成功。
    如果此位置上有其他元素,则比较两元素的哈希值,如果哈希值不同,则通过链表方式添加成功
    如果哈希值相同,进而通过调用equals()方法,如果equals()方法返回值为false,则通过链表方式添加成功。
    如果equals()方法返回值为true,则添加失败。
  4. 向Set中添加的数据,其所在类一定要重写hashCode()和equals()方法
    重写的hashCode()和equals()方法尽可能的保持一致性。以实现对象相等规则,即相等的对象必须具有相等的散列码

具体为三个实现类:

  • HashSet: 作为Set接口的主要实现类:线程不安全的:可以存储null值
  • LinkedHashSet: 作为HashSet的子类:遍历其内部数据时,可以按照添加的顺序遍历,其每个元素还通过链表连接。
    对于频繁的遍历操作,LinkedHashSet效率高于HashSet。
  • TreeSet: 可以按照添加对象的指定属性,进行排序。
    向TreeSet中添加的数据,要求是相同类的对象。
    自然排序(实现Comparable接口)中,比较两个对象是否相同的标准为:compareTo()返回0,不再是equals()。
    定制排序(实现Comparator接口)中,比较两个对象是否相同的标准为:compareTo()返回0,不再是equals()。

Map接口:双列数据,保存具有映射关系“key-value”的集合

Map结构的理解:

  • Map中的key:无序的、不可重复的,使用Set存储所有的key -->key所在的类要重写equals()和hashCode()
  • Map中的value:无序的、可重复的,使用Collection存储所有的value -->value所在的类要重写equals()
  • 一个键值对:key-value构成了一个Entry对象
  • Map中的Entry:无序的、不可重复的,使用Set存储所有的entry

主要方法

  • Object put(Object key ,Object value):将指定的key-value添加到(或修改)当前map对象中
  • void putAll(Map m):将m中的所有key-value对存放到当前map中
  • Object remove(Object key):移除指定key的key-value对,并返回value
  • void clear():清空当前map中的所有数据
  • Object get(Object key):获取指定key对应的value
  • boolean containsKey(Object key):是否包含指定的key
  • boolean containsValue(Object value):是否包含指定的value
  • int size():返回map中key-value对的个数
  • boolean isEmpty():判断当前map是否为空
  • boolean equals(Object obj):判断当前map和参数对象obj是否相等
  • Set keySet():返回所有key构成的Set集合
  • Collection values():返回所有value构成的Collection集合
  • Set entrySet():返回所有key-value对构成的Set集合

具体实现类:

  • HashMap: 作为Map的主要实现类:线程不安全的,效率高:可存储null的key和value
  • LinkedHashMap: 作为HashMap的子类。保证可以按照添加的顺序实现遍历,其每个元素还通过链表连接。
  • TreeMap: 保证按照添加的key-value对进行排序,实现遍历排序。
  • Hashtable: 作为Map的古老实现类:线程安全的,效率低:不能存储null的key和value,
  • Properties: 作为Hashtable的子类:常用来处理配置文件。key和value都是String类型。

Collections工具类

Collections是一个操作Set、List、Map等集合的工具类
Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法

排序操作:(均为static方法)

  • reverse(List):反转List中元素的顺序
  • shuffle(List):对Lise集合元素进行随机排序
  • sort(List):根据元素的自然顺序对指定List集合元素按升序排序
  • sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
  • swap(List,int,int):将指定List集合中的i处元素和j处元素进行交换

查找、替换:

  • Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
  • Object max(Collection ,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素
  • Object min(Collection):
  • Object min(Collection ,Comparator):
  • int frequency(Collection ,Object):返回指定集合中指定元素的出现次数
  • void copy(List dest ,List src):将src中的内容复制到dest中
  • boolean replaceAll(List list ,Object oldVal ,Object newVal):使用新值替换List对象的所有旧值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值