package thread1;

/**
* 实现一个简单的ArrayList
*
* @Title: uminton
*/
public class SimpleArrayList<T> { //数组中元素的大小
private Integer elementSize = 0;
//创建SimpleArrayList时,数组的容量,默认为16
private 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());
} }

  

java学习之—实现一个简单的ArrayList的更多相关文章

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

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

  2. 用java从0生成一个简单的excel

    用java从0生成一个简单的excel 目标 用代码实现对一个excel的基础操作,包括创建,插入文字,(好像就这些了),生成的excel可以用wps打开,如果直接用c++的文件流会生成假的xls表格 ...

  3. LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

    LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...

  4. Linux第三周学习总结——构造一个简单的Linux系统MenuOS

    第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

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

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

  6. 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement

    本blog提供了一个简单的通过JDBC驱动建立JDBC连接例程.并分别通过Statement和PreparedStatement实现对数据库的查询. 在下一篇blog中将重点比較Statement与P ...

  7. 用IntelliJ IDEA学习Spring--创建一个简单的项目

    这段时间想学习一下Spring,其实之前学过Spring,只是有些忘记了.而且之前学的时候是适用eclipse学习的,现在好像对IntelliJ这个工具使用挺多的,现在就学习一下这个工具的用法,顺便复 ...

  8. [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...

  9. micronaut 学习 二 创建一个简单的服务

    micronaut 提供的cli 很方便,我们可以快速创建具有所需特性的应用,以下是一个简单的web server app 创建命令 mn create-app hello-world 效果 mn c ...

随机推荐

  1. 环境搭建 - Java(Windows)

    Java开发环境搭建 本文以window7下搭建JDK8示例,其他版本无特殊说明同理. 下载JDK安装包 网址:JDK8     非C盘下根目录新建文件夹:Java D:\Java 安装JDK至Jav ...

  2. Android 图片Bitmap,drawable,res资源图片之间转换

    一.知识介绍 ①res资源图片是放在项目res文件下的资源图片 ②BitMap位图,一般文件后缀为BMP,需要编码器编码,如RGB565,RGB8888等.一种逐像素的显示对象,其执行效率高,但缺点也 ...

  3. 单台MongoDB实例开启Oplog

    背景 随着数据的积累,MongoDB中的数据量越来越大,数据分析团队从数据库中抽取变化数据(假如依据栏位createdatetime,transdatetime),越来越困难.我们知道MongoDB的 ...

  4. mysql安装出现问题(The service already exists)

    1.管理员身份运行cmd(系统win10) 2.输入命令cd /d F:\mysql-5.7.19-win32\bin(此为mysql要安装的目录) 3.输入安装命令mysqld install 出现 ...

  5. SQL 创建分区表

    (以项目中实际使用的GNSS库为例) 背景:数据量巨大,定时创建月表存放数据,月表中数据存放在不同的文件组中来提高查询效率   一.创建数据库,添加文件组 除了逻辑文件和物理文件的分离之外,SQL S ...

  6. 宋宝华:关于Ftrace的一个完整案例【转】

    Ftrace简介 Ftrace是Linux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布. Ftr ...

  7. centos7防火墙开放端口等命令

    CentOS 7 开放防火墙端口 命令 最近公司新的server要求用CentOS7, 发现以前CentOS 6 系列中的 iptables 相关命令不能用了,查了下,发现Centos 7使用fire ...

  8. 让 Windows7 - 64bit 支持 VC++ 6.0 的解决方法(无法启动此程序,因为计算机中丢失 MSVCRTD.dll。尝试重新安装该程序以解决此问题)

    源地址:https://www.cnblogs.com/poissonnotes/p/4372136.html 无法启动此程序,因为计算机中丢失 MSVCRTD.dll.尝试重新安装该程序以解决此问题 ...

  9. Docker: 构建Nginx,PHP,Tomcat基础镜像

    Usage: docker build [OPTIONS] PATH | URL | - [flags] Options: -t, --tag list # 镜像名称 -f, --file strin ...

  10. #022 Python 实验课

    拍7游戏 描述 “拍7游戏”规则是:一堆人围成一圈,开始时,任意指定一人说出数字“1”后,一圈人按顺时针方向,每人按整数由小到大的顺序一人一个地报出后续数字“2”.“3”......,当遇到为“7”的 ...