练习:自己写一个容器ArrayList集合 一一数组综合练习2
package cn.bjsxt.collection; /**
* 自己实现一个ArrayList
*/
import java.util.ArrayList;
import java.util.List; public class SxtArrayList /* implements List */{ private Object[] elementDate;
// 要放入的元素大小
private int size; public int size() {
return size;
} // 无参构造器
public SxtArrayList() {
// 默认容量10
this(); } // 有参构造器 initialCapacity初始容量 public SxtArrayList(int initialCapacity) { if (initialCapacity < ) {
try {
throw new Exception();
} catch (Exception e) { e.printStackTrace();
}
}
elementDate = new Object[initialCapacity];
} // 添加方法
public void add(Object obj) {
// 数组扩容
if (size >= elementDate.length) {
Object[] newArray = new Object[size * / + ];
// 数据copy 原数组
System.arraycopy(elementDate, , newArray, , elementDate.length);
// for(int i=0;i<elementDate.length;i++){
// newArray[i]=elementDate[i];
// }
// 换成新的数组
elementDate = newArray;
}
elementDate[size] = obj;
size++;
} // 判断是否为空
public boolean isEmpty() {
return size == ;
} // 获取下标索引元素
public Object get(int index) {
// 索引判断的方法 我们下面对其进行了封装 既方法 rangeCheck();
rangeCheck(index);
// if(index<0||index>=size){
// try {
// throw new Exception();
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
return elementDate[index];
} public void remove(int index) {
// 下标判断
rangeCheck(index); int numMoved = size - index - ;
if (numMoved > ) { // 数据copy
System.arraycopy(elementDate, index + , elementDate, index,
numMoved);
}
elementDate[size] = null;
--size; elementDate=elementDate; }
public void remove(Object obj){ for(int i=;i<size;i++){
//底层掉的是equals方法 而不是==
if(get(i).equals(obj)){
remove(i); }
} }
//
public Object set(int index,Object obj){
rangeCheck(index);
Object oldValue = elementDate[index];
return oldValue;
} public void rangeCheck(int index) {
// 索引判断的方法 我们下面对其进行了封装 既方法 rangeCheck();
if (index >= size) {
try {
throw new Exception();
} catch (Exception e) { e.printStackTrace();
}
} }
public void ensureCapacity(){
// 数组扩容
if (size >= elementDate.length) {
Object[] newArray = new Object[size * / + ];
// 数据copy 原数组
System.arraycopy(elementDate, , newArray, , elementDate.length);
// for(int i=0;i<elementDate.length;i++){
// newArray[i]=elementDate[i];
// }
// 换成新的数组
elementDate = newArray;
}
}
//
public void add(int index , Object obj){
//下标判断
rangeCheck(index);
// 数组扩容
ensureCapacity(); System.arraycopy(elementDate, index, elementDate, index+, size-index);
elementDate[index]=obj;
size++;
} public static void main(String[] args) { SxtArrayList list = new SxtArrayList();
list.add("");
list.add("");
list.add("");
list.add("");
list.add("");
list.add("");
// System.out.println(list.size());
// System.out.println(list.isEmpty());
// System.out.println(list.get(4));
// System.out.println(list.get(5));
// System.out.println(list.get(6));
// list.remove(5);
// System.out.println(list.get(5));
System.out.println(list.size());
for(int i=;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
练习:自己写一个容器ArrayList集合 一一数组综合练习2的更多相关文章
- 练习:自己写一个容器ArrayList集合 一一数组综合练习
package cn.bjsxt.myCollection; import java.util.Arrays; /** * 天下文章一大抄,看你会抄不会抄. * 模拟Stringbuilder 写一个 ...
- 参考JDK1.8源码,自己写一个类似于ArrayList的动态数组
1. ArrayList的基本实现原理 ArrayLiST其内部用一个普通数组来存储数据,当此数组不够容纳新添加的元素的时候,则创建一个更大长度的新数组,并将原来数组中的元素复制到新数组中. 2.Ar ...
- java基础: ArrayList集合应用, ArrayList增删改查详解,综合java基础实现学生管理系统,
1.ArrayList 集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 1.1 -ArrayList的构造方法和添加方法 public ArrayLi ...
- 手写IOC容器
IOC(控制翻转)是程序设计的一种思想,其本质就是上端对象不能直接依赖于下端对象,要是依赖的话就要通过抽象来依赖.这是什么意思呢?意思就是上端对象如BLL层中,需要调用下端对象的DAL层时不能直接调用 ...
- JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数
第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚 ...
- Java中的容器(集合)之ArrayList源码解析
1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...
- 让我手把手教你写一个强大、方便使用的 IOC 容器
一.介绍 1.介绍 最近无聊,也没什么事做,没事做总是要给自己找点事情做吧,毕竟人的生活在与折腾.于是,决定自己手动写一个 IOC 的框架.我们知道在 NetCore 的版本里面已经内置了 IOC 容 ...
- Java-集合(没做出来)第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseL
没做出来 第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列. 例如: List list = new ArrayList(); list.a ...
- (2)自己写一个简单的servle容器
自己写一个简单的servlet,能够跑一个简单的servlet,说明一下逻辑. 首先是写一个简单的servlet,这就关联到javax.servlet和javax.servlet.http这两个包的类 ...
随机推荐
- 什么是Asp.net Core?和 .net core有什么区别?(转)
什么是Asp.Net core 我相信很多C# Developer已经对于.net core不算陌生了,就算没有正式使用相信也应该有所了解.微软在推出来.net core的同时为了方便一些原有的项目可 ...
- Angular 4 管道
一.date管道 1.html 2. 控制器中的定义brithday 3.效果图 如果时间格式 为: 我的生日是{{birthday | date:'yyyy-MM-dd HH:mm:ss'}} 则效 ...
- PHP接收表单(GET/POST)时,表单名中的点变成了下划线怎么办?
如果开发中发现,从表单中传递上来的表单名称后端接不到值,不要惊慌,很有可能是表单名称中带有特殊字符(.和空格) PHP接收参数时,发现表单名中如果是 句号(.)或者空格( ),会被转换成下划线(_) ...
- SEO之H1,H2,H3,H4....STRONG使用方法
作为一个SEO从业人员,我们不仅仅是要懂得如何通过网站内容和外链等SEO手段,其实一个优秀的SEOER在从事一个SEO案例时,首先着手的是如何从网站程序本身来打好网站SEO基础. 在平时和很多朋友的交 ...
- android设备唯一码的获取,cpu号,mac地址
抄自http://blog.csdn.net/hpccn/article/details/7872141 开发Android应用中,我们常常需要设备的唯一码来确定客户端. Android 中的几中方法 ...
- 【Oracle学习笔记-2】Oracle基础术语解析
来自为知笔记(Wiz) 附件列表 Oracle概念解析.png 表空间.png 大小关系.png 段segment.png 块block.png 区entent.png 数据库基本概念.png
- C++ static类成员,static类成员函数
转载:ZJE_ANDY static修饰类中成员,表示类的共享数据 1.static类成员 C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处 ...
- 杂项-TOOL:NPIO
ylbtech-杂项-TOOL:NPIO NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作.NPOI是一个开源的Ja ...
- 廖雪峰Java1-1Java入门-2eclipse安装配置
安装eclipse IDE继承开发环境:Integrated Development Environment 编写代码/组织项目/编译/运行/调试 提升开发效率 1.eclipse下载 eclipse ...
- elasticsearch 复杂查询小记
以下接口调用都基于5.5版本 JSON 文档格式 { "_index": "zipkin-2017-09-06", "_type": &qu ...