Java ArrayList的底层实现
来源:互联网 发布:网络大电影网购机器人 编辑:程序博客网 时间:2024/05/24 05:00
package com.soto.collection;/** * 自己实现一个ArrayList,帮助我们更好地理解ArrayList的底层结构; * @author 王 * */public class SxtArrayList {private Object[] elementData;private int size;public int size(){return size;}public boolean isEmpty(){return size == 0;}public SxtArrayList(){this(10);}public SxtArrayList(int initialCapacity){if(initialCapacity<0){try {throw new Exception();} catch (Exception e) {e.printStackTrace();}}elementData = new Object[initialCapacity]; //初始化 容量为10 }public void add(Object obj){elementData[size++] = obj; //若超过容量了,那么..数组扩容if(size==elementData.length){//实质:搞个新数组Object[] newarray = new Object[size*2+1];//数组的copy:System.arraycopy(elementData, 0, newarray, 0, elementData.length);elementData = newarray;}}public Object get(int index){rangeCheck(index);return elementData[index];}public void remove(int index){ rangeCheck(index); //删除指定位置对象,删除某位置,相当于 将后往前挪:int numMoved = size-index-1;if(numMoved>0){System.arraycopy(elementData, index+1, elementData, index, numMoved);}}public void remove(Object obj){for(int i=0;i<size;i++){if(get(i).equals(obj)){ //注意底层调用的equals方法而不是==。remove(i);}}}private void rangeCheck(int index){if(index<0||index>size){try {throw new Exception();} catch (Exception e) {e.printStackTrace();}}}public Object set(int index, Object obj){rangeCheck(index); Object oldValue = elementData[index]; elementData[index] = obj; return oldValue;}public void add(int index, Object obj){rangeCheck(index);ensureCapacity(); //扩容System.arraycopy(elementData, index, elementData, index + 1, size - index);elementData[index] = obj;size++;}private void ensureCapacity(){//扩容if(size==elementData.length){//实质:搞个新数组Object[] newarray = new Object[size*2+1];//数组的copy:System.arraycopy(elementData, 0, newarray, 0, elementData.length);elementData = newarray;}}public static void main(String[] args) {SxtArrayList list = new SxtArrayList(3);list.add("222");list.add("333");list.add("444");list.add("555");list.add("666");list.add("777");System.out.println(list.size());System.out.println(list.get(6));}}
0 0
- Java ArrayList的底层实现
- ArrayList底层实现(JAVA)
- JAVA中ArrayList的底层基本实现
- ArrayList的底层实现原理
- java学习之旅59--模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- ArrayList和LinkedList底层实现的区别
- ArrayList,Queue,TreeSet,HashMap的底层实现
- 手动实现简单的ArrayList底层
- ArrayList和LinkedList底层实现的区别
- ArrayList、LinkedList、HashMap的底层实现
- ArrayList和LinkedList底层实现的区别
- Java 的 ArrayList 的底层数据结构
- 自己实现一个ArrayList,模仿ArrayList类的底层结构
- 模拟ArrayList底层实现
- ArrayList底层实现
- ArrayList底层实现
- ArrayList底层实现
- java增删该查的源头 ArrayList增删该查的底层实现
- JavaScript学习笔记28-数组
- 排序8:排序算法的分析
- 高德地图——加载当前位置 LBS获取自定义坐标
- Android AutoLayout全优屏幕适配方式
- 踩完百度首页坑,亲测可用android录像,mediaRecord
- Java ArrayList的底层实现
- postman测试工具
- Android只有一个RadioButton点击后取消选中
- 【Docker学习】之 初识
- 用两个栈实现队列
- C++中break和continue的用法
- TensorFlow-方法train.exponential_decay()
- i&1的用法
- Element type is invalid: expected a string (for built-in components) or a class/function (for compos