ArrayList底层实现源码解析
来源:互联网 发布:万彩动画大师 知乎 编辑:程序博客网 时间:2024/05/22 22:08
package com.collection;import java.util.ArrayList;import java.util.List;/** * 模拟ArrayList底层实现基础方法 * @author Mrzhang * * @param <E> */public class MyArrayList<E> {//基础数组长度设置 private static final int CAPCITY=10;//底层数组transient Object[] elementData;//加入数据长度,不代表数组长度private int size; public MyArrayList(){ this(10);};public MyArrayList(int size){//数组初始化elementData=new Object[size];}//数组扩容处理private void grow(int index){if(size==index){int capcity=elementData.length+(elementData.length>>1); Object[] newArray=new Object[capcity]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData=newArray;}}//越界处理private void rangeCheck(int index){if(index>=size){try {throw new Exception();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("数组越界");} } }//获取长度public int size(){return size;}//添加元素public void add(E e){grow(elementData.length); elementData[size++]=e;}//在指定位置添加元素public void add(int index,E e){rangeCheck(index);grow(elementData.length);//注意 数组长度不等于size 可能比size大很多,下边这种方法可能报异常//int length=elementData.length//System.arraycopy(elementData, index, elementData, index+1,length-index);System.arraycopy(elementData, index, elementData, index+1,size-index);elementData[index]=e;size++;}//替换指定位置元素public void set(int index,E e){rangeCheck(index);elementData[index]=e;} //查看元素public E get(int index){rangeCheck(index);return (E) elementData[index];}//删除元素public E remove(int index){rangeCheck(index);Object obj=elementData[index]; System.arraycopy(elementData, index+1, elementData, index, elementData.length-(index+1)); elementData[size--]=null;return (E)obj;}//删除指定对象 一次删除一个public boolean remove(Object e){if(e==null){for(int i=0;i<elementData.length;i++){if(elementData[i]==null){remove(i);return true;}}}else{for(int i=0;i<elementData.length;i++){if(elementData[i].equals(e)){remove(i);return true;} }}return false;}public static void main(String[] args) {MyArrayList arrayList=new MyArrayList(); arrayList.add("二哈"); arrayList.add("三哈"); arrayList.add("四哈"); arrayList.add(2,"五哈"); arrayList.set(1, "十哈"); arrayList.add(null); arrayList.remove(null); for(int i=0;i<arrayList.size();i++){ System.out.println(arrayList.get(i)); } //这里只实现了我们常用的一些方法,关于其他测试,大家也可以看源码来分析实现}}
0 0
- ArrayList底层实现源码解析
- ArrayList底层实现源码解读
- ArrayList源码解析与实现
- 模拟ArrayList底层实现
- ArrayList底层实现
- ArrayList底层实现(JAVA)
- ArrayList底层实现
- ArrayList底层实现
- ArrayList增删底层源码阅读
- java学习之旅59--模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- 59_数组_模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- 【Javase】ArrayList底层代码实现
- Java ArrayList的底层实现
- ArrayList的底层实现原理
- ArrayList 与 LinkedList 底层实现
- ArrayList 源码解析
- ArrayList源码解析
- android源码解析 -- ArrayList
- Spark RDD API 详解
- 算法片之---汉诺塔
- [leetCode刷题笔记]2017.04.08
- 二叉树先根遍历
- log4j中log.isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled()作用
- ArrayList底层实现源码解析
- Win7下qt5.3.1+opencv2.4.9编译环境的搭建
- 使用Log4j时,为什么要写if (log.isDebugEnabled()) 或 if (log.isInfoEnabled())
- java类库以及组织结构(API)
- 内存共享和qsort
- ubuntu14.04安装搜狗输入法-无法显示搜狗输入法问题
- 【Maven】创建的Maven Web工程无法部署到服务器
- 有序数组的二分法查询、删除、插入java代码
- J2EE:servlet 数据库操作