练习:自己写一个容器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这两个包的类 ...
随机推荐
- Ushare共享流媒体
一. 支持USB 参考: http://wenku.baidu.com/link?url=K_uAp4QEa2cX3nPMkbc-colCAHA1yBwo1JCYsZf-qR7AVFPkmpbBVYR ...
- Oracle 10g下emctl start dbconsole 报错:OC4J Configuration issue 问题解决
http://blog.sina.com.cn/s/blog_95b5eb8c0100x4a7.html http://blog.csdn.net/sz_bdqn/article/details/17 ...
- linux下syscall函数 间接系统调用
NAME syscall - 间接系统调用 SYNOPSIS #define _GNU_SOURCE #include ...
- FPGA配置方式
FPGA有多种配置/加载方式.粗略可以分为主动和被动两种.主动加载是指由FPGA控制配置流程,被动加载是指FPGA仅仅被动接收配置数据. 最常见的被动配置模式就是JTAG下载bit文件.此模式下,主动 ...
- win7一键拖动生成快速启动栏
一键拖动生成快速启动工具栏 ^#x:: ;自动添加快速启动工具栏 if had_added() ExitApp ql_add() Sleep, if (is_locked()) { lock_unlo ...
- linux中uptime命令查看linux系统负载
阅读目录 uptime cat /proc/loadavg 何为系统负载呢? 进阶参考 uptime 另外还有一个参数 -V(大写),是用来查询版本的 [appdeploy@CNSZ22PL0088: ...
- HDU 1269 迷宫城堡(向量)(Tarjan模版题)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- JavaScript-Tool:moment-timezone.js
ylbtech-JavaScript-Tool:moment-timezone.js Parse and display dates in any timezone. 1. Format Datas ...
- 关于pycharm导入其他项目时出现找不到python无法运行的问题
之前拿到一个别的人用scrapy写的一个爬虫想运行看看,然后就出了类似于这种错误(类似的,这个是网上找的),一直提示找不到XXX路径下的python,然后无法运行执行文件... 我一看这个简单,这种就 ...
- 1111 Online Map (30 分)
1111 Online Map (30 分) Input our current position and a destination, an online map can recommend sev ...