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 ...
随机推荐
- [LeetCode] 1. Two Sum 两数之和
Part 1. 题目描述 (easy) Given an array of integers, return indices of the two numbers such that they add ...
- 我从来不理解JavaScript闭包,直到有人这样向我解释它...
摘要: 理解JS闭包. 原文:我从来不理解JavaScript闭包,直到有人这样向我解释它... 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 正如标题所述,JavaScript闭包 ...
- 认证与Shiro安全框架
本文内容均来自官网 1.简介 Apache Shiro是Java的一个安全框架.功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案. 实际上,S ...
- 深度 | AI芯片终极之战
深度 | AI芯片终极之战 https://mp.weixin.qq.com/s?__biz=MzA4MTQ4NjQzMw==&mid=2652712307&idx=1&sn= ...
- cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 该 ...
- Arcgis瓦片--数据获取
Arcgis的二维地图瓦片有两种获取方式 1.在Arcmap中对配置好的地图进行切图,生成对应瓦片 2.使用第三方的地图下载器,直接下载,导出成arcgis瓦片格式即可使用. 备注:这里主要介绍第二种 ...
- 设计模式系列之过滤器模式(Chriteria Pattern)
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种类 ...
- Linux中Apache服务器的简单配置
配置Apache服务器: 1.安装Apache,可以参考Linux 中yum的配置来安装: yum install http* -y 2.修改SELinux: setenforce 0 查看: 3.防 ...
- Xamarin移动开发的优点和缺点
在考虑iOS或Android应用程序开发时,我们大多数人会首先考虑Objective-C vs Swift和Java.作为本地技术堆栈,当涉及到iOS和Android应用程序开发时,它们自然是最常用的 ...
- Unity重置Animator到初始状态和重复播放同一个Animation
遇到问题 特效同事给的Animation更改了物体的很多属性,如Active,Alpha, Scale,Position等等,物体本身需要重复利用,因此使用对象池技术不直接销毁而是隐藏等需要时再显示, ...