`

实现MyArrayList

 
阅读更多

最近重新在温习数据结构,然后用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);
	    
	}

}

 

分享到:
评论

相关推荐

    ArrayList的一个C++类模板实现

    不过,根据标题和描述,这里我们讨论的是一个用C++实现的ArrayList类模板,它采用了双层散列技术来提高性能。这个实现旨在提供高效的数据存储和操作,特别是在处理大量数据时。 首先,让我们深入了解ArrayList的...

    MyArrayList源码包

    本文将通过分析一个名为"MyArrayList"的自定义实现,来深入探讨线性表的概念及其在Java中的具体实现,帮助新手更好地理解和应用此类数据结构。 首先,MyArrayList是基于MyList接口实现的,这个接口定义了线性表的...

    1.MyArrayList(ArrayList底层实现).md

    ArrayList. 底层用数组实现, 自己编写的MyArrayList,初始长度10,扩容2倍.

    Java基础教程1.pdf.docx

    例如,实现MyArrayList类,就是对数组列表的一种抽象和封装。 深入学习Java,你需要熟悉JDK的核心API,包括IO流、多线程、网络编程等。理解API设计原则,如设计模式(如工厂模式、代理模式、策略模式),并能熟练...

    2013级软件工程专业数据结构课程设计方案V1.0.docx

    此外,动画演示部分要求学生实现MyArrayList、MyLinkedList、MyStack和MyQueue的操作动画,这不仅需要熟悉这些数据结构的内部工作原理,还需要掌握图形用户界面的设计。无权图的深度优先遍历和广度优先遍历的动画...

    MCO264_FA2019_MyArrayList

    在实现MyArrayList时,也应考虑使用泛型。 6. **容量与索引**:ArrayList有初始容量(默认为10),但可以使用构造函数指定。索引从0开始,到size()-1结束。 7. **异常处理**:在自定义实现时,需要处理一些可能...

    MyArrayList.java

    使用Java自定义实现ArrayList,增加、删除、查询等。

    模拟arraylist底层实现

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

    浅析ArrayList内部实现

    浅析ArrayList内部实现 ArrayList是Java集合框架中的一种常用数据结构,能够存储任意多个对象,并且可以自由扩展,弥补了数组的定长的缺陷。下面我们将深入探讨ArrayList的内部实现机理。 ArrayList的内部实现机理...

    C#自建类实现集合接口IEnumerable, IEnumerator

    下面将详细介绍如何通过实现 `IEnumerable` 和 `IEnumerator` 接口来创建一个自定义的集合类 `MyArrayList`。 #### 1. 概述 `MyArrayList` 类旨在模拟.NET Framework中的 `List&lt;T&gt;` 类的行为,但使用了 `object` ...

    Java重要的泛型使用方法.docx

    在实例化`MyArrayList`类时,我们可以指定具体的类型,例如`MyArrayList&lt;Integer&gt;`或`MyArrayList&lt;String&gt;`。这种设计方式确保了类型安全性和代码的复用性。 #### 四、总结 泛型是Java语言的一个强大特性,它提供...

    Calendar Easter_calendar_Easter_

    3. **MyArrayList.java** - 这可能是一个自定义的ArrayList实现,因为Java标准库已有ArrayList类,但开发者可能为了特定需求(如性能优化或特殊功能)而自定义了一个版本。在这个上下文中,`MyArrayList`可能被用来...

    数据结构顺序表-存储学生信息(Java)

    首先,`MyArrayList` 类是Java中对顺序表的自定义实现。在Java标准库中,我们通常使用 `ArrayList` 类来实现动态数组,但在这个例子中,开发者可能为了教学目的或特定需求创建了自己的版本。`MyArrayList` 类通常会...

    Java基础复习笔记04数据结构-线性表

    在给定的部分内容中,展示了一个简单的`MyArrayList`类的实现。这个类实现了`List`接口,并使用一个对象数组`objects`来存储元素。`MyArrayList`的构造函数初始化数组的大小为16,这是一个常见的初始大小,当数组...

    DataStructure-MyarrayList

    《深入解析Java中的ArrayList实现》 ArrayList是Java集合框架中常用的一种动态数组,它在`java.util`包中,是List接口的一个实现类。本文将深入探讨ArrayList的内部原理、特性以及常见操作,帮助读者更好地理解和...

    jsp中用集合收集数据并填充BeanForm

    1. 创建一个新的类,例如`MyArrayList`,继承自`ArrayList`或者实现`List`接口。 2. 提供一个构造方法,以便初始化集合的容量或者进行其他设置。 3. 重写`get()`方法,这是`List`接口的一个核心方法,用于获取指定...

    Java 中模仿源码自定义ArrayList

    ArrayList作为Java集合框架的一部分,其内部实现基于动态数组。通过分析ArrayList的源码,我们可以学习到如何创建一个类似的数据结构,这有助于我们提升对数组、扩容、索引操作等概念的理解。 首先,自定义的...

Global site tag (gtag.js) - Google Analytics