1.数组
数组(Array)是一种线性表结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
-
最大的特点:支持随机访问,根据下标随机访问的时间复杂度为O(1)
-
寻址:
a[i]_add = base_add + i * data_type_size
-
数组的插入和删除比较低效
- 插入:如果我们要将数据插入到数组的第K个位置,为了把第K个位置空出来,我们需要将第K~N这部分的数据全部往后挪一位,这个操作的时间复杂度是O(n)
- 删除:如果要删除第K个位置的数据,为了内存的连续性,也要将第K~N位置的数据往前挪一位,时间复杂度也是O(n)
当然,我们可以进行优化,那就是删除数据时并不立即删除,而是记录下已删除的数据。等到数组没有更多空间了,再执行一次真正的删除操作,一次性清理掉所有已删除数据。
数组Java实现
public class myArray {
private int data[];//数据
private int size;//数组大小
private int count;//数组当前大小
/**
*
* @param size
*/
public myArray(int size){
this.data = new int[size];
this.size = size;
this.count = 0;
}
/**
* 删除指定index位置值
* @param index
* @return
*/
public boolean delet(int index){
//index不合法
if(index < 0 || index > count) {
System.out.println("位置不合法!");
return false;
}
//[index+1,count)往前移动一位
for(int i = index +1 ; i < count; i++){
data[i-1] = data[i];
}
count--;
return true;
}
/**
* 将值插入所给下标处
* @param index
* @param value
* @return
*/
public boolean insert(int index, int value){
//index不合法
if(index < 0 || index > count) {
System.out.println("位置不合法!");
return false;
}
//内存空间已满
if(size == count) {
System.out.println("内存空间已满!");
return false;
}
//[index,count)后移一位
for(int i = count; i > index; i--)
data[i] = data[i-1];
data[index] = value;
count ++;
return true;
}
/**
* 将值插入数组最后面
* @param value
* @return
*/
public boolean append(int value){
//内存空间已满
if(size == count) {
System.out.println("内存空间已满!");
return false;
}
data[count++] = value;
return true;
}
/**
* 返回数组字符串
* @return
*/
public String toString(){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < count; i++)
builder.append(data[i] + ",");
return builder.toString();
}
public void arrTest(){
myArray test = new myArray(10);
test.append(1);
System.out.println(test.toString());
test.insert(1,4);
System.out.println(test.toString());
test.delet(0);
System.out.println(test.toString());
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 开发的设计和重构,为开发效率服务