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());
} }

最新文章

  1. Python遇到字符编码出问题的一个相对万能的办法
  2. Beta阶段第八次Scrum Meeting
  3. CxImage
  4. mininet之miniedit可视化操作
  5. TCP与UDP协议
  6. 1021: A除以B
  7. 【转】 Live555
  8. 传说中的WCF(4):发送和接收SOAP头
  9. Apache Kafka:下一代分布式消息系统
  10. php调用whois接口域名查询
  11. Linux云主机安装JDK,配置hadoop的详细方式
  12. C# - 重定义一个接口的实现
  13. 【Android平台安全方案】の #00-请不要在外部存储(SD卡)加密存储的敏感信息
  14. Android Studio如何设置自己主动提示代码
  15. Router
  16. 护航者,腾讯云: 2017年度游戏行业DDoS态势报告—回溯与前瞻
  17. Spark ML源码分析之一 设计框架解读
  18. Harbor--企业级项目管理
  19. mongodb认识
  20. [转]Linux下安装Java环境配置步骤详述

热门文章

  1. Angular 4 表单校验1
  2. linux上通过lighttpd上跑一个C语言的CGI小页面以及所遇到的坑
  3. JZ2440 裸机驱动 第14章 ADC和触摸屏接口
  4. CC2530中串口波特率改为9600时单个数据包来不及接收的解决方案
  5. 一段简单的代码记录如何通过 js 给 HTML 设置自定义属性,并且通过点击事件获取到所设置的自定义属性值
  6. SQL群集多实例卸载、安装
  7. Neo4j在Centos7下的安装笔记
  8. 管理11gRAC基本命令 (转载)
  9. css border
  10. 网络基础知识 tcp