`

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底层实现

    模拟ArrayList底层实现 在Java中,ArrayList是一种常用的集合类,提供了许多实用的方法来操作集合数据,而本文则尝试模拟ArrayList的底层实现,通过自定义集合实现类MyArrayList,来实现基本的集合操作。 模拟...

    JSP_使用_Session_ArrayList_实现购物车程序

    根据给定的信息,本文将详细解释如何在Java Server Pages (JSP)中使用`HttpSession`和`ArrayList`来实现一个简单的购物车程序。本文主要分为以下几个部分:商品类(`Goods`)的设计、购物车功能实现的具体步骤、以及...

    模拟java ArrayList Iterator

    以下是一个简单的模拟实现: ```java public class MyArrayList&lt;T&gt; { private Object[] elements; private int size; // ... (其他ArrayList的方法) public Iterator&lt;T&gt; iterator() { return new Iterator()...

    用C语言模拟ArrayList

    在C语言中,ArrayList是一种常见的数据结构,它模拟了Java或.NET等高级语言中的动态数组。ArrayList提供了在数组中添加、删除和查找元素的便利操作,而无需预先知道数组的大小。下面,我们将深入探讨如何用C语言实现...

    JavaScript 实现基础 ArrayList 功能

    在JavaScript中,ArrayList是一种常见的数据结构,它模拟了Java中的ArrayList功能,允许程序员进行动态数组操作。虽然JavaScript原生不支持ArrayList,但我们可以利用数组(Array)对象来实现类似的功能。下面将详细...

    ArrayList集合工具类

    通过查看源代码,我们可以学习到如何在JavaScript环境中模拟ArrayList的行为,以及如何处理与Java中的ArrayList不同的问题,如线程安全和动态扩容等。 总的来说,ArrayList集合工具类是Java编程中的核心组件,它在...

    Java模拟操作系统实验之四种进程调度算法实现(FCFS,SJF,RR,HRN)

    在进行上述算法实现时,Java的集合框架(如ArrayList、LinkedList)和数据结构(如堆、优先队列)将发挥重要作用。同时,需要注意的是,模拟过程中应考虑进程的创建、唤醒、阻塞和结束等状态转换,以及可能的进程...

    JAVA 模拟队列的实现

    在Java中,可以使用ArrayList或LinkedList类来实现这两种方式。下面简述两种方法: - 数组实现:利用数组的索引,0号索引表示队头,最后一个索引表示队尾,通过调整索引实现队列操作。 - 链表实现:LinkedList类...

    数组模仿ArrayList

    ArrayList则是通过动态数组来模拟可变大小的列表,当添加或删除元素时,它会自动调整数组的大小以适应需求。因此,模仿ArrayList的第一步就是创建一个可扩展的数组。 ```java public class MyArrayList&lt;T&gt; { ...

    ArrayList测试.

    ArrayList是.NET框架中System.Collections命名空间下的一个类,它是基于数组实现的动态列表。ArrayList提供了在集合中添加、删除、查找和访问元素的功能,适用于存储各种类型的数据。在这个ArrayList测试中,我们将...

    c# 数组与集合(ArrayList)游戏开发高级使用举例

    相比之下,ArrayList是C#中System.Collections命名空间下的一个类,它实现了IList接口,允许动态调整大小。ArrayList内部基于数组实现,但提供了更多的灵活性。当你不确定需要存储多少元素或者需要频繁添加、删除...

    java模拟实现跑步比赛.rar

    在Java编程语言中,模拟实现一个跑步比赛是一个典型的对象导向编程问题,涉及到类的设计、对象的创建以及事件的处理。这个项目可能包括参赛者(Runner)类、比赛(Race)类以及比赛结果(Result)类等核心组件。下面...

    js实现ArrayList功能附实例代码

    尽管ArrayList原本是Java语言的一部分,但是为了阐述概念,我们可以使用JavaScript(一种广泛使用的脚本语言)来模拟这种数据结构的实现。以下是对如何使用JavaScript实现ArrayList功能的深入探讨,包括相关方法的...

    实现动态分区分配模拟实验 JAVA

    在这个“实现动态分区分配模拟实验 JAVA”中,我们将探讨如何使用Java编程语言来模拟这一过程。 动态分区分配的主要目标是最大化内存利用率,避免内存碎片,并能够适应不同大小的进程需求。常见的动态分区分配算法...

    PHP实现C#山寨ArrayList的方法

    而在PHP中虽然没有内置的ArrayList,但可以通过自定义类来模拟实现类似的功能。本文将详细讲解如何在PHP中实现一个类,该类能够模拟C#中ArrayList的常见操作方法。 首先,我们要知道C#的ArrayList是一个基于数组的...

    KTV点歌系统

    在这个项目中,我们主要关注如何实现一个高效、用户友好的KTV点歌系统,并对其进行不断优化。尽管这个项目可能处于初级阶段,仍有很大的改进空间,下面将详细介绍KTV点歌系统的关键技术和可能的优化方向。 1. **...

    模拟退火Java实现

    在这个Java实现中,模拟退火算法的核心思想是通过随机改变当前解决方案(即旅行路线),并根据温度和接受概率来决定是否接受这个新解。初始时,算法设置一个较高的温度,随着迭代进行,温度会逐渐降低,使得接受较差...

    js 集合类实现 (HashMap, Set, ArrayList, etc.)

    在JavaScript中,虽然没有直接的HashMap实现,但我们可以利用`Object`来模拟这一功能。`Object`的键通常是字符串,但可以通过`Symbol`创建非字符串键,从而实现类似于哈希映射的行为。例如: ```javascript let ...

    Java中ArrayList类的用法.docx

    在JavaScript中,虽然没有内置的ArrayList类,但可以使用Array对象模拟类似的功能,因为Array在JavaScript中是动态的,可以随时添加、删除或修改元素。然而,JavaScript的Array不提供像ArrayList那样的线程同步功能...

    ArrayList和HashMap如何自己实现实例详解

    在MyArrayList类中,提供了`put`、`get`和`remove`方法来模拟ArrayList的基本操作。`put`方法用于添加元素,检查元素是否为空,以及数组是否需要扩容。`get`方法根据索引获取元素,如果索引超出范围则抛出异常。`...

Global site tag (gtag.js) - Google Analytics