数据结构: Java中ArrayList的简单实现
来源:互联网 发布:linux文件类型 编辑:程序博客网 时间:2024/06/05 16:19
上学期的数据结构这门课学到了图。用C语言把书上介绍的内容都实现了一遍,但感觉学校教的都太基础了。
这个学期准备先重温一下,然后再深入一点学习算法和数据结构。
语言使用Java, 目前买了3本书《Algorithms (4th edition)》、《数据结构预算法 Java语言描述》、《算法分析与设计基础》
下面是我自己实现的简单版本的支持泛型的线性表。
ArrayList的优点: get和set方法的运行时间为O(1)
ArrayList的缺点: add和remove操作为花费的时间很多,除非是在表的末尾。
MyArrayList底层使用数组来实现,所以需要考虑数组下标和容量问题。如果容量不够的时候,需要自动增加容量。trimToSize()方法可以释放多余的容量,使之与线性表的长度相匹配。
ArrayListIterator为了跟MyArrayList更好地通信,所以作为MyArrayList的内部类。
package list;import java.util.Iterator;public class MyArrayList<T> implements Iterable<T> { //默认容量和增量 private static final int DEFAULT_CAPACITY = 10; private static final int CAPACITY_INCREMENT = 5; //存放的元素数量 private int size = 0; //数组本身 private T[] items; /** * 默认初始化10容量的数组 */ public MyArrayList() { super(); init(); } /** * 初始化initSize容量的数组 * @param initSize */ public MyArrayList(int initSize) { super(); init(initSize); } @SuppressWarnings("unchecked") private void init(){ items = (T[]) new Object[DEFAULT_CAPACITY]; } @SuppressWarnings("unchecked") private void init(int initSize){ items = (T[]) new Object[initSize]; } public void clear(){ size = 0; init(); } @SuppressWarnings("unchecked") public void trimToSize(){ T[] newItems = (T[]) new Object[size]; for(int i=0; i<size; i++){ newItems[i] = items[i]; } items = newItems; } public boolean isEmpty(){ return size == 0; } public int size(){ return size; } /** * 在数组末尾添加一个T类型的item * @param item 插入的item值 * @return */ public void add(T item){ ensureCapacity(); items[size] = item; ++size; } /** * 在索引位置插入一个item * @param idx 索引位置 * @param item 插入的item的值 * @return */ public void add(int idx, T item){ if(idx < 0 || idx > size){ throw new ArrayIndexOutOfBoundsException(); } ensureCapacity(); for(int i=size;i>idx;i--){ items[i] = items[i-1]; } items[idx] = item; ++size; } /** * 获取索引位置的元素 * @param idx 索引位置 * @return */ public T get(int idx){ if(idx < 0 || idx >= size){ throw new ArrayIndexOutOfBoundsException(); } return (T) items[idx]; } /** * 将idx位置的元素设置成item * @param idx 索引位置 * @param item 新的item值 * @return 旧的idx位置的item值 */ public T set(int idx, T item){ if(idx < 0 || idx >= size){ throw new ArrayIndexOutOfBoundsException(); } T oldItem = items[idx]; items[idx] = item; return oldItem; } /** * 移除idx处的元素 * @param idx 元素的索引 * @return 返回被移除的item */ public T remove(int idx){ if(idx < 0 || idx >= size){ throw new ArrayIndexOutOfBoundsException(); } T oldItem = items[idx]; for(int i=idx;i<size-1;i++){ items[i] = items[i+1]; } size--; return oldItem; } /** * 数组容量不够时增加容量,确保不会越界。重要 */ @SuppressWarnings("unchecked") private void ensureCapacity(){ if(size==items.length){ T[] newItems = (T[]) new Object[size+CAPACITY_INCREMENT]; for(int i=0; i<size; i++){ newItems[i] = items[i]; } items = newItems; } } @Override public Iterator<T> iterator() { return new ArrayListIterator(); } private class ArrayListIterator implements Iterator<T>{ private int position = 0; @Override public boolean hasNext() { return position < size(); } @Override public T next() { return (T) items[position++]; } public void remove(){ MyArrayList.this.remove(--position); } }}
0 0
- 数据结构: Java中ArrayList的简单实现
- 数据结构--ArrayList的Java实现
- 简单实现java中ArrayList
- 数据结构之ArrayList的简单实现
- 数据结构: Java中LinkedList的简单实现
- java中ArrayList的实现
- 数据结构(Java语言)——ArrayList简单实现
- java的ArrayList的简单实现
- 用java实现一个简单的ArrayList
- 数据结构-Java实现-ArrayList&LinkedList
- 数据结构—顺序表(自己实现Java的ArrayList)
- java数据结构之(一):ArrayList类的实现
- Java集合中ArrayList的实现原理
- Java 中 ArrayList 的实现解析
- Java中ArrayList的实现原理
- JAVA中ArrayList的底层基本实现
- java中ArrayList的源码实现
- java中ArrayList的实现模拟
- poj 2778(ac自动机+矩阵快速幂)
- 两个变量值的交换方法
- 使用系统提供的AVFoundation 实现二维码扫描(带动画)
- du 命令
- 【求组合数模板】
- 数据结构: Java中ArrayList的简单实现
- Sublime Text插件怎么安装
- poj2965
- Xcode版升级为7.0时,原来版本的工程图片数据请求需要设置
- 数据结构: Java中LinkedList的简单实现
- 绝对路径/相对路径(div)
- java 中四舍五入保留一位小数
- 【static&extern】和同行的问题讨论
- 背包问题