首页 > 编程语言 >算法 玩转数据结构 2-6 使用泛型

算法 玩转数据结构 2-6 使用泛型

时间:2022-10-08 08:55:46浏览次数:115  
标签:int 玩转 数组 泛型 array 数据结构 data public size

0    课程地址

https://coding.imooc.com/lesson/207.html#mid=13411

 

1    重点关注

1.1    泛型改造

==转equals

详见3

 

 

2    课程内容

见3

 

3    Coding

3.1    相关coding

  • code
package com.company;

import java.util.Arrays;

public class ArrayFan<E> {
    private int size;
    //int类型的数组
    private E[] data;


    //1.1  创建构造函数,传入容量,则新生成一个数组
    public ArrayFan(int capacity){
        data = (E[]) new Object[capacity];
        size = 0;
    }

    //1.2  创建无参构造函数
    public ArrayFan(){
        this(10);
    }

    //1.3  添加传入静态数组的构造函数
    public ArrayFan(E[] param){
        this.data = param;
        long outParm = Arrays.stream(param).filter(e->{
            return e!=null;
        }).count();
        this.size = (int)outParm;
    }

    //2.1  添加getSize,获取数组元素个数
    public int getSize(){
        return size;
    }

    //2.2  添加getCapacity,获取数组容量
    public int getCapacity(){
        return data.length;
    }

    //todo
    //2.3  添加数组是否为空方法
    public boolean isEmpty(){
        return size==0;
    }

    //3.1  在数组末尾添加元素
    public void addLast(E e){
        addElement(size,e);
    }

    //3.2  在数组起始添加元素
    public void addFirst(E e){
        addElement(0,e);
    }

    //3.3  数组根据索引添加元素
    public void addElement(int index,E e){
        //1     校验异常
        //1.1   如果数组已经满了,则禁止插入
        if(size== data.length){
            throw new IllegalArgumentException("数组已满,禁止插入");
        }

        //1.2   如果传入的索引在已有数组的索引之外,则校验异常
        if(index<0||index>size){
            throw new IllegalArgumentException("索引应在已有数组的索引之间");
        }

        //2     实现根据索引添加元素的逻辑
        //2.1   data同步
        for(int j = size-1;j>=index;j--){
            data[j+1] = data[j];
        }
        data[index] = e;

        //2.2   size同步
        size++;
    }

    //4.1     数组 toString 范例
    @Override
    public String toString() {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(String.format("Array:size = %d,capacity = %d\n",size,data.length));

        stringBuffer.append("[");
        for(int i=0;i<size;i++){
            stringBuffer.append(data[i]);
            if(i!=size-1){
                stringBuffer.append(",");
            }
        }
        stringBuffer.append("]");
        return stringBuffer.toString();
    }

    //4.2     get获取元素
    public E get(int index){
        if(index<0||index>data.length){
            throw new IllegalArgumentException("111");
        }
        return data[index];
    }

    //4.3       set获取元素
    public void set(int index,E e){
        if(index<0||index>data.length){
            throw new IllegalArgumentException("111");
        }
        data[index] = e;
    }

    //5.1     数组包含
    public boolean contails(E e){
        for(int i = 0;i<size;i++){
            if(e.equals(data[i])){
                return true;
            }
        }
        return false;
    }

    //5.2     数组搜索
    public int search(E e){
        for(int i = 0;i<size;i++){
            if(e.equals(data[i])){
                return i;
            }
        }
        return -1;
    }

    //5.3     数组删除,通常情况下做删除,会在出参把删除的值带出来
    public E remove(int index){
        if(index<0||index>=size){
            throw new IllegalArgumentException("111");
        }
        E outParm = data[index];
        for(int i=index;i<size-1;i++){
            data[i] = data[i+1];
        }
        //这块不塞值也没有任何影响,因为size已经--了,不会访问到size之外的元素
        data[size-1]= null;
        size--;
        return outParm;
    }

    //5.4       删除首个元素
    public E removFirst(){
        return remove(0);
    }

    //5.5       删除最后的元素
    public E removLast(){
        return remove(size-1);
    }

    //5.6       删除指定的元素
    public void removElement(E e){
        int index = -1;
        //判断删除的元素是否存在
        for(int i=0;i<size;i++){
            if(e.equals(data[i])){
                index = i;
                break;
            }
        }
        if(index>=0){
            remove(index);
        }else{
            throw new IllegalArgumentException("删除的元素未找到");
        }
    }


}

 

  • 测试
    public static void main(String[] args) {
    
            ArrayFan<Integer> array = new ArrayFan<>(20);
            array.addFirst(1);
            array.addElement(1,2);
            array.addElement(0,3);
            array.addLast(7);
    
            System.out.println(array.contails(7));
            System.out.println(array.contails(8));
    
            System.out.println(array.search(4));
            System.out.println(array.search(8));
    
            System.out.println(array.remove(1));
            System.out.println(array);
            System.out.println(array.removFirst());
            System.out.println(array);
            System.out.println(array.removLast());
            System.out.println(array);
    
    
        }

     

标签:int,玩转,数组,泛型,array,数据结构,data,public,size
From: https://www.cnblogs.com/1446358788-qq/p/16767883.html

相关文章

  • C#委托总结 普通委托、泛型委托、匿名委托
     一、概念委托的本质也是一种类型,类似于Class这样。作用是将一个方法作为参数传递给另一个方法,关键字是delegate 二、委托的定义使用步骤第一步声明委托:publicdel......
  • 数据结构和算法介绍
     1.什么是数据结构和算法呢?   2.什么是数据结构   图书摆放规则  常见的数据结构     3.什么是算法?     补充 ......
  • JS数据结构与算法
     1.重要性什么是数据结构?数据结构和算法的重要性 2.线性结构2.1数组数组使用的API 2.2栈自定义栈栈的应用 2.3队列自定义队列优先级队列队列的应......
  • 数据结构-线性表
    ​@目录XDOJ0258-链表去重XDOJ0263-递增链表的插入XDOJ0264-反转链表XDOJ0276-多项式加减法XDOJ0278-约瑟夫环XDOJ0279-一元稀疏多项式计算器最后最近懒,栈和队列找机会发......
  • 数据结构算法目录
    目录数据结构ConventionalAlgorithm数据结构线性表列表链表跳跃表[1]并查集栈与队列栈队列优先队列、堆多级反馈队列??Hash表碰撞解决......
  • 从0到1掌握Java全栈小程序开发,玩转微信生态
    从0到1掌握Java全栈小程序开发,玩转微信生态Java :Java基础JDBC基础Java集合Java多线程系列JUC系列JavaIO基础JavaCore:Java虚拟机系列JVM虚拟机监控及性能......
  • 数据结构-平衡二叉树的基本旋转
    1、AVL树(平衡二叉树)的定义平衡二叉树 全称叫做 平衡二叉搜索(排序)树,简称AVL树。英文:BalancedBinaryTree(BBT),注:二叉查找树(BST)AVL什么意思?AVL是大学教授G.M.A......
  • Java泛型
    Java泛型本文源自https://www.yuque.com/qingkongxiaguang/javase/syy4rz#29e0f372欢迎大家去看b站这个Up主的Java视频https://www.bilibili.com/video/BV1Gv411T7pi?p=......
  • [oeasy]教您玩转python - 0005- 勇闯地下城
    继续运行......
  • [oeasy]教您玩转python - 0005- 勇闯地下城
     ​ 继续运行......