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. 设置zedgraph鼠标拖拽和局部放大属性(转帖)

    说一下几个属性的意义和具体应用: (1)鼠标拖拽显示区域 PanModifierKeys ->> Gets or sets a value that determines which mo ...

  2. wxWidgets:简单消息处理

    早期的wxWidgets使用类似MFC的方式进行消息处理:在新版中这种映射方式仍然得以保留. 在MyFrame.h中添加: private: void OnQuitButton(wxCommandEv ...

  3. BASIC-12_蓝桥杯_十六进制转八进制

    总结: 1.使用库函数可有效节省空间,但时间花费较多; 2.由于本题的输入数据较大,又限制时间,故要注意利用空间换时间; 3.使用顺序结构换取最小运行时间; 示例代码: #include <st ...

  4. AppScan代理扫描app/H5安全测试(没试过,记录在此)

    标签: 1.首先设置AppScan代理,设置如下:

  5. 学习笔记之Elasticsearch

    Elasticsearch: RESTful, Distributed Search & Analytics | Elastic https://www.elastic.co/products ...

  6. Linux中make, make install命令分别是什么

    用于linux源码安装软件,一般下载源码包得到文件:xxxx.tgz====================================1.解包软件 tar zxf xxxx.tgz======= ...

  7. golang web框架 beego 学习 (二) router and controller

    1 Router和Controller的常用配置 beego.Router("/user/admin", &controllers.UserController{}) // ...

  8. 第3章 文件I/O(1)_标准C的I/O

    1. 标准C的I/O和FILE结构体 1.1 标准C的I/O库函数 (1)char *fgets( char *string, int n, FILE *stream );//从流中获取字符串 (2) ...

  9. ExtJS模板与菜单的使用案例-床位卡

    ExtJS的模板的使用: 项目中场景基本就是表格模型: TPL:自己编写模板 store:数据源 UI组件: tbar,rbr,bbar实现工具栏 PageBar与StatusBar:可以针对TPL的 ...

  10. 报表系统OLAP

    实现报表系统可自定义定制: 1.纬度,事实表,用户自定义观察纬度,实现报表自定义(自定义纬度树结构---通过这个树结构,后台自动生成报表SQL,用户仅仅配置纬度关系即可)----报表配置纬度关 系 2 ...