ArrayList概念及手写代码
来源:互联网 发布:淘宝新品怎么做爆款 编辑:程序博客网 时间:2024/05/16 14:47
一、ArrayList的底层是Object类的数组,默认长度是10,超过10后,长度变为原长度的1.5倍。
二、可以简单的认为是一个动态数组;实际上ArrayList就是用数组实现的,长度不够时,调用Arrays.copyOf方法,拷 贝当前数组到一个新的长度更大的数组。
三、特点:随机访问速度快,插入和移除性能较差(数组的特点);
支持null元素;
有顺序;
元素可以重复;
线程不安全。
四、手写ArrayList
public class MyArrayList {
private Object[] elementData; //实质:Object数组
private int size; //长度
public MyArrayList(){ //默认初始长度是10
this(10);
}
public MyArrayList(int initalCapacity){ //赋初值时,判断初值是否大于0
if(initalCapacity<0){
try{
throw new Exception(); //不是就抛异常
}catch(Exception e){
e.printStackTrace();
}
}
elementData = new Object[initalCapacity]; //是就给Object;
}
public int size(){ //定义判断长度方法size()
return size;
}
public boolean isEmpty(){ //判断是否非空
return size == 0;
}
public void rangeCheck(int index){ //数组越界判断,是就抛异常
if(index<0 || index>=size){
try{
throw new Exception();
}catch(Exception e){
e.printStackTrace();
}
}
}
public void ensureCapacity() { //扩展长度
if(size>=elementData.length) {
Object[] temp = new Object[elementData.length*3/2];
System.arraycopy(elementData, 0, temp, 0, size);
elementData = temp;
}
}
/*
*增删改查
*/
public void add(Object obj) {
ensureCapacity();
elementData[size++] = obj;
}
public void add(int index, Object obj) {
rangeCheck(index);
ensureCapacity();
System.arraycopy(elementData, index, elementData, index+1, size-index);
elementData[index] = obj;
size++;
}
public Object get(int index) {
rangeCheck(index);
return elementData[index];
}
public Object set(int index, Object obj) {
rangeCheck(index);
Object oldValue = elementData[index];
elementData[index] = obj;
return oldValue;
}
public void remove(int index) {
rangeCheck(index);
ensureCapacity();
System.arraycopy(elementData, index+1, elementData, index, size-index-1);
size--;
}
public static void main(String[] args) {
MyArrayList list = new MyArrayList(2);
list.add("a");
list.add("b");
System.out.println(list.size());
list.add(1, "c");
System.out.println(list.get(1));
list.remove(1);
System.out.println(list.get(1));
}
}
五、实现与继承关系:
- ArrayList概念及手写代码
- 手写arrayList
- 手写ArrayList,LinkedList
- 机器学习概念-手写
- 手写实现Java ArrayList实现
- 自己手写简单的ArrayList
- 常见面试题手写ArrayList
- BP神经网络识别手写数字项目解析及代码
- CNN卷积神经网络手写数字识别实例及代码详解
- 二叉排序树概念及代码实现
- ORACLE 基础概念及代码
- ORACLE 基础概念及代码
- ArrayList的简单实现(手写)
- 手写Ajax核心代码
- Ajax手写代码应知应会
- 手写代码--->模仿记事本
- spring 原理手写代码
- JS手写AJAX代码
- 斐波那契数列在php中的简单实现
- Hibernate查询缓存
- matlab快速入门2——数据载入与保存
- python django日志器的使用及配置
- beego使用orm插入大量数据,回滚报错:buffer busy
- ArrayList概念及手写代码
- ThreadLocal原理
- tensorflow系列(4)tfrecords的使用
- git merge,rebase和*(no branch)
- java的Map和Map.Entry
- 837C_Two Seals
- 【HDU
- [caioj]1492: 基于连通性状态压缩的动态规划问题:Pipes
- HDU