封装一个简单的动态数组

package com.immoc;

import java.util.ArrayList;
import java.util.List;

/**
 * 实现动态数组
 * */
public class Array <E> {

    private E[]data;;
    private int size;
    public Array(int capacity){
        data = (E[]) new  Object[capacity];
        size = 0;
    }
    public Array(){
        this(10);
    }
    public int getSize(){
        return size;
    }
    public int getCapacity(){
      return data.length;
    }
    public boolean isEmpty(){
        return size==0;
    }
    //在数组的最后添加一个元素
    public void addList(E e){
        add(size, e);
    }
    //在数组的最后加入一个元素
    public void addFirst(E e){
        add(0, e);
    }
    //数组中插入一个元素
    public void add(int index,E val){

        if(index<0||index>size){throw new IllegalArgumentException("传入的参数超过数组的长度");}
        if(size==data.length){resize(2*getCapacity());}
        for(int i = size - 1;i >= index;i --){
            data[i + 1] = data[i];
        }
        data[index]=val;
        size++;
    }
    //查询某个元素
    public E query(int index){
        if(index < 0 || index >= size){throw new NullPointerException("null");}
        return data[index];
    }
    //修改某个元素
    public void update(int index, E val){
        if(index < 0 || index >= size){throw new NullPointerException("null");}
        data[index]  = val;
    }
    //toString方法
    @Override
    public String toString(){
        StringBuffer sb = new StringBuffer();
        sb.append("数组的长度:"+size+"\t" + "数组的容量:"+data.length + "\n");
        sb.append("[");
        for (int i = 0; i < size; i++) {
            sb.append(data[i]);
            if(i !=size-1){
                sb.append(",");
            }
        }
        sb.append("]");
        return sb.toString();
    }
    //是否包含
    public boolean isContain(E val){
        for (int i = 0; i < size; i++) {
            if(val.equals(data[i])){
                return true;
            }
        }
        return false;
    }

    //删除某个
    public E delete( int index ){
        if(index < 0 || index >= size){throw new NullPointerException("null");}
        E ret = data[index];
        for (int i = index; i < size; i++) {
            data[i] = data[i+1];
        }
        size --;
        if (size < data.length/2){
            resize(size);
        }
        return ret;
    }
    //寻找下标
    public int findIndex(E val){
        Array a = new Array();
        for (int i = 0; i <size; i++) {
            if (val.equals(data[i])){
                return i;
            }
        }
        return -1;
    }
    //寻找所有下标
    public List findIndexs(E val){
        List l = new ArrayList();
        for (int i = 0; i <size ; i++) {
            if(val.equals(data[i])){
                l.add(i);
            }
        }
        return l;
    }
    //改变容量长度
    public void resize(int capacity){
        E[] newData = (E[]) new Object[capacity];
        for (int i = 0; i <size; i++) {
            newData[i] = data[i];
        }
        data = newData;
    }

}

原文地址:https://www.cnblogs.com/zhangzonghua/p/9349957.html

时间: 2024-08-05 10:29:55

封装一个简单的动态数组的相关文章

Directx11学习笔记【四】 封装一个简单的Dx11DemoBase

根据前面两个笔记的内容,我们来封装一个简单的基类,方便以后的使用. 代码和前面类似,没有什么新的内容,直接看代码吧(由于代码上次都注释了,这次代码就没怎么写注释o(╯□╰)o) Dx11DemoBase.h Dx11DemoBase.h #pragma once #include <d3d11.h> #include <D3DX11.h> #include <DxErr.h> class Dx11DemoBase { public: Dx11DemoBase(); vi

封装一个简单的solrserver组件

一个简单的solrserver组件 实现索引更新的异步处理,以及查询接口,日志/线程池/队列监控没有加上. SolrDocment封装 接口: public interface ISolrDocument { public SolrInputDocument convertToInputDocument() throws Exception; public void buildSolrDocument(SolrDocument document) throws Exception; } 实现:

【Unity Shaders】Reflecting Your World —— 在Unity3D中创建一个简单的动态Cubemap系统

本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源(当然你也可以从官网下载). ========================================== 分割线 ========================================== 写在前面 我们已经学了很多关于反射的内容,但是我们现在的反射并不能实时反射,即当反射物体移动时它们不

代码改变世界 | 如何封装一个简单的 Koa

下面给大家带来:封装一个简单的 KoaKoa 是基于 Node.js 平台的下一代 web 开发框架Koa 是一个新的 web 框架,可以快速而愉快地编写服务端应用程序,本文将跟大家一起学习:封装一个简单的 Koa一个简单的 http 服务使用 node 提供的 http 模块,可以很容易的实现一个基本的 http 服务器,新建一个 application.js 文件,内容如下: const http = require('http') const server = http.createSer

Python+Selenium进阶版(八)- Python自定义封装一个简单的Log类

目标:如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里. 练习场景: 我们需要封装一个简单的日志类,主要有以下内容: 1.生成的日志文件格式是 年月日分秒.log 2.生成的XXX.log文件存储在项目根目录下Logs文件夹下 3.这个日志类,支持INFO,ERROR两种日志级别 4.日志里,每行日志输出,时间日期+执行类名称+日志级别+日志描述 解决思路: 1.在根目录下新建一个Logs的文件夹,获取这个Log的相对路径: 2.日志的保存命名,需要系统时间:

一个简单的json数组解析(阿里巴巴)

最近工作中遇到了json字符串解析的问题,但是项目中是有限制的,只能引用阿里巴巴和simple jar,所以我选择了Alibaba的jar,由于很长时间没用过json的东西了,有些淡忘,不免工作中遇到了会花费些许时间再去重拾记忆,所以写了一个简单的JSON 字符串数组的解析实例,仅此作为笔记,以后遇到了可以直接看一下,或许可以节省一时片刻的时间,时间就是金钱,就是生命,就是自信,就是信任... /** * */package com.test.pac1; import java.util.Arr

C 封装一个简单二叉树基库

引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而  没有遭受到冷酷现实的打击:这种打击常无情地加诸于每个脱离现实环境生活的  人.或许高斯讲求实效和追求完美的性格,有助于让他抓住生活中的简单现实.  高斯22岁获博士学位,25岁当选圣彼德堡科学院外籍院士,30岁任哥廷根大学数  学教授兼天文台台长.虽说高斯不喜欢浮华荣耀,但在他成名后的五十年间,这  些东西就像

一个简单 JDK 动态代理的实例

动态代理的步骤: 创建一个实现了 InvocationHandler 接口的类,必须重写接口里的 invoke()方法. 创建被代理的类和接口 通过 Proxy 的静态方法 newProxyInsatance(ClassLoader loader,Class[] interfaces,InvocationHandler,handler) 来创建一个代理 通过代理来调用方法 简单的动态代理实例 1 package com.sean.zzzjvm; 2 3 import java.lang.refl

封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------------------------------------------------------------------------------ 不知众多Android开发者是否在程序开发的工程中也遇到过下面的问题: 0.如何在众多log中快速找到你设置打印的那行log? 1.是否还在不断的切换标签来