练习:自己写一个容器ArrayList集合 一一数组综合练习2
package cn.bjsxt.collection; /**
* 自己实现一个ArrayList
*/
import java.util.ArrayList;
import java.util.List; public class SxtArrayList /* implements List */{ private Object[] elementDate;
// 要放入的元素大小
private int size; public int size() {
return size;
} // 无参构造器
public SxtArrayList() {
// 默认容量10
this(); } // 有参构造器 initialCapacity初始容量 public SxtArrayList(int initialCapacity) { if (initialCapacity < ) {
try {
throw new Exception();
} catch (Exception e) { e.printStackTrace();
}
}
elementDate = new Object[initialCapacity];
} // 添加方法
public void add(Object obj) {
// 数组扩容
if (size >= elementDate.length) {
Object[] newArray = new Object[size * / + ];
// 数据copy 原数组
System.arraycopy(elementDate, , newArray, , elementDate.length);
// for(int i=0;i<elementDate.length;i++){
// newArray[i]=elementDate[i];
// }
// 换成新的数组
elementDate = newArray;
}
elementDate[size] = obj;
size++;
} // 判断是否为空
public boolean isEmpty() {
return size == ;
} // 获取下标索引元素
public Object get(int index) {
// 索引判断的方法 我们下面对其进行了封装 既方法 rangeCheck();
rangeCheck(index);
// if(index<0||index>=size){
// try {
// throw new Exception();
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
return elementDate[index];
} public void remove(int index) {
// 下标判断
rangeCheck(index); int numMoved = size - index - ;
if (numMoved > ) { // 数据copy
System.arraycopy(elementDate, index + , elementDate, index,
numMoved);
}
elementDate[size] = null;
--size; elementDate=elementDate; }
public void remove(Object obj){ for(int i=;i<size;i++){
//底层掉的是equals方法 而不是==
if(get(i).equals(obj)){
remove(i); }
} }
//
public Object set(int index,Object obj){
rangeCheck(index);
Object oldValue = elementDate[index];
return oldValue;
} public void rangeCheck(int index) {
// 索引判断的方法 我们下面对其进行了封装 既方法 rangeCheck();
if (index >= size) {
try {
throw new Exception();
} catch (Exception e) { e.printStackTrace();
}
} }
public void ensureCapacity(){
// 数组扩容
if (size >= elementDate.length) {
Object[] newArray = new Object[size * / + ];
// 数据copy 原数组
System.arraycopy(elementDate, , newArray, , elementDate.length);
// for(int i=0;i<elementDate.length;i++){
// newArray[i]=elementDate[i];
// }
// 换成新的数组
elementDate = newArray;
}
}
//
public void add(int index , Object obj){
//下标判断
rangeCheck(index);
// 数组扩容
ensureCapacity(); System.arraycopy(elementDate, index, elementDate, index+, size-index);
elementDate[index]=obj;
size++;
} public static void main(String[] args) { SxtArrayList list = new SxtArrayList();
list.add("");
list.add("");
list.add("");
list.add("");
list.add("");
list.add("");
// System.out.println(list.size());
// System.out.println(list.isEmpty());
// System.out.println(list.get(4));
// System.out.println(list.get(5));
// System.out.println(list.get(6));
// list.remove(5);
// System.out.println(list.get(5));
System.out.println(list.size());
for(int i=;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
练习:自己写一个容器ArrayList集合 一一数组综合练习2的更多相关文章
- 练习:自己写一个容器ArrayList集合 一一数组综合练习
package cn.bjsxt.myCollection; import java.util.Arrays; /** * 天下文章一大抄,看你会抄不会抄. * 模拟Stringbuilder 写一个 ...
- 参考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这两个包的类 ...
随机推荐
- php 5.2.17 升级到5.3.29
修改php.ini配置文件 register_globals =On include_path = ".;d:/testoa/webroot" error_reporting = ...
- java 物理资源回收 finally与try
java垃圾回收机制不会回收任何物理资源(磁盘文件.数据库连接.网络连接),垃圾回收机制只能回收堆内存中对象所占用的内存. 方法一使用finally块,在finally块中写入资源回收代码,如下: p ...
- Spring Cloud 入门 之 Config 篇(六)
原文地址:Spring Cloud 入门 之 Config 篇(六) 博客地址:http://www.extlight.com 一.前言 随着业务的扩展,为了方便开发和维护项目,我们通常会将大项目拆分 ...
- Spring3 MVC请求参数获取的几种方法[转载]
http://www.cnblogs.com/leiOOlei/p/3658147.html 一. 通过@PathVariabl获取路径中的参数 @RequestMapping(value= ...
- Linux系统管理员非常使用的几款工具推荐
1. ExplainShell.com 命令解释 对于Linux用户来说每天都会写各种命令和脚本,那么你可以使用这个网站工具来查看命令式如何工作的,这样可以避免不必要的错误出现:也是一个很好的学习命令 ...
- java操作Excel之POI(1)
一.新建工作簿.sheet.单元格 public static void main(String[] args) throws Exception { Workbook wb = new HSSFWo ...
- springMVC学习(8)-数据回显
什么是数据回显: 提交后,如果出现错误(或者别的情况),将刚才提交的数据回显到刚才的提交页面. pojo数据回显方法: 一.springmvc默认对pojo数据进行回显. 比如现在的jsp页面提示出现 ...
- 【Ethereum】以太坊ERC20 Token标准完整说明
什么是ERC20 token 市面上出现了大量的用ETH做的代币,他们都遵守REC20协议,那么我们需要知道什么是REC20协议. 概述 token代表数字资产,具有价值,但是并不是都符合特定的规范. ...
- poj 3046 Ant Counting(多重集组合数)
Ant Counting Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...
- python selenium-6 HTML测试报告
1.生成HTML测试报告 import unittest,sys from selenium import webdriver from time import sleep class TestBai ...