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. ML(3): 贝叶斯方法

    对于分类问题,我们每个人每天都在执行分类操作,只是我们没有意识到罢了.例如,当你看到一个陌生人,你的脑子下意识判断TA是男是女:你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱.那边有个非主流” ...

  2. php 非常简单的导入sql文件

    在网上找了很多,都是写了一个类 做了各种处理.还真是累哦 当然之前也做了各种尝试 source 客户端命令 mysql_query()是不支持的 load_file  在where 之后执行可以,但是 ...

  3. 【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)

    https://www.cnblogs.com/xdp-gacl/p/4187089.html http://doc.okbase.net/yuanfy008/archive/265663.html ...

  4. 使用postman模拟appium的http请求

    Appium是Server,接收http请求,使用Postman模拟请求 1.anyproxy 1.1.安装和运行 #安装 npm i -g anyproxy # 运行anyproxy,端口默认800 ...

  5. 组件Slate教程 & UMG widget构造初始化函数中获取其内部组件

    转自:http://aigo.iteye.com/blog/2296218 目的:在自定义的Widget初始化完毕后,获取其内部的button.combo等UMG组件的C++指针. 这里我们新建了一个 ...

  6. Web 数据源

    问题描述: ClassCastException:类型转换异常 问题代码: private static LinkedList<Connection> pool = (LinkedList ...

  7. Docker集群管理(二)—— docker+swarm+etcd+shipyard

    引言 前一篇介绍如何简单的搭建一个可视化管理的docker集群,本篇将在此基础之上引入etcd发现服务. 目的 使用etcd发现服务解决swarm内置发现服务的不稳定问题.etcd采用raft算法,这 ...

  8. scala操作hbase案例

    案例取自streaming-app项目 package com.asiainfo.ocdc.streaming.tools import org.apache.hadoop.hbase.HBaseCo ...

  9. 面向服务的SOA架构与服务总线ESB

    之前的软件的开发主要是面向对象的编程架构 方法---对象---模块---组件---服务,感觉现在的开发的主流的软件架构的设计思想都是对其进行重用,只不过范围越来越大,有一个系统之间进行通信到多个系统之 ...

  10. 搭建pyspider爬虫服务

    1. 环境准备 首先yum更新 yum update -y 安装开发编译工具 yum install gcc gcc-c++ -y 安装依赖库 yum install python-pip pytho ...