这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【数据结构-增强数据的功能】
【修真院java小课堂】数据结构-增强数据的功能
大家好,我是IT修真院深圳分院第12期的学员,一枚正直纯洁善良的java程序员,今天给大家分享一下,修真院官网java任务10,拓展的内容-数据结构之增强数组。
(1)背景介绍
程序=数据结构+算法,都说不会数据结构跟算法的软件工程师不是好的程序员,数组作为数据结构中很基础的一种,学习跟跟深入了解非常有必要。今天的小课堂以数组为基础,将数组封装起来,给其添加增删改查和扩容等功能。
(2)知识剖析
a)数组的特点
数组的长度一旦定义则不能改变
数组中的元素都有整数索引
数组只能存储同一类型的元素
数组即可以存储基本数据类型,又可以存储引用数据类型
b)数组的优缺点
由于数组每个元素都是有索引的,所以访问数组的任一元素是非常快的,复杂度为O(1)级别,但是往数组任意一个位置插入数据则不方便,因为每次插入一个元素,后面的元素就要往后挪动一位。时间复杂度为O(n),因此如果需求是频繁地查询比较适合用数组。
c)改进数组
可以给数组加上自动扩容地功能。
(3)常见问题
数组和链表的比较?
(4)解决方案
获取结点:只能遍历链表,然后一个一个查看
添加结点(在结点2后面添加一个结点9):
把结点2的下一个结点地址值修改为新结点9的地址值,把新结点9的下一个地址值改为结点3的地址值
链表特点:查询慢,增删快;
(5)编码实战
5.1将数组封装起来
这里要说明下是使用了泛型,也就是往这个自定义的数组容器中放任何东西。(除了基本类型?)
com.ch0918.arrayArray<> { [] (capacity) { = ([])Object[capacity]= } () { ()} }
给数组添加新功能,例如得到数组的大小,数组的容量,判断数组是否为空。//得到数组的大小
() { } () { .} () { == }
往数组里新增元素,特别注意这里是做了自动扩容处理的,当数组里的元素达到数组的长度是,就将数组的容量扩大到数组原来的两倍。
(e) { addElement(e)} (indexe) { (index < || index > ) { IllegalArgumentException()} (== .) { resize(* .)} [index] = e++}(e) {
addElement(e)}
修改数组的某个位置的元素
(indexe) { (index < || index > ) { IllegalArgumentException()} [index] = e}
查找数组
(e) { (i =i < i++) { ([i] == e) { System..println([i])} } }(e) {
(i = i < i++) {
([i] == e) {
i}
}
-}
删除数组
(index) { (index < || index > -) { IllegalArgumentException()} (< ./){ resize(./)} temp = [index](i = indexi < i++) { [i] = [i+]} --temp} () { removeElementAt()} () { removeElementAt(-)} (e) { elementIndex = findElementIndex(e)(elementIndex != -){ removeElementAt(elementIndex)}{ IllegalArgumentException()} }
扩容的方法
(capacity) { Array<> newArray = Array<>(capacity)System.(newArray.)= newArray.}
(6)拓展思考
(7)参考文献
(8)更多讨论
Q1:基于数组的数据结构常见的有哪些?
A1:java中以数组为基础的最常见就是ArrayList了,一般查询操作比较频繁,并且元素可重复,并且不需要以key-value形式存储的,都会选择用ArrayList存储数据。
Q2:什么时候适合用数组
A2:当索引是有意义的,比如一个班的学生,学号是对应一个学生(当然学号不能太大,比如1,2,3...)这时候用数组比较适合。
Q3:除了数组这种线性数据结构,还有哪些线性的数据结构?
A3:另外还有链表,栈,队列。
(9)鸣谢
(10)结束语
今天的分享就到这里啦,欢迎大家点赞、留言、转发、抛砖~
更多内容,可以加入IT交流群565734203与大家一起讨论交流
这里是技能树·IT修真院:,初学者转行到互联网的聚集地
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。