2021春软件构造lab1-小结

2024-04-17 13:32
文章标签 软件 构造 小结 2021 lab1

本文主要是介绍2021春软件构造lab1-小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 前言
  • 常见接口的具体实现及相关分析
    • List接口
    • Stack类
    • Queue接口
    • 小结
    • Map接口
    • Set接口

前言

在完成lab1时,为了保证程序的健壮性,利用了java语言提供的强大的可变长数组接口List,以及在BFS中使用了队列这一常见数据结构,队列在java中也被声明为接口。在编码过程中,对接口的具体实现不熟练,下对接口的具体实现做出相关总结。

常见接口的具体实现及相关分析

List接口

常用方法如下图所示:
list常用方法
大部分方法可以见名知义。
List接口有两种流行的实现方式:

  1. ArrayList:是一种可变长数组实现,优点:get和set花费常数时间;缺点:增删代价昂贵,需要移动整个数组。
  2. LinkedList:是一种链表实现,优点:在增删的位置已知的情况下,代价很小;缺点:get的调用是昂贵的。LinkedList提供addFirst、removeLast等方法,有效增删。

Stack类

Stack在java中没有声明特定接口,常用方法如下图所示:
stack方法

  1. Stack本身是一个受限链表,故可以采用LinkedList实现,只针对表头元素进行操作即等价为栈,应声明为Deque接口,接口中有特定的栈方法,这是java文档中推荐的stack实现方式。声明方式如下:
	Deque<Integer> stack = new LinkedList<>();stack.push(1);stack.poll();
  1. Java中有stack类,基于Vector实现,直接调用即可。

Queue接口

队列的常用方法如下图所示:
队列方法

其中,poll为出队,offer为入队。
常用实现方法:

  1. 同理,队列也是受限列表,也可用LinkedList实现。可声明为Queue接口,也可声明为Deque接口,Deque接口实现了Queue接口,为双端队列。
  2. 另一种队列的实现方法也可以用数组实现,实现类为ArrayDeque,其实是双端队列的一个实现类。
    具体声明方法如下:
	public static void main(String[] args) {// TODO Auto-generated method stubDeque<Integer> q1 = new LinkedList<>();q1.offer(5);Deque<Integer> q2 = new ArrayDeque<>();q2.offer(6);} 

小结

至此可以发现,LinkedList类的实现是十分强大的,它除了实现基本的List接口外,还实现了Deque接口,也实现了Deque接口内的栈方法。

Map接口

Map是键值对的集合,与python中的字典类似。Map的常见方法如下图所示:
map方法
常用的方法有:get-取对应key的值,keySet-遍历Map用,put-插入键值对
java类库中提供一些实现类,如下:

  1. HashMap
    使用位桶和链表实现(jdk1.8后改用红黑树存储而非链表)
  2. TreeMap
    TreeMap会对Key进行排序,使用TreeMap存储,再使用iterator进行输出时,会发现其默认采用key由小到大的顺序输出键值对,如果想要按照其他的方式来排序,override 它的compartor接口。底层结构是红黑树,一种特殊的平衡二叉树。
  3. LinkedHashMap
    LinkedHashMap底层用的是双向链表与Hash表来进行的存储。相对于其他的无序的map实现类,还有像TreeMap这样的排序类,linkedHashMap最大的特点在于有序,但是它的有序主要体现在先进先出FIFIO上。
    实现示意图如下图所示:
    结构示意

Set接口

Set映射到数学上的集合,即无重复元素的一组元素。概念并不陌生。
Set的常见方法如下图所示:
Set方法

而java为Set提供了三种具体的实现类,我们应根据具体场景进行效率分析而选用哪一个实现类,总结如下:如你的需求是要一个能快速访问的Set,那么就要用HashSet,如果你要一个排序Set,那么你应该用TreeSet,如果你要记录下插入时的顺序时,你应该使用LinkedHashSet。
4. HashSet
HashSet的底层实现是Hash算法。在一个对象要被添加到集合中的时候,会被系统分配一个哈希值,系统首先会根据这个对象的哈希值去和集合中的对象去比较,如果哈希值不同就可以加入,如果相同,就去比较两个字符串的值是否一样,如果一样就不能加入,因此把重复的对象是无法加入HashSet的。
5. TreeSet
TreeSet的底层实现是二叉树,因此在实现集合接口的基础上,它还利于排序
6. LinkedHashSet
在HashSet的基础上,还能记录插入顺序。
下面给出相关实现的一些实例代码:

	public static void main(String[] args) {// TODO Auto-generated method stubSet<Integer> s1 = new HashSet<>();Set<Integer> s2 = new TreeSet<>();Set<Integer> s3 = new LinkedHashSet<>();s1.add(5);s1.add(2);s1.add(5);System.out.println(s1);} 
//结果为[2,5],符合集合定义。

这篇关于2021春软件构造lab1-小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911930

相关文章

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