【Java后端总结】Java基础(5)——Java集合类之集合类概述

Java集合类,又称Java容器类,是Java中用来存储数据元素的一类数据结构。在处理一些简单的,确定的,没有映射关系的数据时,我们通常会使用数组进行存储。但是一旦遇到一些复杂的,长度不确定的,或是有相对映射关系的数据时,利用数组存储无法满足上述的条件,因此Java引入了集合类,辅助开发者们解决上述问题。

集合类整体框架

我们首先来看一下Java集合类图:(取自百度)
在这里插入图片描述
根据上图所示,我们可以看到Java的集合类的根接口为Collection接口以及Map接口。子接口List,Set,Queue以及抽象类AbstractCollection实现了根接口Collection。抽象类AbstractList中有许多方法供List集合类使用,该抽象类继承于抽象类AbstractCollection,实现了List接口。抽象类AbstractSet中有许多方法供Set集合类使用,该抽象方法同样继承与抽象类AbstractCollection,实现了Set接口。SortedSet接口实现了Set接口主要是供Set集合类进行排序操作。抽象类AbstractMap以及SortedMap接口实现了Map接口。抽象类AbstractMap为Map集合类提供了一系列的方法,而SortedMap接口主要是供Map集合类进行排序操作。

Collections类是Java集合类的工具类,里面规定了许多静态方法供用户调用,由于该类使用私有构造,因此无法实例化。Arrays类是针对数组操作的工具类。Iterator接口提供了遍历集合类元素的方法,定义了迭代器的功能。

Java集合类概述

Collection接口

Collection接口是Java集合类的根接口之一,在java.util包中。该接口有高度抽象性,有一个抽象类和3个集合类接口实现了Collection接口。该接口内定义的方法即可以为List集合提供一些通用方法,同时还支持Set集合以及Queue集合,该三种集合都是单元素的存储集合。在实际开发中,我们很少直接使用Collection接口,而是使用其实现的子接口

该接口有以下常用方法:

  • add(E e)方法用于添加元素。
  • contains(Object o)方法用于查找是否存在某元素。
  • remove(Object o)方法用于移除元素。
  • clear()方法用于移除集合内所有元素。

Iterator接口

Iterator又称迭代器,主要的功能是用来遍历Collection中的元素。Collection接口继承了Iterable接口,该接口是Iterator接口的封装,提供了方法用于访问Iterator接口,因此所有Collection接口的实现类都可以使用iterator的方法。

该接口有以下常用方法:

  • hasNext()方法用于判断集合是否有下个元素。
  • next()方法用于指向并返回下一个元素。
  • remove()方法用于删除当前指向元素。
  • forEachRemaining(Consumer<? super E> action)方法用于遍历剩余集合,并对每个元素执行方法,方法根据参数传入。通过该方法遍历元素只可执行一次,并且不可逆,本质是调用了next()方法。

List接口

前面说过Collection接口是一个高度抽象的接口,而List接口通过继承Collection接口并对其进行扩展,其功能方法要比Collection接口强大很多。List接口同样符合Collection接口用来实现单元素集合存储,此外List接口规定的要存储的集合必须是一个有序的集合,且集合元素允许重复。因此在继承了Collection接口方法之外,List接口扩充了许多和索引相关的方法,来实现List的有序性和可重复性。

有多个接口比如ArrayList,LinkedList等实现了List接口,具体会在之后详述。

List接口常用方法如下:

  • sort(Comparator<? super E> c)方法可以根据某个排序规则进行集合类排序。
  • get(int index)方法可以根据某个索引值进行元素查询。
  • set(int index, E element)方法可以根据某个索引值进行元素修改。
  • add(int index, E element)方法可以根据某个索引值进行元素添加,索引值之后的元素会自动进行移位。
  • remove(int index)方法可以根据某个索引值进行元素删除,索引值之后的元素会自动进行移位。
  • indexOf(Object o)方法可以返回第一个和某个元素匹配的索引值,若无匹配项则返回负值。
  • lastIndexOf(Object o)方法可以返回最后一个和某个元素匹配的索引值,若无匹配项则返回负值。
  • subList(int fromIndex, int toIndex)方法可以返回一个从fromIndex索引值到toIndex索引值的一个新的集合类对象。

