最近学习集合类,感觉光看总记不住,就边学习,边练习。
于是自己模拟了下常用的 ArrayList 类。名字为MyArrayList。
亮点是使用内部类返回 Iterator。
1:首先模拟 Iterator 接口。
/**
* @author: 孟志昂
* @email: mengzhiang@gmail.com
*/
interface MyIterator {
Object next();
boolean hasNext();
}
2:然后模拟 Collecton 接口
/**
* @author: 孟志昂
* @email: mengzhiang@gmail.com
*/
public interface MyCollection {
void add(Object o);
int size();
}
3:最后模拟 Arraylist 类
/**
* @author: 孟志昂
* @email: mengzhiang@gmail.com
*/
public class MyArrayList implements MyCollection{
private Object[] items ;
//填充的时候用来表示填充到哪个位置。
private static int fill_index = 0;
public MyArrayList(int length){
items = new Object[length];
}
public void add(Object o){
items[fill_index++] = o;
}
public int size(){
return items.length;
}
public MyIterator iterator(){
return new MyArrayListIterator();
}
/**
* 通过内部类实现iterator方法
*/
class MyArrayListIterator implements MyIterator{
//用来保存遍历到哪一个
int search_index = 0;
public boolean hasNext() {
return search_index!=items.length;
}
public Object next() {
return items[search_index++];
}
}
}
4:最后测试类
import java.util.ArrayList;
import java.util.List;
/**
* @author: 孟志昂
* @email: mengzhiang@gmail.com
*/
public class Test {
public static void main(String[] args) {
MyArrayList myt = new MyArrayList(10);
myt.add(1);
myt.add(2);
MyIterator mi = myt.iterator();
while(mi.hasNext()){
System.out.println(mi.next());
}
//ArrayList创建时不用声明大小,因为ArrayList会自动扩充
//ArrayList的iterator来自父类AbstractList,
//而父类的iterator也是通过内部类来实现Iterator接口返回Iterator实例
List list = new ArrayList();
list.iterator();
}
}
分享到:
相关推荐
模拟ArrayList底层实现 在Java中,ArrayList是一种常用的集合类,提供了许多实用的方法来操作集合数据,而本文则尝试模拟ArrayList的底层实现,通过自定义集合实现类MyArrayList,来实现基本的集合操作。 模拟...
在C语言中,ArrayList是一种常见的数据结构,它模拟了Java或.NET等高级语言中的动态数组。ArrayList提供了在数组中添加、删除和查找元素的便利操作,而无需预先知道数组的大小。下面,我们将深入探讨如何用C语言实现...
模拟ArrayList的Iterator实现,我们需要创建一个内部类,实现Iterator接口。这个内部类需要维护一个指向ArrayList实际元素的指针,以便于在迭代过程中跟踪当前位置。以下是一个简单的模拟实现: ```java public ...
通过查看源代码,我们可以学习到如何在JavaScript环境中模拟ArrayList的行为,以及如何处理与Java中的ArrayList不同的问题,如线程安全和动态扩容等。 总的来说,ArrayList集合工具类是Java编程中的核心组件,它在...
JS模拟ArrayList JS容器类
ArrayList是Java集合框架中的一种重要实现,它是一个基于数组实现的动态列表。ArrayList在JDK 1.8中,其内部使用一个Object数组`elementData`来存储元素,因此它的性能受到数组操作的影响,比如添加、删除和查找。...
总的来说,通过使用JavaScript来模拟ArrayList,我们可以更加深入地理解数据结构的工作原理,并在实际应用中灵活运用。学习如何实现这样的功能有助于提高编程能力,并为解决更复杂的问题打下坚实的基础。
在JavaScript中,ArrayList是一种常见的数据结构,它模拟了Java中的ArrayList功能,允许程序员进行动态数组操作。虽然JavaScript原生不支持ArrayList,但我们可以利用数组(Array)对象来实现类似的功能。下面将详细...
在MyArrayList类中,提供了`put`、`get`和`remove`方法来模拟ArrayList的基本操作。`put`方法用于添加元素,检查元素是否为空,以及数组是否需要扩容。`get`方法根据索引获取元素,如果索引超出范围则抛出异常。`...
ArrayList<String> suggestions = new ArrayList(); suggestions.add("北京"); suggestions.add("上海"); return suggestions; } } ``` Servlet通过`doPost`方法接收POST请求,提取关键词,然后模拟查询数据库...
C语言中并没有直接对应的ArrayList数据结构,但在C中可以使用动态数组的概念来模拟ArrayList的功能。通过malloc()动态分配内存,realloc()调整数组大小,以及free()释放内存,开发者可以实现类似ArrayList的操作。...
还探讨了StringBuilder和StringBuffer在字符串操作中的高效使用,以及如何模拟ArrayList容器的底层实现。最后,讲解了多维数组的处理,数组的拷贝、排序算法(如二分法),以及常用类如包装类Integer、Number的JDK...
在实际应用中,我们可以通过创建一个模拟的游戏场景来演示如何使用数组和ArrayList。例如,可以创建一个大提琴音乐节的模拟游戏,其中数组用来存储参赛选手的初始排名,ArrayList用来存储比赛过程中动态变化的排名。...
ArrayList是.NET框架中System.Collections命名空间下的一个类,它是基于数组实现的动态列表。ArrayList提供了在集合中添加、删除、查找和访问元素的功能,适用于存储各种类型的数据。在这个ArrayList测试中,我们将...
根据给定的信息,本文将详细解释如何在Java Server Pages (JSP)中使用`HttpSession`和`ArrayList`来实现一个简单的购物车程序。本文主要分为以下几个部分:商品类(`Goods`)的设计、购物车功能实现的具体步骤、以及...
ArrayList则是通过动态数组来模拟可变大小的列表,当添加或删除元素时,它会自动调整数组的大小以适应需求。因此,模仿ArrayList的第一步就是创建一个可扩展的数组。 ```java public class MyArrayList<T> { ...
在C语言中,我们可以通过定义一个结构体来模拟ArrayList,包含一个字符指针数组和一个记录当前数组大小的变量。 以下是一个简单的ArrayList结构体定义: ```c typedef struct ArrayList { char** elements; int ...
自己写一个自定义的类,模拟ArrayList的下述功能, 其中类中包含的方法有: add(加元素),remove(删除元素), indexOf(返回指定元素的索引),clear(清空数组), reverse(数据倒置)。
在JavaScript中,虽然没有内置的ArrayList类,但可以使用Array对象模拟类似的功能,因为Array在JavaScript中是动态的,可以随时添加、删除或修改元素。然而,JavaScript的Array不提供像ArrayList那样的线程同步功能...