自己实现一个简单的ArrayList
来源:互联网 发布:mac检测硬件信息 编辑:程序博客网 时间:2024/06/05 01:57
自己简单的实现ArrayList的代码,代码注解很清楚了,写了ArrayList的add(obj)方法
remove(index)方法,get(index)方法, 自己定义迭代器,自己进行迭代:
迭代器接口:
public interface Iterator { /** * 判断是否有下一个 */ boolean hasNext(); /** * 下一个返回的元素 */ Object next(); /** * 是否是第一个元素 */ boolean isFirst(Object obj);}
集合代码的实现
/** * @version * @description 自己实现 集合 */public class MyListArrayList{ // ArrayList 的实现原理 是数组 private Object[] elementData; // 集合中有几个元素 private int size; /** * 集合中 有几个 元素 */ public int size() { return size; } // 构造 public MyListArrayList() { this(10); } public MyListArrayList(int initialCapacity) { this.elementData = new Object[initialCapacity]; } /** * 添加元素的方法 */ public void add(Object obj) { gorw(size + 1); elementData[size++] = obj; } public boolean isEmpty() { return size == 0; } /** * 通过 下标 来返回 集合中对应 的 下标的 元素 * */ public Object get(int index) { rangeCheck(index); // 检查 下标是否 越界没有 return elementData[index]; } /** * 通过 下标来移除对应的元素 */ public void remove(int index) { rangeCheck(index); // 删除 之前的 // a b c d e 移除下标为 2 的元素 // 5 - 2 - 1 = 2 // 删除 移动之后的 数组 // a b d e(移动的个数) int numMoved = size - index - 1; // index + 1 /** * src -源数组 * srcPos -源数组中的起始位置。 * dest -目标数组。 * destPos在目标数据的起始位置。 l * ength-数组元素的数目被复制。 */ System.arraycopy(elementData, index + 1, elementData, index, numMoved); // 把最后的 位置 给空 长度 减一 elementData[--size] = null; } /** * 通过 obj移除 */ public void remove(Object obj) { for (int i = 0; i < elementData.length; i++) { if (obj.equals(elementData[i])) { remove(i); } } } /** * 是否包含 */ public boolean contain(Object obj) { for (int i = 0; i < elementData.length; i++) { if (obj.equals(elementData[i])) { return true; } } return false; } /** * 下标 越界 抛出异常 */ private void rangeCheck(int index) { if (index >= size) { throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); } } /** * 超过 下标 越界 给出的 信息 */ private String outOfBoundsMsg(int index) { // TODO Auto-generated method stub return "Index: " + index + ", Size: " + size; } /** * 数组的自动扩容 */ private void gorw(int minCapacity) { int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); elementData = Arrays.copyOf(elementData, newCapacity); } /** * 获取 迭代器 */ public Iterator iterator() { return new Itr(); } /** * 自己定义的迭代器 * @version * @description */ private class Itr implements Iterator{ int cursor; // index of next element to return @Override public boolean hasNext() { return cursor != size; } @Override public Object next() { int i = cursor; Object[] elementData = MyListArrayList.this.elementData; cursor = i + 1; return elementData[i]; } @Override public boolean isFirst(Object obj) { Object[] elementData = MyListArrayList.this.elementData; return elementData[0].equals(obj); } }}
测试类代码实现:
/** * @version * @description 测试自己定义的 集合类 */public class MyListTest { public static void main(String[] args) { MyListArrayList myListArrayList = new MyListArrayList(4); //添加方法 myListArrayList.add("aa"); myListArrayList.add("11"); myListArrayList.add("cc"); myListArrayList.add("22"); myListArrayList.add("小马哥"); //移除方法 myListArrayList.remove("aa"); myListArrayList.remove("11"); //是否包含 System.out.println(myListArrayList.contain("222")); System.out.println(myListArrayList.size()); //获取元素方法 System.out.println(myListArrayList.get(2)); System.out.println("*******遍历************"); for (int i = 0; i < myListArrayList.size(); i++) { System.out.println(myListArrayList.get(i)); } System.out.println("*******iterator*******"); Iterator iterator = myListArrayList.iterator(); //是否为第一个 boolean flag = iterator.isFirst("cc"); while (iterator.hasNext()) { System.out.println(iterator.next()); } }}
阅读全文
0 0
- 自己实现一个简单的ArrayList
- 自己写一个简单的ArrayList
- 自己实现一个ArrayList,模仿ArrayList类的底层结构
- 简单实现一个ArrayList
- 用java实现一个简单的ArrayList
- 自己手写简单的ArrayList
- 自己写的一个ArrayList
- 12、自己实现的ArrayList
- 自己实现一个泛型ArrayList
- java中自己实现一个ArrayList
- 自己写的一个hibernate简单实现
- 自己实现一个简单的Promise
- 自己实现一个最简单的数据库
- 自己实现一个最简单的数据库
- 自己实现一个最简单的数据库
- 自己实现一个简单版的HashMap
- 自己实现一个简单的ftp软件
- 自己实现一个简单的AVL树
- 《Insights for ArcGIS数据可视化及分析利器》学习笔记
- Centos7禁用密码登录
- ubuntu16.04 锁屏界面卡死
- Ubuntu16.04 Jupyter安装(Ipython Notebook安装)
- 单调队列优化
- 自己实现一个简单的ArrayList
- 判定某个整数是否能被7整除
- apidoc 安装与使用示例生成 Api文档
- request 获取各种路径
- 参数初始化
- TestNG+Jenkins+Maven参数化测试dubbo接口
- spring中轻松实现定时任务,quartz表达式的在线Cron表达式生成器推荐
- 树形DP
- 反转链表