数组列表

1.概念

1.数组

(1)属性: 长度

(2)方法:有 object的方法

(3)性质:简单,不好用。int[] arr(声明的类型也需要确定)。

​ arr=new int[100],一旦声明长度,内存空间分配就固定了。
​ arr[100]=10

​ 操作存取都需要下标 数据具有极大的风险。
​ 越界:操作 取 数组下标范围之外内容
​ 内存溢出: 内存不够了 – 栈 堆

2.数组列表

可以自动管理下标,自动扩容 ,排序 ,合并,增删查改去重合并 。
MyList:先写个接口 List

方法: 增 删 查 改 排序

类 - MyList :

属性:存储结构 长度 size 下标(默认的参数 )

初始化构造: 根据传入的长度来初始化
根据传入数组来初始化
根据传入的链表来初始化
空参数构造方法 初始化
– 注意:不要相信任何一个使用你代码的人
– 提防传入的参数的合法性

2.增删查改,排序原理及代码

public void add(E key){         //key添加到E类型数组,key为E类型
        if(size>=length){
            //扩容;
            length = length*2;
            Object[] array_2 = new Object[length];       //创建辅助数组
            for(int i=0; i<size; i++){
                array_2[i] = array[i];
            }
            array = array_2;   //把辅助数组地址赋值(传)给本数组
            array_2 = null;    //释放辅助数组地址
            array[size++] = key;         //E类型可以转化为object类型,object不可以转化为E类型


            }
        else{
            array[size++] = key;
        }
    }

    public E get(int index){
        E e =(E)array[index];        //object类型强转为E类型
        return e;
    }



    public void remove_index(int k){
        index = k;
//        System.out.println("array[k]="+array[k]);
        for(int i=index; i<size-1; i++){
            array[i] = array[i+1];
        }
        size--;

    }

    public void remove_val(int key){
        for(int i=0; i<size; i++){
            if(array[i].equals(key)){
                remove_index(i);
            }
        }

    }

    public void change_index(int k, int val){
        index = k;
        array[k] = val;
        System.out.println("下标"+index+"处的值为"+array[k]);
        System.out.println("下标"+index+"处的值为"+array[k]);

    }

    public void change_val(int key, int val){
        for(int i=0; i<size; i++){
            if(array[i].equals(key)){
                array[i] = val;
            }
        }
    }

    public void search_index(int k){
        index = k;
        System.out.println("数组中下标为"+k+"的元素"+array[index]);

    }
    public void search_val(E key){
        MyArrayList indArray = new MyArrayList();  //创建数组列表长度可改变,
        for(int i=0; i<size; i++){
           if(array[i]==key){                   //对象间不能==,只能equals
               indArray.add(i);
           }
       }
        for(int i=0; i<indArray.size; i++){
            System.out.println(indArray.array[i]);
        }


//        System.out.println(Arrays.toString(indArray.array));

    }

    //object对象间的比较,排序
    public void sort(){
        for(int i=0; i<size; i++){
            boolean flag = false;
            for(int j=size-1; j>i; j--){
//                System.out.println("array[j].hashCode()"+array[j].hashCode()+"array[i].hashCode()"+array[i].hashCode());
                if(array[j].hashCode()<array[j-1].hashCode()) {
                    Object temp = array[j];
                    array[j]=array[j-1];
                    array[j-1]=temp;
                }
                flag=true;
            }
            if(flag=false)
                return;
        }
        for(int i=0; i<size; i++){
            System.out.println(array[i]);
        }

//        System.out.println("Arrays.sort(array);"+Arrays.toString(array));
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值