java学习之—实现一个简单的ArrayList
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的更多相关文章
- 自己动手系列——实现一个简单的ArrayList
ArrayList是Java集合框架中一个经典的实现类.他比起常用的数组而言,明显的优点在于,可以随意的添加和删除元素而不需考虑数组的大小.处于练手的目的,实现一个简单的ArrayList,并且把实现 ...
- 用java从0生成一个简单的excel
用java从0生成一个简单的excel 目标 用代码实现对一个excel的基础操作,包括创建,插入文字,(好像就这些了),生成的excel可以用wps打开,如果直接用c++的文件流会生成假的xls表格 ...
- LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...
- Linux第三周学习总结——构造一个简单的Linux系统MenuOS
第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...
- 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo
简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...
- 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement
本blog提供了一个简单的通过JDBC驱动建立JDBC连接例程.并分别通过Statement和PreparedStatement实现对数据库的查询. 在下一篇blog中将重点比較Statement与P ...
- 用IntelliJ IDEA学习Spring--创建一个简单的项目
这段时间想学习一下Spring,其实之前学过Spring,只是有些忘记了.而且之前学的时候是适用eclipse学习的,现在好像对IntelliJ这个工具使用挺多的,现在就学习一下这个工具的用法,顺便复 ...
- [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图
第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...
- micronaut 学习 二 创建一个简单的服务
micronaut 提供的cli 很方便,我们可以快速创建具有所需特性的应用,以下是一个简单的web server app 创建命令 mn create-app hello-world 效果 mn c ...
随机推荐
- python学习笔记(六)、类
Python与java.c++等都被视为一种面向对象的语言.通过创建自定义类,用于处理各种业务逻辑.面向对象有封装.继承.多态三个特征,这也是面子对象语言的通用特征. 1 封装 封装,是值向外部隐藏内 ...
- JavaScript_02_JavaScript对象
ECMAScript标准中基本对象:Array,Boolean,Date,Math,Number,String,RegExp,Global Boolean,Date,Math,Number,Strin ...
- jsp基础语言-jsp声明
jsp声明的语法格式:<%! 声明代码 %> jsp声明的意义:用来定义在程序中使用到的变量.方法等.最后要以“:”结尾. jsp声明举例: <%! int a=100,b=200; ...
- 深海中的STL—mt19937
mt19937 当你第一眼看到这玩意儿的时候 肯定禁不住吐槽:纳尼?这是什么鬼? 确实,这个东西鲜为人知,但是它却有着卓越的性能 简介 mt19937是c++11中加入的新特性 它是一种随机数算法,用 ...
- Hacking Box Droopy: v0.2
概述: 目标:get flag 下载链接: https://www.vulnhub.com/entry/droopy-v02,143/ 工具: kail linux 开工 1)扫描开道: # netd ...
- c或c++利用scanf无限输入并进行简单操作如比大小等
#include <iostream> using namespace std; int main() { ; ) //scanf返回值为int类型表示成功输入的数据数量个数 { if(n ...
- PSP总结报告
此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2556] 回顾0 alpha阶段前 团队名称:可以低头,但没必要 团队项 ...
- iOS UITextField 响应键盘的return 事件
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(, , , )] textField.returnKeyT ...
- spring boot 中使用 jpa以及jpa介绍
1.什么是jpa呢?JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.12.jpa具有什么 ...
- chome(谷歌浏览器)上传文件崩溃/上传图片崩溃/打开浏览文件未响应 解决方案
测试解决方案:关闭搜狗输入法(我用的是搜狗输入法,若使用其他输入法,此方案也可能适用),再测试是否重现浏览器崩溃问题 可选解决方案:升级搜狗输入法(如果想 卸载输入法 也可以) 前面有段时间chome ...