ArrayList源码
来源:互联网 发布:愚公移山源码 编辑:程序博客网 时间:2024/05/21 17:29
//这是接口类,myarrylist类实现职责个接口
public interface MyList<E>{
/**添加元素
* @author l
* @param e
* @return
*/
boolean add(E e);
/**判断是否包含
*
* @author l
* @param o
* @return
*/
boolean contains(Object o);
/**移除元素
*
* @author l
* @param o
* @return
*/
boolean remove(Object o);
/** 判断表是否为空
*
* @author l
* @return
*/
boolean isEmpty();
/**清楚表
*
* @author l
* @return
*/
boolean clear();
/**
* 表的大小
* @author l
* @return
*/
int size();
/**
* @author l
* @param t
* @return
*/
Object[] toArray(E[] t);
}
/**添加元素
* @author l
* @param e
* @return
*/
boolean add(E e);
/**判断是否包含
*
* @author l
* @param o
* @return
*/
boolean contains(Object o);
/**移除元素
*
* @author l
* @param o
* @return
*/
boolean remove(Object o);
/** 判断表是否为空
*
* @author l
* @return
*/
boolean isEmpty();
/**清楚表
*
* @author l
* @return
*/
boolean clear();
/**
* 表的大小
* @author l
* @return
*/
int size();
/**
* @author l
* @param t
* @return
*/
Object[] toArray(E[] t);
}
//arraylist类
//里面在接口的基础上还添加了几个方法添加了
//特别注意的是有一个判断数组大小是否足够的方法,不够的时候增加数组长度
//底层就是对一个数组的疯狂操作
package myCollection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Arrays;
import java.util.Iterator;
public class MyArrayList<E> implements MyList<E> {
/**
* jdk8
* 给id版本唯一编号
*/
//private static final long serialVersionUID = 8683452581122892189L;
/**
* 表的底层依赖,说白了就是数组,后面的方法就是对这个数组的各种操作
*/
private transient Object[] dataElement;
private int size;
//规定大小的构造方法
//给dataelement定大小
public MyArrayList(int initialCapacity){
if (initialCapacity<0) {
throw new RuntimeException(initialCapacity+"表的大小不能为负数");
}
this.dataElement= new Object[initialCapacity];
}
/**
* 默认表的大小是10
*/
public MyArrayList(){
this(10);
}
//检查是否越界
public void rangeCheck(int index){
if (index>size) {
throw new RuntimeException(index+"越界");
}
}
/**
* 确保表有足够空间做添加操作
* @param index
*/
public void ensureCapacity(int minCapacity){
int oldCapacity=dataElement.length;
if (oldCapacity<minCapacity) {
oldCapacity=oldCapacity*2;
if (minCapacity>oldCapacity) {
oldCapacity=minCapacity;
}
dataElement=Arrays.copyOf(dataElement, oldCapacity);
}
}
public boolean add(E e) {
ensureCapacity(size+1);
dataElement[size++]=e;
return true;
}
* jdk8
* 给id版本唯一编号
*/
//private static final long serialVersionUID = 8683452581122892189L;
/**
* 表的底层依赖,说白了就是数组,后面的方法就是对这个数组的各种操作
*/
private transient Object[] dataElement;
private int size;
//规定大小的构造方法
//给dataelement定大小
public MyArrayList(int initialCapacity){
if (initialCapacity<0) {
throw new RuntimeException(initialCapacity+"表的大小不能为负数");
}
this.dataElement= new Object[initialCapacity];
}
/**
* 默认表的大小是10
*/
public MyArrayList(){
this(10);
}
//检查是否越界
public void rangeCheck(int index){
if (index>size) {
throw new RuntimeException(index+"越界");
}
}
/**
* 确保表有足够空间做添加操作
* @param index
*/
public void ensureCapacity(int minCapacity){
int oldCapacity=dataElement.length;
if (oldCapacity<minCapacity) {
oldCapacity=oldCapacity*2;
if (minCapacity>oldCapacity) {
oldCapacity=minCapacity;
}
dataElement=Arrays.copyOf(dataElement, oldCapacity);
}
}
public boolean add(E e) {
ensureCapacity(size+1);
dataElement[size++]=e;
return true;
}
@Override
public boolean contains(Object o) {
// TODO Auto-generated method stub
if (indexof(o)>=0) {
return true;
}
return false;
}
@Override
/**
*
*/
public boolean remove(Object o) {
// TODO Auto-generated method stub
for (int i = 0; i < size; i++) {
if (dataElement[i].equals(o)) {
remove(i);
i--;
}
}
return true;
}
public boolean contains(Object o) {
// TODO Auto-generated method stub
if (indexof(o)>=0) {
return true;
}
return false;
}
@Override
/**
*
*/
public boolean remove(Object o) {
// TODO Auto-generated method stub
for (int i = 0; i < size; i++) {
if (dataElement[i].equals(o)) {
remove(i);
i--;
}
}
return true;
}
public E remove(int index) {
rangeCheck(index);
Object oldValue=dataElement[index];
for (int i = index; i < size-2; i++) {
dataElement[index]=dataElement[index+1];
}
size=size-1;
return (E) oldValue;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return size==0;
}
rangeCheck(index);
Object oldValue=dataElement[index];
for (int i = index; i < size-2; i++) {
dataElement[index]=dataElement[index+1];
}
size=size-1;
return (E) oldValue;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return size==0;
}
//清空表
@Override
public boolean clear() {
for (int i = 0; i < size; i++) {
dataElement[i]=null;
}
return true;
}
@Override
public boolean clear() {
for (int i = 0; i < size; i++) {
dataElement[i]=null;
}
return true;
}
@Override
public int size() {
return size;
}
//调用的是Arrays数组的方法
@Override
public Object[] toArray(E[] t) {
// TODO Auto-generated method stub
return Arrays.copyOf(dataElement, size);
}
public int size() {
return size;
}
//调用的是Arrays数组的方法
@Override
public Object[] toArray(E[] t) {
// TODO Auto-generated method stub
return Arrays.copyOf(dataElement, size);
}
/**
* 获取指定位置的元素
*@author l
* @param index
* @return
*/
public E get(int index){
rangeCheck(index);
return (E)dataElement[index];
}
/**
* @author l
* @param index
* @param data
* @return
*/
public boolean set(int index,E data){
rangeCheck(index);
dataElement[index]=data;
return true;
}
/**在指定位置添加元素,后面的元素向后移
* @author l
* @param index
* @param data
* @return
*/
public boolean add(int index,E data){
rangeCheck(index);
ensureCapacity(size+1);
for (int i = size; i >index; i--) {
dataElement[i]=dataElement[i-1];
}
dataElement[index]=data;
size=size+1;
return true;
}
* 获取指定位置的元素
*@author l
* @param index
* @return
*/
public E get(int index){
rangeCheck(index);
return (E)dataElement[index];
}
/**
* @author l
* @param index
* @param data
* @return
*/
public boolean set(int index,E data){
rangeCheck(index);
dataElement[index]=data;
return true;
}
/**在指定位置添加元素,后面的元素向后移
* @author l
* @param index
* @param data
* @return
*/
public boolean add(int index,E data){
rangeCheck(index);
ensureCapacity(size+1);
for (int i = size; i >index; i--) {
dataElement[i]=dataElement[i-1];
}
dataElement[index]=data;
size=size+1;
return true;
}
/**
* 查找元素编号,
* 无返回-1
* @param o
* @return
*/
public int indexof(Object o){
for (int i = 0; i < dataElement.length; i++) {
if (dataElement[i].equals(o)) {
return i;
}
}
return -1;
}
}
* 查找元素编号,
* 无返回-1
* @param o
* @return
*/
public int indexof(Object o){
for (int i = 0; i < dataElement.length; i++) {
if (dataElement[i].equals(o)) {
return i;
}
}
return -1;
}
}
阅读全文
1 0
- ArrayList源码
- ArrayList源码
- ArrayList源码
- ArrayList源码
- ArrayList源码
- ArrayList源码
- ArrayList源码
- ArrayList源码
- ArrayList源码
- 【源码】ArrayList源码剖析
- JDK源码-ArrayList源码
- ArrayList源码分析
- ArrayList源码分析
- ArrayList 源码分析
- ArrayList源码分析
- ArrayList LinkedList 源码分析
- java 源码ArrayList剖析
- ArrayList 源码解析
- 巨海商学院、双十一自救指南
- windows(64位)下使用curl安装
- 关于http转https签名的意见
- Django-restframework07 视图函数基类和路由类
- 171108 python编程小记-Frequently Updated
- ArrayList源码
- 关于uboot启动中地址的问题
- easyui combotree清空
- 多线程进阶--线程的中断
- iframe实现无限次轮询
- python os.path模块
- js正则验证0~4094范围
- GDI+绘制矩形,并且实现可旋转、缩放、移动功能(基于MFC对话框)
- 博客登录实现权限拦截