练习:自己写一个容器ArrayList集合 一一数组综合练习
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集合 一一数组综合练习的更多相关文章
- 练习:自己写一个容器ArrayList集合 一一数组综合练习2
package cn.bjsxt.collection; /** * 自己实现一个ArrayList */ import java.util.ArrayList; import java.util.L ...
- 参考JDK1.8源码,自己写一个类似于ArrayList的动态数组
1. ArrayList的基本实现原理 ArrayLiST其内部用一个普通数组来存储数据,当此数组不够容纳新添加的元素的时候,则创建一个更大长度的新数组,并将原来数组中的元素复制到新数组中. 2.Ar ...
- java基础: ArrayList集合应用, ArrayList增删改查详解,综合java基础实现学生管理系统,
1.ArrayList 集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 1.1 -ArrayList的构造方法和添加方法 public ArrayLi ...
- 手写IOC容器
IOC(控制翻转)是程序设计的一种思想,其本质就是上端对象不能直接依赖于下端对象,要是依赖的话就要通过抽象来依赖.这是什么意思呢?意思就是上端对象如BLL层中,需要调用下端对象的DAL层时不能直接调用 ...
- JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数
第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚 ...
- Java中的容器(集合)之ArrayList源码解析
1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...
- 让我手把手教你写一个强大、方便使用的 IOC 容器
一.介绍 1.介绍 最近无聊,也没什么事做,没事做总是要给自己找点事情做吧,毕竟人的生活在与折腾.于是,决定自己手动写一个 IOC 的框架.我们知道在 NetCore 的版本里面已经内置了 IOC 容 ...
- 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 ...
- (2)自己写一个简单的servle容器
自己写一个简单的servlet,能够跑一个简单的servlet,说明一下逻辑. 首先是写一个简单的servlet,这就关联到javax.servlet和javax.servlet.http这两个包的类 ...
随机推荐
- 洛谷1352没有上司的舞会——树型dp
题目:https://www.luogu.org/problemnew/show/P1352 #include<iostream> #include<cstdio> using ...
- xml表头内容什么意思
我来给你解释一下吧,首先这个文件是一个xml文件,那么他里面的所有内容都符合xml语法规范,开头的<project></project>这最外层同样也是一个xml文件的标签,后 ...
- 【python】网络编程-UDP协议套接字
服务器端: #!/usr/bin/env python from socket import * from time import ctime HOST = '' PORT = 21567 BUFSI ...
- sysbench 0.5 基准测试
sysbench 介绍 SysBench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.它主要包括以下几种方式的测试: cpu性能 磁盘io性能 调度程 ...
- eclipse中的XML文件无法快捷键注释问题
好多朋友都发现在ME6.0或跟高版本中“Ctrl+Shift+c”或者是“Ctrl+Shift+/”快捷键无论你怎么点,它就是不起作用,恼火吧? 百度 还是 google 都没有找到 合理的说法,更有 ...
- BASIC-1_蓝桥杯_闰年判断
正确代码: #include <stdio.h> int main(void){ int year = 0 ; scanf("%d",&year); if (y ...
- 高可用服务设计之二:Rate limiting 限流与降级
<高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <nginx限制 ...
- LBS(基于位置服务)
ylbtech-杂项:LBS(基于位置服务) 基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网.CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标 ...
- selenium进阶
一.切换 1.window窗口切换 @Test public void test3(){ System.out.println(driver.getWindowHandle()); String ol ...
- [UE4]蒙太奇动画运行时不播放,预览是好的
动画实例里面没有添加“DefaultSlot”就会出现这样的问题