101-102_容器_JDK源代码分析_自己实现ArrayList
来源:互联网 发布:modemcu 阿里云搭建 编辑:程序博客网 时间:2024/06/06 02:28
对List接口的实现类ArrayList的常见方法的应用
我们对集合有了深刻的认识,为了加深对ArrayList的了解我们自己封装一个MyArrayList类来模拟ArrayList类,代码如下:
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]; } 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(); } } } 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 void remove(int index) { rangeCheck(index); // 删除指定位置的对象 // a b c d e if (index < 0 || index >= size) { try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } int numMoved = size - index - 1; if (numMoved > 0) { System.arraycopy(elementData, index + 1, elementData, index, numMoved); } elementData[--size] = null; } } 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 static void main(String[] args) { MyArrayList slist = new MyArrayList(3); slist.add(132); slist.add("444"); slist.add(5); slist.add("333"); slist.add("333"); slist.add("abc"); slist.add("ccc"); System.out.println(slist.size); System.out.println(slist.get(6)); } }
阅读全文
0 0
- 101-102_容器_JDK源代码分析_自己实现ArrayList
- 103-104_容器_JDK源代码分析_自己实现LinkedList
- 59_数组_模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- java学习之旅59--模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- 容器第四课,JDK源代码分析,自己实现LinkedList,双向链表的概念_节点定义
- 56-58_数组_StringBuilder和StringBuffer_常用方法_方法链的实现_JDK源码分析_常见面试题
- 106_容器_自己实现HashMap_MyMap原始版_效率较低
- 54-55_数组_String类的常用方法_JDK源码分析_内存分析
- 114_容器_迭代器遍历List和Set_List迭代器源代码分析
- java学习之旅56--数组_StringBuilder和StringBuffer的使用_常用方法_方法链的实现_JDK源码分析
- 111_容器_自定义实现HashSet
- 016_《Delphi源代码分析》
- 107-109_容器_自己实现HashMap_Map底层实现_哈希算法实现_使用数组和链表
- 65_常用类_Date类的使用_JDk源码分析
- 容器第三课,JDK源码分析,自己实现ArrayList数组扩容
- 110_容器_Set_HashSet基本用法_源码分析
- 119_容器_自定义实现迭代器_深入迭代器_迭代器原理_面向对象实现
- 【JavaSE笔记】反射_枚举_JDK新特性
- Unite 2017 干货整理 优化篇
- Java自定义注解
- firefox中的event.clientX问题
- mysql计算年龄
- 思维导图--数据结构导论(4)【3-7章】
- 101-102_容器_JDK源代码分析_自己实现ArrayList
- PAT甲级 1001. A+B Format (20)--两种方法
- 单链表反转
- 响应式内容滑动插件bxSlider
- Vue 指令(Directive)
- mysql sql优化
- Integer使用==判断的问题
- 编写项目(servlet版本的用户管理系统)之前台登录界面
- 一分钟了解"matlab进行特征值分解"