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

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

gorm乐观锁使用小结

《gorm乐观锁使用小结》本文主要介绍了gorm乐观锁使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言grom乐观锁机制gorm乐观锁依赖安装gorm乐观锁使用创建一个user表插入数据版本号更新总结前言乐观锁,顾名