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的更多相关文章

  1. 练习:自己写一个容器ArrayList集合 一一数组综合练习

    package cn.bjsxt.myCollection; import java.util.Arrays; /** * 天下文章一大抄,看你会抄不会抄. * 模拟Stringbuilder 写一个 ...

  2. 参考JDK1.8源码,自己写一个类似于ArrayList的动态数组

    1. ArrayList的基本实现原理 ArrayLiST其内部用一个普通数组来存储数据,当此数组不够容纳新添加的元素的时候,则创建一个更大长度的新数组,并将原来数组中的元素复制到新数组中. 2.Ar ...

  3. java基础: ArrayList集合应用, ArrayList增删改查详解,综合java基础实现学生管理系统,

    1.ArrayList 集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 1.1 -ArrayList的构造方法和添加方法 public ArrayLi ...

  4. 手写IOC容器

    IOC(控制翻转)是程序设计的一种思想,其本质就是上端对象不能直接依赖于下端对象,要是依赖的话就要通过抽象来依赖.这是什么意思呢?意思就是上端对象如BLL层中,需要调用下端对象的DAL层时不能直接调用 ...

  5. JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数

    第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚 ...

  6. Java中的容器(集合)之ArrayList源码解析

    1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...

  7. 让我手把手教你写一个强大、方便使用的 IOC 容器

    一.介绍 1.介绍 最近无聊,也没什么事做,没事做总是要给自己找点事情做吧,毕竟人的生活在与折腾.于是,决定自己手动写一个 IOC 的框架.我们知道在 NetCore 的版本里面已经内置了 IOC 容 ...

  8. 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 ...

  9. (2)自己写一个简单的servle容器

    自己写一个简单的servlet,能够跑一个简单的servlet,说明一下逻辑. 首先是写一个简单的servlet,这就关联到javax.servlet和javax.servlet.http这两个包的类 ...

随机推荐

  1. opencv中的更通用的形态学

    为了处理更为复杂的情况,opencv中还支持更多的形态学变换. 形态学名称 操作过程 操作名称 是否需要temp参数 开操作 open open(src)=先腐蚀,后膨胀  CV_MOP_OPEN 否 ...

  2. Android自动化测试中AccessibilityService获取控件信息(1)

    Android自动化测试中AccessibilityService获取控件信息(1) 分类: android自动化测试2014-03-24 15:31 3455人阅读 评论(16) 收藏 举报 and ...

  3. 【EasyUI学习-3】Easyui tabs入门实践

    作者:ssslinppp       1. 摘要 一般我们在设计程序主框架的时候,当点击(子)菜单时,希望相应界面都在tabs页中显示: 在显示的时候,如果之前打开过该界面,则希望重新选中对应的tab ...

  4. 小峰mybatis(3)mybatis分页和缓存

    一.mybatis分页-逻辑分页和物理分页: 逻辑分页: mybatis内置的分页是逻辑分页:数据库里有100条数据,要每页显示10条,mybatis先把100条数据取出来,放到内存里,从内存里取10 ...

  5. springMVC学习(7)-springMVC校验

    一.校验理解: 对于安全要求较高点建议在服务端进行校验. 控制层conroller:校验页面请求的参数的合法性.在服务端控制层conroller校验,不区分客户端类型(浏览器.手机客户端.远程调用) ...

  6. Redis:Redis

    ylbtech-Redis:Redis 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部 ...

  7. 学习笔记之FluentAssertions

    dotnet/src/MoqSample at master · haotang923/dotnet · GitHub https://github.com/htanghtang/dotnet/tre ...

  8. MTR追踪的好工具

    yum install mtr 或者win下的winmtr 直接可以统计.

  9. [UE4]创建多把枪,使用Class,参数的对象类型

    先来说说函数输入参数的区别: 1.Object Reference 2.Class Reference 会出现可以让你选择一个类 3.Soft Object Reference 4.Soft Clas ...

  10. 利用Red Blob游戏介绍A*算法

    转自:http://gad.qq.com/program/translateview/7194337 在游戏中,我们经常想要找到从一个位置到另一个位置的路径.我们不只是想要找到最短距离,同时也要考虑旅 ...