zoukankan      html  css  js  c++  java
  • JAVA数据结构--Array数组实现

    所谓数组,是有序的元素序列。 [1]  若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 [1]  这些无序排列的同类数据元素的集合称为数组。

      平常使用Java中的数组,数组是最基础的一种数据结构

    int[] nums=new int[5];
    

      定义数组以及数组的构造函数如下

    public class Array<E> {
        private E[] data;
        private int size;
        /*
        *
        * @param 传入数组的容量capacity构造array
        * */
        public Array(int capacity){
            data=(E[])new Object[capacity];
            size=0;
        }
        /*
        * 无参数的构造函数,默认数组的容量是capacity=10
        * */
        public Array(){
            this(10);
        }
    }
    

      array数组的优点就在于,查询快,查询的时间复杂度为O(1)

    //获取index索引位置的元素
        public E get(int index){
            if(index<0||index>=size)
                throw new IllegalArgumentException();
            return data[index];
        }
        //获取末尾元素
        public E getLast(){
            return data[size-1];
        }
        //获取头部元素
        public E getFirst(){
            return data[0];
        }
    

      同样,array数组的缺点就是插入的复杂度为O(n)

        //在第index位置插入一个新元素e
        public void add(int index,E e){
            if(size==data.length)
                throw new IllegalArgumentException();
            if(index<0||index>size)
                throw new IllegalArgumentException();
            for(int i=size-1;i>=index;i--)
                data[i+1]=data[i];
            data[index]=e;
            size++;
        }
    

      完整代码如下:

    package Array;
    
    public class Array<E> {
        private E[] data;
        private int size;
        /*
        *
        * @param 传入数组的容量capacity构造array
        * */
        public Array(int capacity){
            data=(E[])new Object[capacity];
            size=0;
        }
        /*
        * 无参数的构造函数,默认数组的容量是capacity=10
        * */
        public Array(){
            this(10);
        }
        //获取index索引位置的元素
        public E get(int index){
            if(index<0||index>=size)
                throw new IllegalArgumentException();
            return data[index];
        }
        //获取末尾元素
        public E getLast(){
            return data[size-1];
        }
        //获取头部元素
        public E getFirst(){
            return data[0];
        }
        //获取元素中的个数
        public int getSize(){
            return size;
        }
        //获取数组的容量
        public int getCapacity(){
            return data.length;
        }
        //返回数组是否为空
        public boolean isEmpty(){
            return size==0;
        }
        //末尾添加元素
        public void addLast(E e){
           add(size,e);
        }
        //头部添加元素
        public void addHeader(E e){
            add(0,e);
        }
        //修改元素
        public void change(int index,E e){
            if(index<0||index>=data.length)
                throw new IllegalArgumentException();
            data[index-1]=e;
        }
        //在第index位置插入一个新元素e
        public void add(int index,E e){
            if(size==data.length)
                throw new IllegalArgumentException();
            if(index<0||index>size)
                throw new IllegalArgumentException();
            for(int i=size-1;i>=index;i--)
                data[i+1]=data[i];
            data[index]=e;
            size++;
        }
        //查找数组中是否有元素e
        public boolean contains(E e){
            for(int i=0;i<size;i++)
                if(data[i].equals(e))
                    return true;
            return false;
        }
        //查询元素的索引
        public int find(E e){
            for(int i=0;i<size;i++)
                if(data[i]==e)
                    return i;
            return -1;
        }
        //从数组中删除元素
        public E remove(int index){
            if(index<0||index>=size)
                throw new IllegalArgumentException();
            E ret =data[index];
            for(int i=index+1;i<size;i++)
                data[i-1]=data[i];
            size--;
            return ret;
        }
        //删除头结点
        public E removeFirst(){
            return remove(0);
        }
        //删除尾节点
        public E removeLast(){
            return remove(size-1);
        }
        //删除元素
        public void removeElement(E e){
            int index=find(e);
            if(index!=-1)
                remove(index);
        }
        @Override
        public String toString(){
            StringBuilder res=new StringBuilder();
            res.append(String.format("Array:size=%d,capacity=%d
    ",size,data.length));
            res.append('[');
            for(int i=0;i<size;i++){
                res.append(data[i]);
                if(i!=size-1)
                    res.append(",");
            }
            res.append(']');
            return res.toString();
        }
    }
    

      

  • 相关阅读:
    xheditor编辑器自动上传外链图片及QQ截图等(升级支持webp格式)
    jQuery对checkbox的各种操作
    Jquery过滤选择器,选择前几个元素,后几个元素,内容过滤选择器等
    Java8新特性之forEach+Lambda 表达式遍历Map和List
    My97日期控件My97 DatePicker选择每月最后一天(周6周日不能选,节假日不能选,高亮每个月最后一个股票交易日)
    算法系列:日历算法
    mysql 将多个查询结果合并成一行
    js判断浏览器类型以及语言
    升级至 spring-5.3.0 关于 jdbcTemplate.query(sql, parameters, rowMapper) 的解决
    解决 redis Increased maximum number of open files to 10032 (it was originally set to 256).
  • 原文地址:https://www.cnblogs.com/vi3nty/p/10098949.html
Copyright © 2011-2022 走看看