赞
踩
作者:敲代码の流川枫
博客主页:流川枫的博客
专栏:和我一起学java
语录:Stay hungry stay foolish
工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网
文章目录
顺序表是用一段物理地址连续的,存储单元依次存储数据的线性结构。是在数组上完成数据的增删查改
接下来我们自己实现一些接口对数组进行增删查改的操作
创建一个类:
- public class MyArrayList {
- public int[] elem;//数组
- public int usedSize;//记录有效数据的个数
- public static final int DEFAULT_SIZE = 10;
- public MyArrayList(int[] elem){
- this.elem = new int[DEFAULT_SIZE];
- }
- public int size() {
- return this.usedSize;
- }
- public void disPlay(){
- for (int i = 0; i < this.usedSize; i++) {
- System.out.println(this.elem[i]+" ");
- }
- System.out.println();
- }
步骤:检查当前顺序表是否满了;如果满了进行扩容;然后将元素放进去;usedSize++;
判满:
- public boolean isFull(int[] elem){
- if(size()>=this.usedSize){
- return true;
- }
- else return false;
- }
扩容:
- public void add(int data){
- if(isFull()){
- this.elem =
- Arrays.copyOf(this.elem,2*this.elem.length);
- }
- //添加数据
- this.elem[this.usedSize] = data;
- //有效数据加一
- this.usedSize++;
-
- }
测试:
- public class TestList {
- public static void main(String[] args) {
- MyArrayList myArrayList = new MyArrayList();
- myArrayList.add(1);
- myArrayList.add(2);
- myArrayList.add(3);
- myArrayList.disPlay();
- }
- }
注意:负数下标不能当Pos;不能超过数组长度插入;不能间隔着插入,即插入的位置前面一定有元素;
还是先判断数组是否满,满了扩容;然后判断pos位置是否合法;不合法抛出异常;插入后将其他元素后移
- public void add(int pos, int data) {
- if(isFull()){
- System.out.println("满了");
- this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
- }
- if(pos<0||pos>this.usedSize){
- System.out.println("pos位置不合法");
- throw new PosworongfulException("pos位置不合法");
- }
- //pos一定合法
- // 挪动数据
- for (int i = this.usedSize-1; i>=pos ; i--) {
- this.elem[i+1] = this.elem[i];
- }
- //插入数据
- this.elem[pos] = data;
- //usedSize++
- this.usedSize++;
- }
添加10到1位置
- try {
- myArrayList.add(1,10);
- }
- catch (PosworongfulException e){
- e.printStackTrace();
- }
- myArrayList.disPlay();
在10位置添加数据
- try {
- myArrayList.add(10,10);
- }
- catch (PosworongfulException e){
- e.printStackTrace();
- }
- myArrayList.disPlay();
- public boolean contains(int toFind) {
- for (int i = 0; i < this.size(); i++) {
- if(elem[i]==toFind){
- return true;
- }
- }
- return false;
- }
-
- System.out.println("-------------");
- System.out.println(myArrayList.contains(10));
- System.out.println(myArrayList.contains(100));
- public int indexOf(int toFind) {
- for (int i = 0; i < this.size(); i++) {
- if(this.elem[i]==toFind){
- return i;
- }
- }
- return -1;
- }
- System.out.println("-------------");
- System.out.println(myArrayList.indexOf(3));
- //判断为空
- public boolean isEmpty(){
- return size()==0;
- }
- // 获取 pos 位置的元素
- public int get(int pos) {
- if(isEmpty()){
- throw new EmptyException("当前顺序表为空");
- }
- if(pos<0||pos>=this.usedSize){
- throw new PosworongfulException("pos位置不合法");
- }
- return this.elem[pos];
- }
- System.out.println("------------");
- System.out.println(myArrayList.get(0));
- try {
- myArrayList.get(10);
- }catch (PosworongfulException e){
- e.printStackTrace();
- }
- public void set(int pos, int value) {
- if(isEmpty()){
- throw new EmptyException("顺序表为空");
- }
- if(pos<0||pos>=this.usedSize){
- throw new PosworongfulException("pos位置不合法");
- }
- this.elem[pos] = value;
-
- }
- System.out.println("---------");
- myArrayList.set(0,100);
- myArrayList.disPlay();
空表没有key
先找到key,找到下标
挪动数据
usedSize--
- public void remove(int key) {
- if(isEmpty()){
- throw new EmptyException("顺序表为空");
- }
- int index = this.indexOf(key);
- if(index==-1){
- System.out.println("没有这个数字");
- }
- for (int i = index; i < size()-1; i++) {
- this.elem[i] = this.elem[i+1];
- }
- this.usedSize--;
- }
- System.out.println("---------");
- myArrayList.remove(3);
- myArrayList.disPlay();
此处顺序表元素不是引用类型,可直接将usedSize变为0来清空顺序表,如果是引用类型,则必须全部置空,否则会造成内存泄漏,空间无法回收
- public void clear() {
- this.usedSize = 0;
- }
“ 本期的分享就到这里了, 记得给博主一个三连哈,你的支持是我创作的最大动力!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。