最近重新在温习数据结构,然后用java实现一些常见的数据结构。第一个就是模仿java的ArrayList, 实现了一个MyArrayList,功能比较简单,实现也比较简单,直接看代码:
package com.matt; import java.util.Iterator; import java.util.NoSuchElementException; public class MyArrayList<AnyType> implements Iterable<AnyType> { private static final int DEFAULT_CAPACITY = 10; private int theSize; private AnyType [] theItems; public MyArrayList(){ doClear(); } public void clear(){ doClear(); } private void doClear(){ theSize = 0; ensureCapacity(DEFAULT_CAPACITY); } public boolean isEmpty(){ return size()==0; } public AnyType get(int idx){ if(idx<0 || idx >= size()) throw new ArrayIndexOutOfBoundsException(); return theItems[idx]; } public AnyType set(int idx, AnyType newVal){ if(idx<0 || idx >= size()) throw new ArrayIndexOutOfBoundsException(); AnyType old = theItems[idx]; theItems[idx] = newVal; return old; } private void ensureCapacity(int newCapacity) { if(newCapacity < theSize) return; AnyType [] old = theItems; theItems = (AnyType []) new Object[newCapacity]; for(int i=0;i<size();i++){ theItems[i] = old[i]; } } public int size() { return theSize; } public void add(int idx, AnyType x){ if(theItems.length == size()) ensureCapacity(size()*2 + 1); for(int i = theSize;i > idx;i--) theItems[i] = theItems[i-1]; theItems[idx] = x; theSize++; } public boolean add(AnyType x){ add(size(),x); return true; } public AnyType remove(int idx){ if(idx<0 || idx >= size()) throw new ArrayIndexOutOfBoundsException(); AnyType old = theItems[idx]; for(int i=idx;i<size()-1;i++) theItems[i] = theItems[i+1]; theSize--; return old; } public String toString(){ String l = "["; for(int i=0;i<size();i++){ if(i<size()-1) l = l + theItems[i] + ","; else l = l + theItems[i] + "]"; } return l; } @Override public Iterator<AnyType> iterator() { return new ArrayListIterator(); } private class ArrayListIterator implements Iterator<AnyType>{ private int current = 0; @Override public boolean hasNext(){ return current < size(); } @Override public AnyType next() { if(!hasNext()) throw new NoSuchElementException(); return theItems[current++]; } @Override public void remove() { MyArrayList.this.remove(--current); } } public static void main(String [] args){ MyArrayList<String> lst = new MyArrayList<String>(); lst.add("a"); lst.add("b"); lst.add("c"); System.out.println(lst.size()); lst.remove(1); System.out.println(lst); Iterator<String> lstIter = lst.iterator(); while(lstIter.hasNext()){ String str = lstIter.next(); if(str.equals("b")) lstIter.remove(); } System.out.println(lst); } }
相关推荐
不过,根据标题和描述,这里我们讨论的是一个用C++实现的ArrayList类模板,它采用了双层散列技术来提高性能。这个实现旨在提供高效的数据存储和操作,特别是在处理大量数据时。 首先,让我们深入了解ArrayList的...
本文将通过分析一个名为"MyArrayList"的自定义实现,来深入探讨线性表的概念及其在Java中的具体实现,帮助新手更好地理解和应用此类数据结构。 首先,MyArrayList是基于MyList接口实现的,这个接口定义了线性表的...
ArrayList. 底层用数组实现, 自己编写的MyArrayList,初始长度10,扩容2倍.
例如,实现MyArrayList类,就是对数组列表的一种抽象和封装。 深入学习Java,你需要熟悉JDK的核心API,包括IO流、多线程、网络编程等。理解API设计原则,如设计模式(如工厂模式、代理模式、策略模式),并能熟练...
此外,动画演示部分要求学生实现MyArrayList、MyLinkedList、MyStack和MyQueue的操作动画,这不仅需要熟悉这些数据结构的内部工作原理,还需要掌握图形用户界面的设计。无权图的深度优先遍历和广度优先遍历的动画...
在实现MyArrayList时,也应考虑使用泛型。 6. **容量与索引**:ArrayList有初始容量(默认为10),但可以使用构造函数指定。索引从0开始,到size()-1结束。 7. **异常处理**:在自定义实现时,需要处理一些可能...
使用Java自定义实现ArrayList,增加、删除、查询等。
在Java中,ArrayList是一种常用的集合类,提供了许多实用的方法来操作集合数据,而本文则尝试模拟ArrayList的底层实现,通过自定义集合实现类MyArrayList,来实现基本的集合操作。 模拟ArrayList的add方法 在...
浅析ArrayList内部实现 ArrayList是Java集合框架中的一种常用数据结构,能够存储任意多个对象,并且可以自由扩展,弥补了数组的定长的缺陷。下面我们将深入探讨ArrayList的内部实现机理。 ArrayList的内部实现机理...
下面将详细介绍如何通过实现 `IEnumerable` 和 `IEnumerator` 接口来创建一个自定义的集合类 `MyArrayList`。 #### 1. 概述 `MyArrayList` 类旨在模拟.NET Framework中的 `List<T>` 类的行为,但使用了 `object` ...
在实例化`MyArrayList`类时,我们可以指定具体的类型,例如`MyArrayList<Integer>`或`MyArrayList<String>`。这种设计方式确保了类型安全性和代码的复用性。 #### 四、总结 泛型是Java语言的一个强大特性,它提供...
3. **MyArrayList.java** - 这可能是一个自定义的ArrayList实现,因为Java标准库已有ArrayList类,但开发者可能为了特定需求(如性能优化或特殊功能)而自定义了一个版本。在这个上下文中,`MyArrayList`可能被用来...
首先,`MyArrayList` 类是Java中对顺序表的自定义实现。在Java标准库中,我们通常使用 `ArrayList` 类来实现动态数组,但在这个例子中,开发者可能为了教学目的或特定需求创建了自己的版本。`MyArrayList` 类通常会...
在给定的部分内容中,展示了一个简单的`MyArrayList`类的实现。这个类实现了`List`接口,并使用一个对象数组`objects`来存储元素。`MyArrayList`的构造函数初始化数组的大小为16,这是一个常见的初始大小,当数组...
《深入解析Java中的ArrayList实现》 ArrayList是Java集合框架中常用的一种动态数组,它在`java.util`包中,是List接口的一个实现类。本文将深入探讨ArrayList的内部原理、特性以及常见操作,帮助读者更好地理解和...
1. 创建一个新的类,例如`MyArrayList`,继承自`ArrayList`或者实现`List`接口。 2. 提供一个构造方法,以便初始化集合的容量或者进行其他设置。 3. 重写`get()`方法,这是`List`接口的一个核心方法,用于获取指定...
ArrayList作为Java集合框架的一部分,其内部实现基于动态数组。通过分析ArrayList的源码,我们可以学习到如何创建一个类似的数据结构,这有助于我们提升对数组、扩容、索引操作等概念的理解。 首先,自定义的...