数据结构-增强数据的功能

这里是修真院后端小课堂,每篇分享文从

八个方面深度解析后端知识/技能,本篇分享的是:

【数据结构-增强数据的功能】

【修真院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)参考文献

【参考一】https://blog.csdn.net/boss_way/article/details/78358615

(8)更多讨论

Q1:基于数组的数据结构常见的有哪些?

A1:java中以数组为基础的最常见就是ArrayList了,一般查询操作比较频繁,并且元素可重复,并且不需要以key-value形式存储的,都会选择用ArrayList存储数据。

Q2:什么时候适合用数组

A2:当索引是有意义的,比如一个班的学生,学号是对应一个学生(当然学号不能太大,比如1,2,3…)这时候用数组比较适合。

Q3:除了数组这种线性数据结构,还有哪些线性的数据结构?

A3:另外还有链表,栈,队列。

(9)鸣谢

(10)结束语

今天的分享就到这里啦,欢迎大家点赞、留言、转发、抛砖~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值