0


【JavaSE系列】Java集合框架之Collection,Map接口

⭐️前面的话⭐️

本篇文章带大家认识Java基础知识——集合框架,从本篇文章开始正式拉开数据结构的序幕,要深入了解一件事,那必然先得见个面,本文带大家认识Java集合框长什么样,以及怎么使用Collection和Map接口。

📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2022年1月16日🌴
✉️坚持和努力一定能换来诗与远方!
💭参考书籍:📚《Java核心技术》,📚《Java编程思想》,📚《Effective Java》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


📌导航小助手📌


0


1.初见集合框架

官方文档是这么介绍集合框架的,集合框架是用于表示和操纵集合一个统一架构。所有集合框架都包含以下内容:
接口:这些是代表集合的抽象数据类型。接口允许独立于其表示的细节来操作集合。在面向对象的语言中,接口通常形成层次结构。
实现:这些是集合接口的具体实现。本质上,它们是可重用的数据结构。
算法:这些是对实现集合接口的对象执行有用计算的方法,例如搜索和排序。这些算法被称为是多态的:也就是说,相同的方法可以用于适当集合接口的许多不同实现。本质上,算法是可重用的功能。
除了 Java 集合框架,集合框架最著名的例子是 C++ 标准模板库 (STL) 和 Smalltalk 的集合层次结构。
参考链接:官方集合框架介绍

Java 集合框架

Java Collection Framework

,又被称为容器

container

,是定义在

java.util

包下的一组接口

interfaces

和其实现类

classes

。通俗说,集合框架就是由许许多多的接口,类,它们之间通过一系列的继承和扩展关系连接构建成一个“网”,称作框架。这些接口和类提供了多种组织数据的方式和方法,其中数据的组织方式就是数据结构,提供的方法包含对数据结构的增删查改和排序方法,这些方法可以由不同的算法来实现,比如说排序有冒泡,选择,插入,希尔,桶,快速,堆,计数排序算法等等。

简单来说,集合框架就是由接口,抽象类,实现类组成的,这些类和接口里面实现了数据结构。
1-1
Java中,集合框架大致如图所示:
1-2
根据这张组成图,

Iterable

接口主要用于使用增强for循环

for-each

,所以实现

Iterable

接口的数据结构可以使用

for-each

进行遍历,如

List

表示线性结构,

Queue

表示队列,

Set

表示集合,上述三种接口都扩展了这个接口,所以这几类的数据结构都是可以使用

for-each

循环的,但是

Map

接口是单独的,表示键值对,这类数据结构是不可以使用

for-each

循环的,

Collection

接口其实就是用来管理对象的,根据这张图知道该接口除了没有被键值对实现,其他的所有数据结构都实现了该接口,所以该接口是可以管理多种数据结构对象的,这些对象也被称为元素。

对于实现类,根据实现不同的接口形成了不同的数据结构,比如

ArrayList

(顺序表),

LinkedList

(链表与队列),

Stack

(栈)等等,基本上集合框架包含了大部分的数据结构,在后续博文都会一一介绍。除了这些,集合框架还提供了不少工具,比如

迭代器

比较器

等等。
1-3
Java集合框架的大致面貌就是这样,具体怎么使用及部分数据结构的实现在后续博文都会讲到。

2.Collection

前面已经了解了Java集合框架的大致面貌,相信你已经对集合有了一定的认知,趁热打铁,来学习一下框架中

Collection

的使用吧!
大多数的数据结构实现了该接口(除了键值对),那也意味着,

Collection

接口可以接受多种实现类的引用,从而

Collection

常常用来管理对象,各实现类也能够使用该接口当中的方法,但总体上

Collection

接口用的不多。
2-0

了解更多

Collection

:官方Collection说明

不准备将该接口中所有的方法都一一列举,这里就说明一些常用的方法吧!
方法说明boolean add(E e)将元素 e插入集合中void clear()删除集合中的所有元素boolean isEmpty()判断集合是否没有任何元素,俗称空集合boolean remove(Object e)如果元素 e 出现在集合中,删除其中一个int size()返回集合中的元素个数Object[] toArray()返回一个装有所有集合中元素的数组
绝大多数的数据结构都实现了

Collection

接口,这里就以

ArrayList

为例吧!

importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collection;publicclassTest{publicstaticvoidmain(String[] args){Collection<Integer> coll =newArrayList<>();//添加元素
        coll.add(115);
        coll.add(2022);
        coll.add(4848);//ArrayList有实现toString方法,因此可以使用引用名输出整个集合元素System.out.println(coll);//获取元素个数System.out.println(coll.size());//转换成数组,返回数组类型是Object[]Object[] arr = coll.toArray();System.out.println(Arrays.toString(arr));//判断并删除元素eSystem.out.println(coll.remove(4848));System.out.println(coll);//清空集合
        coll.clear();System.out.println(coll);//判断集合是否为空System.out.println(coll.isEmpty());}}

运行结果:
2-1

3.Map

Map接口能够接受键值对相关的数据结构对象的引用,这里就介绍一些常见的方法吧!
所谓键值对就是一个

key

对应一个

val

,其他部分语言称为字典。多个键值对组成的集合称为地图。
3-0

想知道更多不妨看看官方对

Map

的说明:Map官方说明

常用的方法:
方法说明V get(Object k)根据指定的 key 查找对应的 valV getOrDefault(Object k, V defaultValue)根据指定的 key 查找对应的 val,没有找到用默认值代替V put(K key, V value)将指定的 key-val 放入 Mapboolean containsKey(Object key)判断是否包含 keyboolean containsValue(Object value)判断是否包含 valueSet<Map.Entry<K, V>> entrySet()将所有键值对返回成一个集合boolean isEmpty()判断map是否为空int size()返回键值对的数量
注意,上述方法中的V,K表示泛型的意思,这里你只要知道使用泛型可以传递类型就可以了,后续博文会陆续说明泛型。
举例使用

HashMap

举例,它是使用哈希表所实现的键值对。

插入键值对——put方法

importjava.util.HashMap;importjava.util.Map;publicclassTestMap{publicstaticvoidmain(String[] args){Map<String,String> map =newHashMap<>();//插入键值对
        map.put("1024","程序员节");
        map.put("大年初一","春节");
        map.put("一月一日","元旦节");System.out.println(map);}}

3-1
我们会发现,键值对的顺序与我们插入的顺序不一致,这是因为

HashMap

是利用哈希表实现的,对

key

进行哈希映射存储到对应索引的哈希表位置上,所以插入的先后不决定键值对的储存顺序。

根据key查找val——get,getgetOrDefault(没找到使用默认值代替)

importjava.util.HashMap;importjava.util.Map;publicclassTestMap{publicstaticvoidmain(String[] args){Map<String,String> map =newHashMap<>();//插入键值对
        map.put("1024","程序员节");
        map.put("大年初一","春节");
        map.put("一月一日","元旦节");//根据key查找valSystem.out.println(map.get("1024"));System.out.println(map.getOrDefault("正月十五","元宵节"));}}

3-2
判断是否包含key或val——containsKey,containsValue

importjava.util.HashMap;importjava.util.Map;publicclassTestMap{publicstaticvoidmain(String[] args){Map<String,String> map =newHashMap<>();//插入键值对
        map.put("1024","程序员节");
        map.put("大年初一","春节");
        map.put("一月一日","元旦节");//是否包含keySystem.out.println(map.containsKey("1024"));//trueSystem.out.println(map.containsKey("正月十五"));//false//是否包含valSystem.out.println(map.containsValue("春节"));//trueSystem.out.println(map.containsValue("元宵节"));//false}}

3-3
将全部键值对转换成集合—— entrySet()

importjava.util.HashMap;importjava.util.Map;importjava.util.Set;publicclassTestMap{publicstaticvoidmain(String[] args){Map<String,String> map =newHashMap<>();//插入键值对
        map.put("1024","程序员节");
        map.put("大年初一","春节");
        map.put("一月一日","元旦节");//全部键值对转集合Set<Map.Entry<String,String>> set = map.entrySet();for(Map.Entry<String,String> kv: set){System.out.println("日期: "+ kv.getKey()+" 节日: "+ kv.getValue());}}}

3-4
获取地图中键值对个数以及判断地图是否为空——size,isEmpty

importjava.util.HashMap;importjava.util.Map;importjava.util.Set;publicclassTestMap{publicstaticvoidmain(String[] args){Map<String,String> map =newHashMap<>();//插入键值对
        map.put("1024","程序员节");
        map.put("大年初一","春节");
        map.put("一月一日","元旦节");//获取键值对数目以及判断地图是否为空System.out.println(map.size());System.out.println(map.isEmpty());}}

3-5
好了,本文到这里也该结束了,下次再见!


觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!
1-99

标签: java 后端 集合

本文转载自: https://blog.csdn.net/m0_59139260/article/details/122273690
版权归原作者 未见花闻 所有, 如有侵权,请联系我们删除。

“【JavaSE系列】Java集合框架之Collection,Map接口”的评论:

还没有评论