package cn.bjsxt.myCollection;

 import java.util.Arrays;

 /**
* 天下文章一大抄,看你会抄不会抄。
* 模拟Stringbuilder 写一个容器
* 参照源码
*
*
* @author Administrator
*
*/
public class MyArrayList {
/**
* The value is used for object storage.
*/
private Object[]value; /**
* The size is the number of characters used.
*/
private int size; //查看size大小
public int size(){
return size;
}
//是否是空
public boolean isEmpty(){
return size==;
} //构造器
public MyArrayList(){
//value = new Object[16];
this();
} public MyArrayList(int size){
if(size<){ try {
throw new Exception();
} catch (Exception e) { e.printStackTrace();
}
} value = new Object[size];
} //取出对象的方法
public Object get(int index) {
// //index范围[0,size-1]或者[0,index)一样
// if(index<0||index>size-1){
//
// try {
// throw new Exception();
// } catch (Exception e) {
//
// e.printStackTrace();
// }
//
// }
rangeCheck(index);
return value[index];
} //set
public Object set(int index,Object object){
//碰到 索引 都要判断 把下面代码封装成方法
// //index范围[0,size-1]或者[0,index)一样
// if(index<0||index>size-1){
//
// try {
// throw new Exception();
// } catch (Exception e) {
//
// e.printStackTrace();
// }
//
// }
rangeCheck(index);
Object old = value[index];
value[index] = object;
return old;
}
public void rangeCheck(int index){
//index范围[0,size-1]或者[0,index)一样
if(index<||index>size-){ try {
throw new Exception();
} catch (Exception e) { e.printStackTrace();
} }
} //添加方法
public void add(Object obj){
value[size]=obj;
size++;
if(size>=value.length){
//装不下了 扩容吧
int newCapacity = value.length*+;
Object[]newList = new Object[newCapacity]; //System.arraycopy(src, srcPos, dest, destPos, length); for(int i=;i<value.length;i++){
newList[i] = value[i];
}
value = newList;
}
} //查某个对象的下标值
public int indexOf(Object obj){
if(obj==null){
return -;
}else{
for(int i=;i<value.length;i++){
if(obj==value[i]){
return i;
}
}
return -;
}
}
//倒着第一次出现某个对象的下标值
public int lastIndexOf(Object obj){
if(obj==null){
return -;
}else{
for(int i=value.length-;i>=;i--){
if(obj==value[i]){
return i;
}
}
return -;
}
} public static void main(String[] args) {
MyArrayList list = new MyArrayList();
list.add("aaa");
list.add(new Human("小高"));
list.add("bbb"); Human h=(Human)list.get(); System.out.println(list.get());
System.out.println(h.getName());
/**
*上面创建3个对象 你查第四个 不存在的
*System.out.println(list.get(3));
*越界异常
*java.lang.Exception
* at cn.bjsxt.myCollection.MyArrayList.get(MyArrayList.java:62)
* at cn.bjsxt.myCollection.MyArrayList.main(MyArrayList.java:82)
*/
System.out.println(list.size());
} }

练习:自己写一个容器ArrayList集合 一一数组综合练习的更多相关文章

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

    package cn.bjsxt.collection; /** * 自己实现一个ArrayList */ import java.util.ArrayList; import java.util.L ...

  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. 在doc下面执行zpl语言 Copy 文件名 lpt1

    在doc下面执行zpl语言 Copy 文件名 lpt1 测试斑马条码打印机并口是否能正常通讯: 1.Zebra打印机安装好标签和碳带,且打印机进入Ready状态.2.电脑端用Notepad编写输入如下 ...

  2. SpringMVC中的重定向和转发的实现

    1.请求转发和重定向的区别 请求重定向和请求转发都是web开发中资源跳转的方式. 请求转发是服务器内部的跳转 地址栏比发生变化 只有一个请求相应 可以通过request域对跳转目标的请求 请求重定向是 ...

  3. [转]NSIS:常量大全

    原文链接 http://www.flighty.cn/html/bushu/20140915_251.html ;轻狂志www.flighty.cn ;运行后会在桌面生成NSIS常量大全.txt文件 ...

  4. 1002 A+B for Polynomials (25 分)

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...

  5. (转!)Netdata---Linux系统性能实时监控平台部署

    我一直以为人是慢慢变老的,其实不是,人其实是一瞬间变老的. -------村上春树<舞!舞!舞!> 转自https://www.cnblogs.com/kevingrace/p/73001 ...

  6. [UE4] 虚幻4学习---UE4中的字符串转换

    String Conversions: FString To FName FString To Int32 Float To FString FArrayReaderPtr To FString TA ...

  7. javascript继承之借用构造函数(二)

    //简单的函数调用 function Father() { this.nums= [1,2]; } function Son() { Father.call(this);//调用超类型,完成son继承 ...

  8. 第10课 C++中的新成员

    1. 动态内存分配 (1)C++通过new关键字进行动态内存申请,是以类型为单位来申请空间大小的 (2)delete关键字用于内存释放 ▲注意释放数组时要加[],否则只释放这个数组中的第1个元素. [ ...

  9. 不设目标也能通关「马里奥」的AI算法,全靠好奇心学习

    在强化学习中,设计密集.定义良好的外部奖励是很困难的,并且通常不可扩展.通常增加内部奖励可以作为对此限制的补偿,OpenAI.CMU 在本研究中更近一步,提出了完全靠内部奖励即好奇心来训练智能体的方法 ...

  10. NOIP考前复习-数制转换,数论模板与文件读写

    数制转换有两种题型,一般一题,分值1.5分. 题型一:R进制转十进制 解法就是:按权展开,但要注意各个位的权,最低位(最右边)的权是0次方,权值为1. 纯整数的情况: (11010110)2 = 1× ...