陌兮大魔王带你深入 学习ArrayList(二)
来源:互联网 发布:windows日志 u盘 编辑:程序博客网 时间:2024/05/29 03:16
前引
上一篇文章已经讲解了ArrayList的源码。这一章节,我们主要是来实现自己的ArrayList。看完ArrayList的源码之后,大家肯定都发现了自己定义一个也并不难。是不是有点雀雀预试的感觉?
自定义实现ArrayList
这里就不多说了,直接附上自己的代码吧(这里是引用别人的代码):
package com.wxp.collectionTest;public class MyArrayList {private Object[] elementData;private int size;public int size(){return size;}public boolean isEmpty(){return size==0;}public MyArrayList(){this(10);}public MyArrayList(int initialCapacity){if(initialCapacity<0){try {throw new Exception();} catch (Exception e) {e.printStackTrace();}}elementData = new Object[initialCapacity];}public void add(Object obj){//数组扩容和数据的拷贝if(size==elementData.length){Object[] newArray = new Object[size*2+1];System.arraycopy(elementData, 0, newArray, 0, elementData.length);//for(int i=0;i<elementData.length;i++){//newArray[i] = elementData[i];//}elementData = newArray;}elementData[size++]=obj;//size++;}public Object get(int index){rangeCheck(index);return elementData[index];}public void remove(int index){rangeCheck(index);//删除指定位置的对象//a b d eint numMoved = size - index - 1;if (numMoved > 0){System.arraycopy(elementData, index+1, elementData, index,numMoved);}elementData[--size] = null; // Let gc do its work}public void remove(Object obj){for(int i=0;i<size;i++){if(get(i).equals(obj)){ //注意:底层调用的equals方法而不是==.remove(i);}}}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];System.arraycopy(elementData, 0, newArray, 0, elementData.length);//for(int i=0;i<elementData.length;i++){//newArray[i] = elementData[i];//}elementData = newArray;}}private void rangeCheck(int index){if(index<0||index>=size){try {throw new Exception();} catch (Exception e) {e.printStackTrace();}}}}讲解恐怕也没什么好讲了的。大部分都是仿照ArrayList实现的。大家也可以下去练一练手,主要是看看别人的封装技巧!虽然就是这么简短的代码,但是每一个人都在用,而且还没有人想用别的什么类似的容器取代他,用来存放经常被查询的数据的地位,足以见得,封装思维的巧妙!
2 0
- 陌兮大魔王带你深入 学习ArrayList(二)
- 陌兮大魔王带你深入 学习ArrayList(一)
- 带你分析字节码-深入理解class(二)
- 带你学习Jquery(二):选择器
- 带你全方位学习Picasso(二)
- Android 进阶学习:Android视图绘制流程完全解析,带你一步步深入了解View(二)
- Android 进阶学习:Android视图绘制流程完全解析,带你一步步深入了解View(二)
- 教你写Http框架(二)——三个例子带你深入理解AsyncTask
- 【Java深入】ArrayList源码剖析(二)
- Android EventBus源码解析 带你深入理解EventBus(二)
- (郭霖)Android视图绘制流程完全解析,带你一步步深入了解View(二)
- 带你系统学习GCD(二)
- [小说]魔王冢(16)寻凶(二)
- [小说]魔王冢(40)谈判(二)
- [小说]魔王冢(62)置之死地(二)
- ArrayList的深入理解(学习)
- 深入学习Java之ArrayList
- 带你解锁蓝牙skill(二)
- 开启聊天机器人模式
- Codeforces 764A Taymyr is calling you(水题翻译)
- Git学习使用(三):版本控制
- 关于用webpack并且实现在手机上面测试项目
- .Net基础体系和跨框架开发普及
- 陌兮大魔王带你深入 学习ArrayList(二)
- JZOJ 3366. 【NOI2012】随机数生成器
- 我的科研生活2017-2-9
- springmvc中RESTful的写法
- 聪明人的共性
- java反射技术
- Android JSON数据解析
- Python中遇到"UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequ
- Python大数据处理模块Pandas