自己动手实现集合框架类(一)之ArrayList
来源:互联网 发布:淘宝店铺可以申请几个 编辑:程序博客网 时间:2024/06/11 21:26
最近看了java.util包下的集合类,学习其中的原理,参照底层方法,自己实现。
定义集合Collection接口:
package com.java.myutil;public interface Collection { public void add(Object object); public int size(); public Iterator iterator(); public Object get(int i); public void remove(Object object);}
定义迭代器接口:
package com.java.myutil;public interface Iterator { boolean hasNext(); Object Next(); void remove();}
ArrayList比较简单,底层就是一个数组的结构,实现如下:
ArrayList的实现:
package com.java.myutil;public class ArrayList implements Collection{ //底层就是一个数组结构 private Object[] dataObjects; private int size; private static final int DEFAULT_CAPACITY = 10; public ArrayList() { dataObjects=new Object[DEFAULT_CAPACITY]; size=0; } //数组中添加数据,如果超出了原始的大小,就扩展数组 public void add(Object object) { if (size==dataObjects.length) { ensureCapacity(); } dataObjects[size]=object; size++; } //删除数组中的原始 public void remove(Object object) { for (int i = 0; i < size; i++) { if (object.equals(dataObjects[i])) { int numMove=size-i-1; System.arraycopy(dataObjects, i+1, dataObjects, i, numMove); dataObjects[--size]=null; } } } //扩展数组大小 private void ensureCapacity() { Object [] newObjects=new Object[dataObjects.length*2]; System.arraycopy(dataObjects, 0, newObjects, 0, dataObjects.length); dataObjects=newObjects; } public int size() { return size; } public Object get(int i) { if (i<0 ||i>size-1) { throw new IndexOutOfBoundsException(); } return dataObjects[i]; } /*迭代器的实现*/ private class ArrayListIterator implements Iterator{ private int index=0; private int lastIndex=-1;//存一下上一次的操作的位置,remove方法需要记录上一次操作的位置 public boolean hasNext() { return index!=size; } public Object Next() { lastIndex=index; return dataObjects[index++]; } public void remove() { if (lastIndex<0) { throw new IllegalStateException(); } //删除元素,就是将要删掉元素的位置的后面的元素向前面移动 int numMoved=size-lastIndex-1; System.arraycopy(dataObjects, lastIndex+1, dataObjects, lastIndex, numMoved); dataObjects[--size]=null; index--; lastIndex=-1;//lastIndex直接赋值-1,因为remove方法和next方法是相互依赖的,remove之前必须调用next方法 } } public Iterator iterator() { return new ArrayListIterator(); } public static void main(String[] args) { ArrayList myaArrayList=new ArrayList(); myaArrayList.add("aaa"); myaArrayList.add("bbb"); myaArrayList.add("ccc"); Iterator it=myaArrayList.iterator(); while (it.hasNext()) { System.out.println(it.Next()); } //myaArrayList.remove("bbb"); Iterator it2=myaArrayList.iterator(); while (it2.hasNext()) { it2.remove(); } System.out.println(myaArrayList); }}
阅读全文
0 0
- 自己动手实现集合框架类(一)之ArrayList
- 自己动手实现集合框架类(二)之LinkedList
- 自己动手实现集合框架类(三)之HashMap
- 自己动手实现集合框架类(四)之LinkedHashMap
- java集合框架List之ArrayList(一)
- java集合框架List之ArrayList(一) .
- Java集合框架之List(一):ArrayList
- 集合框架中的实现类-ArrayList
- 一、集合之ArrayList
- 08.集合框架(一)【集合概述】【接口Collection,Iterator,List,ListIterator】【类LinkedList,ArrayList】
- java集合框架之ArrayList
- Java集合框架之ArrayList
- JavaSE入门学习35:Java集合框架之List接口及其实现类ArrayList和LinkedList
- Java集合一之ArrayList
- 自己动手实现ArrayList
- 集合实现类ArrayList
- 框架学习之自己动手实现Struts框架
- C# 集合类(一):ArrayList
- 嵌入式系统Linux内核开发工程师必须掌握的三十道题
- 1012. 数字分类 (20)
- UIResponder
- 带外数据OOB与紧急模式URG
- 调试经验
- 自己动手实现集合框架类(一)之ArrayList
- ElasticSearch集群脑裂,怎么办?
- 解决link_to 中delete无效的问题
- openJDK切换版本
- JS05-语法
- 复信号(Complex)的相乘(multiplying)或混频(mixing)
- java后台解决系统跨域问题
- fastjson常用方法总结
- 如何在Python中实现矩阵分析