`

ArrayList模拟实现

 
阅读更多
import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * ArrayList模拟实现
 * 
 * @author Jelly
 * 
 * @param <T>
 */
public class MyArrayList<T> implements Iterable<T> {
	private static final int DEFAULE_CAPACITY = 10;
	private int theSize;
	private T[] theItems;

	public MyArrayList() {
		clear();
	}

	public void clear() {
		theSize = 0;
		ensureCapacity(DEFAULE_CAPACITY);
	}

	public int size() {
		return theSize;
	}

	public boolean isEmpty() {
		return size() == 0;
	}

	public void trimToSize() {
		ensureCapacity(size());
	}

	public T get(int idx) {
		if (idx < 0 || idx >= size()) {
			throw new ArrayIndexOutOfBoundsException();
		}
		return theItems[idx];
	}

	public T set(int idx, T newVal) {
		if (idx < 0 || idx >= size()) {
			throw new ArrayIndexOutOfBoundsException();
		}
		T old = theItems[idx];
		theItems[idx] = newVal;
		return old;
	}

	public boolean add(T t) {
		add(size(), t);
		return true;
	}

	public void add(int idx, T t) {
		if (theItems.length == size()) {
			ensureCapacity(size() * 2);
		}
		for (int i = size(); i > idx; i--) {
			theItems[i] = theItems[i - 1];
		}
		theItems[idx] = t;
		theSize++;
	}

	public T remove(int idx) {
		T t = theItems[idx];
		for (int i = idx; i < size()-1; i++) {
			theItems[i]=theItems[i+1];
		}
		theSize--;
		return t;
	}

	@SuppressWarnings("unchecked")
	public void ensureCapacity(int newCapacity) {
		if (newCapacity < DEFAULE_CAPACITY) {
			return;
		}
		T[] old = theItems;
		theItems = (T[]) new Object[newCapacity];
		for (int i = 0; i < size(); i++) {
			theItems[i] = old[i];
		}
	}

	@Override
	public Iterator<T> iterator() {
		return new ArrayListIterator();
	}

	public class ArrayListIterator implements Iterator<T> {

		private int current = 0;

		@Override
		public boolean hasNext() {
			return current < size();
		}

		@Override
		public T next() {
			if (!hasNext()) {
				throw new NoSuchElementException();
			}
			return theItems[current++];
		}

		@Override
		public void remove() {
			MyArrayList.this.remove(--current);
		}

	}
}

分享到:
评论

相关推荐

    模拟arraylist底层实现

    简单模拟java 中的arraylist的底层实现

    JSP_使用_Session_ArrayList_实现购物车程序

    JSP_使用_Session_ArrayList_实现购物车程序

    模拟java ArrayList Iterator

    本资源模拟java ArrayList Iterator的实现方式,其实也是为了介绍一下Iterator的设计模式。

    用C语言模拟ArrayList

    实现了ArrayList的部分功能,代码有什么问题,欢迎大神指正给予指导意见。

    PHP实现C#山寨ArrayList的方法

    主要介绍了PHP实现C#山寨ArrayList的方法,通过一个php自定义类模拟实现C#中ArrayList的功能,具有一定参考借鉴价值,需要的朋友可以参考下

    KTV点歌系统

    ktv点歌系统,实现ktv点歌系统的各种优化,不过也是刚学练手的一个项目, 还有各种不足的地方还望大家多多指正

    Weather代码,模拟这个过程,生成天气数据,然后显示出来

    4、设计一个测试类WeatherTest,模拟生成和读取数据的过程,要求实现生成一次,紧接着进行读取,不能出现不同步的情况。 详细设计: 1、 天气类Weather,包含int类型的温度(temperature)和湿度(humidity)...

    Java设计模式之Iterator模式

    所谓Iterator模式,即是...3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数

    Java 模拟文件管理器

    模拟文件管理器程序,实现控制台对文件和文件夹的管理操作。适合Java初学者,练习学习I/0输入输出,使用了IO中的File类、字符流和集合ArrayList等基础Java知识

    基本数据结构的模拟

    对基本数据结构的模拟,实现arrayList,hashMap,树,队列,栈的基本方法,对于学习数据结构有一定的帮助 LinkedList[] arr = new LinkedList[999]; // 键值对集合! Map底层结构是:数组 + 链表 int size = 0; // ...

    CardArraylist

    JAVA 用集合ArrayList模拟扑克牌实现了构造一副扑克牌,模拟洗牌发牌的过程,代码简单易懂,适合初学者

    java数据结构课程设计——简易GPS导航(最优路径)源码+文档

    主要实现查找任意两地点间最短路径并获得其长度,添加地点,删除地点,添加路线,删除路线操作 该系统带有模拟地图的加权无向图,直观的表现各地点间的关系及所做操作的响应结果 可通过鼠标操作或文本输入的形式...

    银行账户存取款业务

    蓄账户的对象(可以用数组或ArrayList实现)。该类包含以下方法: 开户:即增加一个新的账户,注意:不允许两个账户的账号相同 销户:即删除一个已有的账户 查询账户:根据一个账号,查询有无该账号的账户 统计目前银行...

    Java小游戏代码:房地产需求匹配,租户和出租户主之间建立联系.docx

    # Java小游戏代码:房地产需求匹配,...游戏逻辑比较简单,主要利用了Java的基本语法和ArrayList等数据结构实现。玩家可以根据自己的需求选择租户或出租户主,游戏胜利的条件是选择了符合自己需求的租户或出租户主。

    java 简单QQ通讯录具有增删改查功能

    java语言实现简单的QQ通讯录,具有增删改查功能,无图形化界面,导入eclipse即可使用

    阿里面试经历感想回顾总结

    Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap, TreeMap这一类的。以下简单模拟一个数据结构的连环炮。 比如,面试官先问你HashMap是不是有序的? 你肯定回答说,不是有序的。那面试官就会...

    Java高并发实战_java高并发_高并发_

    第7章主要介绍了高并发框架Akka的基本使用方法,并使用Ak:ka框架实现了 个简单的粒子群算法, 模拟超高并发的场景。第8章介绍了使用Eclipse进行多线程调试的方法, 并演示了通过Eclipse进行多线程调试重现ArrayList...

    数据结构与算法分析Java语言描述(第二版)

    remove方法对LinkedList类的使用3.3.5 关于ListIterator接口3.4 ArrayList类的实现3.4.1 基本类3.4.2 迭代器、Java嵌套类和内部类3.5 LinkedList类的实现3.6 栈ADT3.6.1 栈模型3.6.2 栈的实现3.6.3 应用3.7 队列...

Global site tag (gtag.js) - Google Analytics