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);
}
}
}
分享到:
相关推荐
简单模拟java 中的arraylist的底层实现
JSP_使用_Session_ArrayList_实现购物车程序
本资源模拟java ArrayList Iterator的实现方式,其实也是为了介绍一下Iterator的设计模式。
实现了ArrayList的部分功能,代码有什么问题,欢迎大神指正给予指导意见。
主要介绍了PHP实现C#山寨ArrayList的方法,通过一个php自定义类模拟实现C#中ArrayList的功能,具有一定参考借鉴价值,需要的朋友可以参考下
ktv点歌系统,实现ktv点歌系统的各种优化,不过也是刚学练手的一个项目, 还有各种不足的地方还望大家多多指正
4、设计一个测试类WeatherTest,模拟生成和读取数据的过程,要求实现生成一次,紧接着进行读取,不能出现不同步的情况。 详细设计: 1、 天气类Weather,包含int类型的温度(temperature)和湿度(humidity)...
所谓Iterator模式,即是...3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数
模拟文件管理器程序,实现控制台对文件和文件夹的管理操作。适合Java初学者,练习学习I/0输入输出,使用了IO中的File类、字符流和集合ArrayList等基础Java知识
对基本数据结构的模拟,实现arrayList,hashMap,树,队列,栈的基本方法,对于学习数据结构有一定的帮助 LinkedList[] arr = new LinkedList[999]; // 键值对集合! Map底层结构是:数组 + 链表 int size = 0; // ...
JAVA 用集合ArrayList模拟扑克牌实现了构造一副扑克牌,模拟洗牌发牌的过程,代码简单易懂,适合初学者
主要实现查找任意两地点间最短路径并获得其长度,添加地点,删除地点,添加路线,删除路线操作 该系统带有模拟地图的加权无向图,直观的表现各地点间的关系及所做操作的响应结果 可通过鼠标操作或文本输入的形式...
蓄账户的对象(可以用数组或ArrayList实现)。该类包含以下方法: 开户:即增加一个新的账户,注意:不允许两个账户的账号相同 销户:即删除一个已有的账户 查询账户:根据一个账号,查询有无该账号的账户 统计目前银行...
# Java小游戏代码:房地产需求匹配,...游戏逻辑比较简单,主要利用了Java的基本语法和ArrayList等数据结构实现。玩家可以根据自己的需求选择租户或出租户主,游戏胜利的条件是选择了符合自己需求的租户或出租户主。
java语言实现简单的QQ通讯录,具有增删改查功能,无图形化界面,导入eclipse即可使用
Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap, TreeMap这一类的。以下简单模拟一个数据结构的连环炮。 比如,面试官先问你HashMap是不是有序的? 你肯定回答说,不是有序的。那面试官就会...
第7章主要介绍了高并发框架Akka的基本使用方法,并使用Ak:ka框架实现了 个简单的粒子群算法, 模拟超高并发的场景。第8章介绍了使用Eclipse进行多线程调试的方法, 并演示了通过Eclipse进行多线程调试重现ArrayList...
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 队列...