public class MyArrayList {

private int[] array;   //代表的是存在数据的数组

//array.length代表的是数组的容量

private int size;        //记录顺序表的已有数据个数

//构造方法

public MyArrayList() {

//1.申请空间

array = new int[2];

//2.初始化数据个数

size = 0;

}

//增(重点)

//尾插  平均O(1)

public void pushBack(int element) {

ensureCapacity();//扩容

array[size++] = element;

}

//头插

public void pushFront(int element) {

ensureCapacity();//扩容

for(int i = size;i>=1;i--)

{

array[i]=array[i-1];

}

array[0]=element;

size++;

}

//中间任一节点插入

public void insert(int index, int element){

if(index<0 || index>size)

{

System.err.println("插入失败");

return;

}

ensureCapacity();//扩容

for(int i = size - 1;i>=index;i--)

{

array[i+1]=array[i];

}

array[index]=element;

size++;

}

//删(重点)

//尾删

public void popBack() {

if(size<=0)

{

System.err.println("顺序表为空,无法删除");

return;

}

array[--size]=0;

}

//头删

public void popFront() {

if(size<=0)

{

System.err.println("顺序表为空,无法删除");

return;

}

for(int i=0;i<=size-2;i++)

{

array[i]=array[i+1];

}

array[--size]=0;

}

//中间删

public void earse(int index) {

if(size<=0)

{

System.err.println("顺序表为空,无法删除");

return;

}

if(index<0 || index>=size)

{

System.err.println("删除失败");

return;

}

for(int i=index+1;i<=size-1;i++)

{

array[i-1]=array[i];

}

array[--size]=0;

}

//返回·element在顺序表中的下标,如果出现多次,返回第一个下标

public  int indexOf(int element) {

for(int i = 0 ; i{

if(array[i]==element)

{

return i;

}

}

return -1;

}

//拿到下标,返回值

public int get(int index) {

if(index<0||index>=size)

{

System.out.println("无法找到下标");

return -1;

}

return array[index];

}

//修改数值

public void set(int index,int element) {

if(index<0||index>=size)

{

System.out.println("无法找到下标");

return ;

}

array[index]=element;

}

//删除掉某一个元素,如果出现多次,删除第一个出现的

public void remove(int element) {

int index = indexOf(element);

if(index != -1)

{

earse(index);

}

}

public int size() {

return size;

}

public boolean isEmpty() {

return size == 0;

}

//删除所有相同的元素

public void removeAll(int element) {

/*

时间:O(n^2)     空间:O(1)

int index;

while((index=indexOf(element))!=-1)

{

earse(index);

}

时间:O(n)      空间:O(n)

int[] newArray = new int[array.length];

int j = 0;

for(int i = 0;i{

if(array[i]!=element)

{

newArray[j++]=array[i];

}

}

array = newArray;

size = j;

*/

//时间:O(n)          空间:O(1)

int j = 0;

for(int i = 0;i{

if(array[i]!=element)

{

array[j++]=array[i];

}

}

size = j;

}

//打印

public void print() {

System.out.println("打印顺序表:当前容量为:"+array.length);

for(int i = 0;i{

System.out.println(array[i]+" ");

}

System.out.println();

}

//扩容

public void ensureCapacity() {

if(size{

return;

}

int newCapacity = array.length*2;

int[] newArray = new int[newCapacity];

for(int i = 0;i{

newArray[i] = array[i];

}

array = newArray;

}

public static void main(String[] args){

MyArrayList list = new MyArrayList();

list.print();

list.pushBack(1);

list.pushBack(2);

list.pushBack(3);

list.print();//1,2,3

list.pushFront(10);

list.pushFront(20);

list.pushFront(30);

list.print();//30,20,10,1,2,3

list.insert(3,100);

list.print();//30,20,10,100,1,2,3

list.insert(20,200);//报错

list.earse(2);

list.earse(2);

list.print();//30,20,1,2,3

list.popFront();

list.popFront();

list.popFront();

list.print();//2,3

list.popBack();

list.popBack();

list.print();//空

list.popBack();//报错

list.pushBack(1);

list.pushBack(2);

list.pushBack(1);

list.print();//1  2  1

System.out.println(list.indexOf(1));

list.set(1,1);

list.print();// 1 1 1

list.remove(1);

list.print();// 1 1

list.pushBack(1);

list.print();// 1 1 1

list.removeAll(1);

list.print();// 空

}

}

java顺序表增删查改_Java实现顺序表的增删改查相关推荐

  1. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  2. Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例(增删改查排序之选择指定列、根据条件选择特定数据、赋值、列名重命名、修改列数据、处理缺失值、列合并、分组之详细攻略

    Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例(增删改查排序之选择指定列.根据条件选择特定数据.赋值.列名重命名.修改列数据.处理缺失值.列合并.分组之详细攻略 ...

  3. java list集合增删改_Java中集合类list的增删改查

    今天给大家带来的是Java中list类的使用,java.util 包提供了list类来对线性数据操作 List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类 ...

  4. java三年工作经验工资_工作三年还是只会增删改查,Java 程序员如何进阶?

    大部分的企业级应用从本质上看,都是在做增删查改,但是有些公司的业务复杂而专业,有些公司应用的在线用户很多,你做的增删查改和别人做的增删查改,可能会有极大的区别,举个例子: 你做一个新闻资讯网站,首页上 ...

  5. java调用oracle删除,使用IDEA对Oracle数据库进行简单增删改查操作

    1.1 java中的数据存储技术 在java中,数据库存取技术可分为如下几类: 1.jdbc直接访问数据库 2.jdo(java data object)是java对象持久化的新的规范,也是一个用于存 ...

  6. mysql php 增删数据,php学习之mysql数据的增删改查

    1.插入数据 语句:insert into 表名 [(字段1,字段2,字段3,-.)] values (值1,值2,值3,-); 单行插入数据 省略字段名,这种写法后面的值必须要完整,有多少字段就要插 ...

  7. java数据库edit_Java数据库连接——JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  8. android增删功能代码,Android Studio开发实战 之 增删改查

    增删改查是一个应用最基础的操作,增删改查的流程走通了,下面的路程也就顺利多了.现在使用Android Studio开发一个简单的应用,该应用就实现了增删改查的操作,看似简单,到底简不简单呢,下面开始操 ...

  9. 【SpringBoot集成ElasticSearch 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(配置+增删改查测试源码)【推荐使用】

    1.简介 SpringBoot 项目初始化时就有 NoSQL 选项 Spring Data Elasticsearch(Access+Driver) 此时 pom 文件里引入的依赖是 spring-b ...

  10. java servlet dao_Java+MyEclipse+Tomcat 详解Servlet和DAO数据库增删改查操作(源码)

    [实例简介] 该资源主要参考自己的博客http://blog.csdn.net/eastmount/article/details/45936121 讲诉Java+MyEclipse+Tomcat 详 ...

最新文章

  1. 计算机游戏的产生,孩子容易沉迷计算机游戏,原来是因为过程中产生“心流”经验?...
  2. 网络嗅探混杂模式与非混杂模式的区别
  3. 转:WinForm程序中两份mdf文件问题的解决方法
  4. 精彩回顾 | Apache Flink x Iceberg Meetup · 上海站
  5. TypeScript class 构造函数和成员的初始化顺序
  6. JS遍历数组的12种方法
  7. Kong 开源的的服务网格Kuma爬过了K8S这座大山
  8. VC++连接wifi功能(有密码)源代码
  9. [高通SDM450][Android9.0]CTA认证--拆分申请权限分组
  10. 2021年度排第一名的微信段子,笑晕了,太经典
  11. linux音频子系统 - pcm设备
  12. 统计指标 ---离散趋势指标
  13. win10 的计算机配置要求,win10的最低要求配置是什么_windows10系统最低电脑配置要求多少...
  14. 王者服务器维护7月九号,6月9日体验服停机更新公告
  15. Rational Rose 建立图书管理系统模型UML
  16. 经典论文翻译导读之《A Bloat-Aware Design for Big Data Applications》
  17. Pygraphviz安装失败应该怎么办?
  18. js以15分钟为单位分割间隔时间
  19. python双除号_你见过的最全面的 Python 重点
  20. 米家骑记电助力折叠自行车,看看里面的电子方案

热门文章

  1. 谈一下对c语言程序设计,谈《C语言程序设计》课程教学.doc
  2. adb server version (31) doesn't match this client (40); killing...
  3. wirkshark过滤规则
  4. 面向对象设计模式之策略模式
  5. 在 Windows Azure 上部署预配置 Oracle VM
  6. easyui layout 收缩的bug
  7. Linux文件系统性能测试工具fdtree和iozone
  8. Java学科课程大纲
  9. C语言课后习题(13)
  10. PAT乙级(1018 锤子剪刀布)