由于List是一个有序的集合,因此在对该集合实行查询修改操作时,其效率较高,但是往集合内进行删除或者插入操作时,其执行效率较慢,因为一旦插入或删除某个元素其所在位置后的元素都需要进行移动。

Set接口

Set接口同样符合Collection接口来实现单元素集合的存储。此外Set接口规定要存储的集合是无序的,因此其具体方法与Collection实现方法大体相同。但Set接口规定其存储的集合不允许有重复的元素,因此在比对对象是否相同时运用的Object.equals(Object obj)方法,而不是使用 == 进行比较,具体两者区别请看Java基础知识一文。

有多个接口实现了Set接口,如HashSet,TreeSet等,其具体特性将在之后详述。

Queue接口

Queue从名字上来看就是模拟队列的操作,队列在数据结构中有先进先出的功能。通常情况下队列只能从队列头插入元素,并且只能在队列尾部移除元素,无法指定索引插入。Queue接口同样继承自Collection接口,实现了Collection接口所有的方法。

BlockingQueue(阻塞队列),Deque(双向队列)继承了Queue接口;LinkedList实现了Dueue接口,在某种情况下LinkedList也可以当做队列来使用。具体集合类的使用方法会在之后详述。

Queue接口常用方法如下:

  • add(E e)方法可以在队列头添加一个元素,如果队列已满则抛出IllegalStateException异常。
  • offer(E e)方法可以在队列头添加一个元素,若添加成功返回true,若队列已满则返回false。
  • remove()方法可以从队列尾移除一个元素并且返回队列头元素,如果为空队列,则抛出NoSuchElementException异常。
  • poll()方法可以从队列尾移除元素并且返回队列头元素,如果为空队列,则返回null。
  • element()方法直接返回队列头元素,若为空队列,则抛出NoSuchElementException异常。
  • peek()方法可以返回队列头元素,若为空队列,则返回null。

在实际开发使用中还是推荐大家使用如offer(E e),poll()这样的可以根据返回值来判断队列是否空或者满,不太推荐使用add(E e)等会根据队列状态抛出运行时异常的方法。

Map接口

Map接口隶属于Java.util包下,是集合框架类的另一大接口,和Collection接口平级且相互独立。实现Map接口的集合类都是含有对应关系的一组元素的集合,就是我们常说的K-V对。在一个集合类中可以存在相同的value值,但是不能有相同的key值,且每个key只能对应一个value

Map接口也是有许多实现类,比如HashMap等,会在之后详细叙述。

Map接口的常用方法如下:

  • containsKey(Object key)方法可以查看此Key是否有K-V映射关系,若有则返回true,反之false。
  • containsValue(Object value)方法可以查看此value是否有其映射对应的key,若有则返回true,反之false。
  • get(Object key)方法可以返回此key所对应的value值,若无映射关系则返回null。
  • put(K key, V value)方法可以创建一个K-V映射关系。
  • remove(Object key)方法可以移除一个K-V映射关系。
  • void clear()方法可以移除此映射集合中所有的K-V映射关系。
  • putAll(Map<? extends K, ? extends V> m)方法可以在某个Map映射集合中复制其所有的K-V映射关系至此Map映射集合中。
  • Set<Map.Entry<K, V>> entrySet()方法是将该映射集合以Set集合,Map.Entry<K,V>类型返回。

Map接口包含一个内部接口Map.Entry,该接口类型被定义为泛型。Map.Entry接口表示了一个实体,定义了许多方法供开发者使用。开发者利用这个接口直接获取映射集合中某个Key,某个Value的值,还可以进行Key以及Value的单独遍历。由于Map接口没有继承Iterable接口(Iterator迭代器封装接口),无法利用迭代器进行遍历,只能将其利用entrySet()方法先返回为Set集合后才能执行遍历操作。在实际开发中Map.Entry接口大多运用于Map映射集合需要遍历的情况下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值