zoukankan      html  css  js  c++  java
  • 1.用数组的方式实现列表

    步骤:  

        第一步:先定义一个列表的接口,在接口里面定义关于列表的增删改查相关方法

    public interface MyList {
        //新增一个元素
        void add(Object element);
        //删除相同元素
        void delete (Object element);
        //根据索引删除元素
        void delete (int index);
        //将指定索引位置的元素替换成新元素
        void update (int index ,Object newElement);
        //当前列表中是否含有target这个元素
        boolean  contains (Object target);
        //返回指定索引出的元素
        Object  at(int index);
        //查找element的索引,如果没有返回-1
        int  indexOf(Object e);
    }

         第二步:创建一个MyArrayList类,实现MyList接口的方法(实现接口的时候,需要对里面的方法进行方法重写)

    /**
     * 用顺序存储(数组)方式来实现列表
     * **/
    public class MyArrayList implements MyList {
        private  Object[] elements; //真正存储元素的底层结构
        private  int size=0;    //元素的个数 //也可以指向空的位置
        private  int capacity=10;//容量
        //用户来指定容量
        public MyArrayList(int capacity) {
            this.capacity = capacity;
            elements = new Object[capacity];
        }
        //可以使用默认值容量
        public MyArrayList() {
            elements = new Object[capacity];
        }
    //增加元素方法的实现 @Override
    public void add(Object element) { if(size==capacity){ //扩容 capacity*=2;//增加一倍的容量 Object[] newArray = new Object[capacity];//新建一个数组 for(int i=0;i<size;i++){ newArray[i]=elements[i]; } elements = newArray; } elements[size]=element; //将需要存的元素添加到列表中 size++; }
    //删除元素方法的实现 @Override
    public void delete(Object element) { int index=indexOf(element); if(index>=0){ delete(index); }else{ System.out.println("删除失败"); } } @Override public void delete(int index) { for (int i = index; i <size ; i++) { elements[i]=elements[i+1]; } elements[elements.length-1]=null; size--; }
    //修改元素方法的实现 @Override
    public void update(int index, Object newElement) { elements[index]=newElement; } //查找元素方法的实现 @Override public boolean contains(Object target) { return indexOf(target)>=0; } @Override public Object at(int index) { return elements[index]; } @Override public int indexOf(Object e) { for (int i = 0; i <size; i++) { if (elements[i].equals(e)){ return i; } } return -1; } @Override public String toString() { StringBuilder sb = new StringBuilder("["); for(int i=0;i<size;i++){ sb.append(elements[i]+(i==size-1?"":",")); } sb.append("]"); return sb.toString(); } }

         第三步:对MyArrayList进行测试

    public class test {
    
        public static void main(String[] args) {
            MyArrayList list = new MyArrayList();
            System.out.println("-----增加元素测试-----");
            list.add("nike");
            list.add("addids");
            list.add("NB");
            list.add("NB");
            System.out.println(list);
            System.out.println("-----删除元素测试-----");
            list.delete(1);
            System.out.println("删除addids后输出:"+list);
            list.delete("NB");
            System.out.println("删除NB后输出:"+list);
            System.out.println("-----更改测试-----");
            list.update(1,"syx");
            System.out.println("更改scy为syx"+list);
            System.out.println("-----查找测试-----");
            boolean b=list.contains("nike");
            System.out.println("查找是否有nike  "+b);
            int index=list.indexOf("syx");
            System.out.println("查找syx的位置   "+index);
            Object a=list.at(0);
            System.out.println("查找第一个元素Nike   "+a);
        }

         第四步:测试结果

     

  • 相关阅读:
    Managing C++ Objects: 管理C++对象 —— 一些建议准则
    像Java一样管理对象:T&形式仅仅用在参数传递
    Visual Studio的语法着色终于调得赏心悦目
    j.u.c: Java并发包的5大块
    笔记:Java Language Specification
    线程与锁
    分布式系统涉及的基本问题
    微服务为什么是一种趋势
    js实现复制功能
    css label两端对齐
  • 原文地址:https://www.cnblogs.com/songchengyu/p/12968343.html
Copyright © 2011-2022 走看看