练习:自己写一个容器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这两个包的类 ...
随机推荐
- golang defer的使用
defer一般用于在函数结束时执行必要的处理工作.例如,关闭文件描述符,关闭网络连接等等. 函数中可以定义多个defer,执行的时候按照先进后出的顺序. defer定义的语句,即使遇到panic,也会 ...
- axis2开发webservice总结
需求环境:对接方公司提供wsdl文件,我方按照该wsdl文件开发服务端. 配置axis2开发环境,网上教程很多,不再啰嗦.环境搭好后执行wsdl2java -uri file:///C:/Users/ ...
- 转换sql文件的create table语句为drop table语句
package com.csii.pweb.query.action; import java.io.BufferedReader; import java.io.FileNotFoundExcept ...
- .NET : Func委托和Action委托
其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: public delegate void myDeleg ...
- BASIC-11_蓝桥杯_十六进制转十进制
注意事项: 1.长数据注意选择long long类型,用%ldd输出,防止数据溢出; 示例代码: #include <stdio.h>#include <string.h>#i ...
- 17monipdb.dat
17monipdb是一款全球ipv4地址归属地数据库.专注于与地理位置定位相关的数据的整理与发行,致力于将地理位置数据变得更准确.更精确,该 IP 库主要基于 BGP/ASN 数据以及遍布全球的网络监 ...
- Windows 应用程序交互过程
应用程序 Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视化的交互方式(窗口是由线程(Thread)创建的).Windows 系统通过消息机制来让系统和用户进行交互 ...
- mysql 不能插入中文和显示中文
一)不能显示中文解决办法: 参考:http://bbs3.chinaunix.net/thread-880131-1-1.html 1:windows平台,因为windows操作系统默认的是用了gb2 ...
- Oauth2.0(六):Resource Owner Password Credentials 授权和 Client Credentials 授权
这两种简称 Password 方式和 Client 方式吧,都只适用于应用是受信任的场景.一个典型的例子是同一个企业内部的不同产品要使用本企业的 Oauth2.0 体系.在有些情况下,产品希望能够定制 ...
- mybatis匹配字符串的坑
where语句中我们经常会做一些字符串的判断,当传入的字符串参数为纯数字时,在mybatis的条件语句test里匹配全数字字符串需要注意会有如下现象: 所以里面的字符串需要加单引号,mybatis是匹 ...