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是一种常用的集合类,提供了许多实用的方法来操作集合数据,而本文则尝试模拟ArrayList的底层实现,通过自定义集合实现类MyArrayList,来实现基本的集合操作。 模拟...
根据给定的信息,本文将详细解释如何在Java Server Pages (JSP)中使用`HttpSession`和`ArrayList`来实现一个简单的购物车程序。本文主要分为以下几个部分:商品类(`Goods`)的设计、购物车功能实现的具体步骤、以及...
以下是一个简单的模拟实现: ```java public class MyArrayList<T> { private Object[] elements; private int size; // ... (其他ArrayList的方法) public Iterator<T> iterator() { return new Iterator()...
在C语言中,ArrayList是一种常见的数据结构,它模拟了Java或.NET等高级语言中的动态数组。ArrayList提供了在数组中添加、删除和查找元素的便利操作,而无需预先知道数组的大小。下面,我们将深入探讨如何用C语言实现...
在JavaScript中,ArrayList是一种常见的数据结构,它模拟了Java中的ArrayList功能,允许程序员进行动态数组操作。虽然JavaScript原生不支持ArrayList,但我们可以利用数组(Array)对象来实现类似的功能。下面将详细...
通过查看源代码,我们可以学习到如何在JavaScript环境中模拟ArrayList的行为,以及如何处理与Java中的ArrayList不同的问题,如线程安全和动态扩容等。 总的来说,ArrayList集合工具类是Java编程中的核心组件,它在...
在进行上述算法实现时,Java的集合框架(如ArrayList、LinkedList)和数据结构(如堆、优先队列)将发挥重要作用。同时,需要注意的是,模拟过程中应考虑进程的创建、唤醒、阻塞和结束等状态转换,以及可能的进程...
在Java中,可以使用ArrayList或LinkedList类来实现这两种方式。下面简述两种方法: - 数组实现:利用数组的索引,0号索引表示队头,最后一个索引表示队尾,通过调整索引实现队列操作。 - 链表实现:LinkedList类...
ArrayList则是通过动态数组来模拟可变大小的列表,当添加或删除元素时,它会自动调整数组的大小以适应需求。因此,模仿ArrayList的第一步就是创建一个可扩展的数组。 ```java public class MyArrayList<T> { ...
ArrayList是.NET框架中System.Collections命名空间下的一个类,它是基于数组实现的动态列表。ArrayList提供了在集合中添加、删除、查找和访问元素的功能,适用于存储各种类型的数据。在这个ArrayList测试中,我们将...
相比之下,ArrayList是C#中System.Collections命名空间下的一个类,它实现了IList接口,允许动态调整大小。ArrayList内部基于数组实现,但提供了更多的灵活性。当你不确定需要存储多少元素或者需要频繁添加、删除...
在Java编程语言中,模拟实现一个跑步比赛是一个典型的对象导向编程问题,涉及到类的设计、对象的创建以及事件的处理。这个项目可能包括参赛者(Runner)类、比赛(Race)类以及比赛结果(Result)类等核心组件。下面...
尽管ArrayList原本是Java语言的一部分,但是为了阐述概念,我们可以使用JavaScript(一种广泛使用的脚本语言)来模拟这种数据结构的实现。以下是对如何使用JavaScript实现ArrayList功能的深入探讨,包括相关方法的...
在这个“实现动态分区分配模拟实验 JAVA”中,我们将探讨如何使用Java编程语言来模拟这一过程。 动态分区分配的主要目标是最大化内存利用率,避免内存碎片,并能够适应不同大小的进程需求。常见的动态分区分配算法...
而在PHP中虽然没有内置的ArrayList,但可以通过自定义类来模拟实现类似的功能。本文将详细讲解如何在PHP中实现一个类,该类能够模拟C#中ArrayList的常见操作方法。 首先,我们要知道C#的ArrayList是一个基于数组的...
在这个项目中,我们主要关注如何实现一个高效、用户友好的KTV点歌系统,并对其进行不断优化。尽管这个项目可能处于初级阶段,仍有很大的改进空间,下面将详细介绍KTV点歌系统的关键技术和可能的优化方向。 1. **...
在这个Java实现中,模拟退火算法的核心思想是通过随机改变当前解决方案(即旅行路线),并根据温度和接受概率来决定是否接受这个新解。初始时,算法设置一个较高的温度,随着迭代进行,温度会逐渐降低,使得接受较差...
在JavaScript中,虽然没有直接的HashMap实现,但我们可以利用`Object`来模拟这一功能。`Object`的键通常是字符串,但可以通过`Symbol`创建非字符串键,从而实现类似于哈希映射的行为。例如: ```javascript let ...
在JavaScript中,虽然没有内置的ArrayList类,但可以使用Array对象模拟类似的功能,因为Array在JavaScript中是动态的,可以随时添加、删除或修改元素。然而,JavaScript的Array不提供像ArrayList那样的线程同步功能...
在MyArrayList类中,提供了`put`、`get`和`remove`方法来模拟ArrayList的基本操作。`put`方法用于添加元素,检查元素是否为空,以及数组是否需要扩容。`get`方法根据索引获取元素,如果索引超出范围则抛出异常。`...