package thread1;/*** 实现一个简单的ArrayList** @Title: uminton*/
public class SimpleArrayList<T> {//数组中元素的大小private Integer elementSize = 0;//创建SimpleArrayList时,数组的容量,默认为16private Integer arrayCapacity = 16;//当数组容量不够时,默认每次扩容的大小private static final Integer DEFUALT_EXPAND_SIZE = 16;//元素容器Object[] array = null;//无参数构造,设置默认容量public SimpleArrayList(){this(DEFUALT_EXPAND_SIZE);}/*** 有参数构造,创建容器,设置数组大小* @param arrayCapacity*/public SimpleArrayList(Integer arrayCapacity){super();if(arrayCapacity < 0){throw new IllegalArgumentException("数组空间越界");}array = new Object[arrayCapacity];this.arrayCapacity = arrayCapacity;}/*** 插入一个新元素,如果数组可以放下,直接添加* 如果数组中放不下,扩容* @param v*/public void add(T v){//如果数组可以放下,直接添加if(elementSize < arrayCapacity){array[elementSize++] = v;}else { //如果数组放不下,扩容后再添加arrayCapacity += DEFUALT_EXPAND_SIZE; //扩容System.out.println("数组放不下扩容:"+arrayCapacity);Object[] newArray = new Object[arrayCapacity];//创建新的数组System.arraycopy(array,0,newArray,0,array.length);//拷贝数据到新的数组array = newArray;//从新的数组赋值到原数组array[elementSize++] = v;//添加}}/*** 根据指定下标查找元素* @param index* @return*/public T get(int index){if(index > elementSize-1 || index < 0){throw new ArrayIndexOutOfBoundsException(index);}return (T) array[index];}/*** 删除指定位置的元素,所有之后的元素需要前移* @param index*/public void remove(int index){if(index > elementSize-1 || index < 0){throw new ArrayIndexOutOfBoundsException(index);}for (int i = index; i < elementSize-1; i++) {array[i] = array[i+1];  //覆盖前一个数据}elementSize--;}/*** 更新指定位置上的元素* @param index* @param t*/public void update(int index,T t){if(index > elementSize-1 || index < 0){throw new ArrayIndexOutOfBoundsException(index);}array[index] = t;}/*** 返回array中元素的大小* @return*/public Integer size(){return elementSize;}public Integer capacity(){return arrayCapacity;}public static void main(String[] args) {SimpleArrayList<Integer> list = new SimpleArrayList<>();//添加for (int i = 0; i < 20; i++) {list.add(i);}//遍历for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+" ");}//删除index为10的元素list.remove(10);for (int i = 0; i < list.size(); i++) {System.out.println("index:"+i+";value:"+list.get(i));}System.out.println("size:" + list.size() + ",capacity:" + list.capacity());}}

  

转载于:https://www.cnblogs.com/chancy/p/10000263.html

java学习之—实现一个简单的ArrayList相关推荐

  1. 【Java学习】从一个简单的HelloWorld项目中入门maven

    创建一个maven项目 这里推荐官方文档:maven官方文档 [注]此篇文章也是笔者学习笔记,如有错误,请见谅. [注]我把Goal翻译成命令.比如Plugin Goal: ps:我他喵的写了一大半的 ...

  2. 自己动手系列——实现一个简单的ArrayList

    ArrayList是Java集合框架中一个经典的实现类.他比起常用的数组而言,明显的优点在于,可以随意的添加和删除元素而不需考虑数组的大小.处于练手的目的,实现一个简单的ArrayList,并且把实现 ...

  3. JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目 ...

  4. java播放声音类和一个简单示例

    java播放声音类和一个简单示例 播放声音的类 复制代码 代码如下:  import java.io.File; import java.io.IOException; import javax.so ...

  5. Flutter学习笔记 —— 完成一个简单的新闻展示页

    Flutter学习笔记 -- 完成一个简单的新闻展示页 前言 思路分析 案例代码 结束语 上图 前言 刚学Flutter不久,今天我们来看看如何使用 Container & ListView实 ...

  6. java servlet例子_Servlet学习教程(三)---- 一个简单的Servlet例子

    我们用个最简单的Servlet例子来解说一下Servlet简单配置以及Servlet类实现类的写法. 第一,我们新建一个Dynamic Web Project,起名Servlet 点击NEXT,设置D ...

  7. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

  8. java学习路线,一个初中生学java要多久,java难学吗

    一门永不过时的编程语言--Java 软件开发 java难学吗 java不难,你可以做如下学习 一.到相应的培训机构付费学习 别在这说培训机构没用什么的,不过一定要找正规的培训机构,不然容易被坑.培训机 ...

  9. java jsf_使用Java和JSF构建一个简单的CRUD应用

    java jsf 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. JavaServer Fac ...

最新文章

  1. 未处理的异常导致基于 ASP.NET 的应用程序意外退出
  2. 三份研究报告,聚焦 AI 的三大主要话题
  3. python安装好后打不开_windows的cmd中输入python后打不开python?
  4. BZOJ5323 [Jxoi2018]游戏 【数论/数学】
  5. 秒杀系统必须考虑的 3 个技术问题!
  6. 51nod 1785 数据流中的算法 (方差计算公式)
  7. gradle 查看依赖类库版本_Android studio中查看依赖的第三方库的历史版本和最新版本...
  8. gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客
  9. element提交图片限制一张_科研SCI论文图片常见问题和错误汇总
  10. PonyAI进军自动驾驶货运,乘用无人车历史性“小马过河”
  11. CATIA怎么约束快捷键_3ds Max 常用快捷键大全,你学会了吗
  12. java获取本机所有可用字体
  13. 使用MSHTML解析HTML页面
  14. 参加Oracle OCP和MySQL OCP考试的学员怎样在VUE预约考试
  15. php获取扫描枪数据,条码扫描枪的读取技巧
  16. 2016山东教师教育网- 一师一优课
  17. 短视频“音频化”,音乐“视频化”
  18. 一一计划(Day 14)邻接表法存储图,BFS广度优先遍历,DFS深度优先遍历
  19. ceph s3cmd上传文件时报错: ERROR: S3 error: 416 (InvalidRange)
  20. 记HP 12c的一个坑

热门文章

  1. 崔希凡javaWeb笔记day01~day03(2016年5月20日20:33:54)
  2. linux:交叉编译后程序的下载方式
  3. 继承中多态的灵活使用及其分析图 第一个程序的升级版
  4. 判断身份证号是否合法
  5. 电脑登陆不了网页的服务器地址,电脑能登qq不能打开网页的解决方法
  6. 大数据可视化模板_最佳大数据可视化技术
  7. php概率函数,PHP全概率运算函数(优化版) Webgame开发必备
  8. HALCON打开之后相机无法被别的程序找到解决方法
  9. CStopwatch详细用法
  10. 鸿蒙投屏和普通投屏,华为智慧屏SE发布:预装鸿蒙 可一碰投屏