Java实现简单的数据结构(一)

利用Java语言实现简单的数据结构,Java中动态扩容的ArrayList,LinkedList,Stack,Queue以及二叉树

1.ArrayList

import java.util.Arrays;

import org.junit.Test;

public class ArrayList implements List {

	private int size = 0;

	private Object[] elementData = new Object[100];

	/**
	 * 自动增长值
	 */
	private static final int GROW_UP_SIZE = 100;

	/**
	 * 在数组最末尾添加对象
	 */
	public void add(Object o) {
		growUp(size);
		elementData[size] = o;
		size++;
	}

	/**
	 * 向指定下标处添加对象
	 */
	public void add(int index, Object o) {
		checkIndex(index);
		growUp(size + 1);
		System.arraycopy(elementData, index, elementData, index + 1, size - index);
		elementData[index] = o;
		size++;

	}

	/**
	 * 根据index获取对象
	 */
	public Object get(int index) {
		checkIndex(index);
		return elementData[index];
	}

	/**
	 * 移除指定下标对象
	 */
	public Object remove(int index) {
		checkIndex(index);
		Object obj = elementData[index];
		int afterRemove = size - index - 1;
		// System.out.println("@@@@"+afterRemove+"---"+index);
		if (afterRemove > 0)
			System.arraycopy(elementData, index + 1, elementData, index, afterRemove);
		elementData = Arrays.copyOf(elementData, --size);
		return obj;
	}

	/**
	 * 获取数组大小
	 */
	public int size() {
		return size;
	}

	/**
	 * 迭代器
	 * 
	 * @return
	 */
	public Iterator iterator() {
		return new Iter();
	}

	/**
	 * 迭代器内部类
	 * 
	 * @author Adminstater
	 * 
	 */
	private class Iter implements Iterator {
		private int nextIndex = 0;

		@Override
		public boolean hasNext() {
			// TODO Auto-generated method stub
			return nextIndex != size;
		}

		@Override
		public Object next() {
			// TODO Auto-generated method stub
			int i = nextIndex++;
			if (i > size - 1)
				throw new IndexOutOfBoundsException();

			return elementData[i];
		}

	}

	/**
	 * 检查数组长度是否越界,越界就自动增长100
	 */
	private void growUp(int size) {
		if (size > elementData.length - 1) {
			Object[] elementGrow = new Object[elementData.length + GROW_UP_SIZE];
			System.arraycopy(elementData, 0, elementGrow, 0, elementData.length);
			elementData = elementGrow;
			// System.out.println(elementData.length);
		}
	}

	/**
	 * 检查下标是否越界,越界抛出异常
	 */
	private void checkIndex(int index) {
		if (index < 0 || index > size) {
			throw new IndexOutOfBoundsException("下标越界");
		}
	}

	/*------------------------------------------------------单元测试----------------------------------------------------*/
	/**
	 * 测试自增长数组长度变化及增加功能
	 */
	@Test
	public void TestAddFunction() {
		ArrayList list = new ArrayList();
		for (int x = 0; x < 300; x++) {
			list.add(x);
		}
	}

	/**
	 * 测试add(int index,Object obj)方法
	 */
	@Test
	public void TestAddIndexFunction() {
		ArrayList list = new ArrayList();
		// System.out.println(list.size());
		list.add(0, 20);
		list.add(1, 30);
		System.out.println(list.get(1));

	}

	/**
	 * 测试get方法
	 */
	@Test
	public void TestGetFunction() {
		ArrayList list = new ArrayList();
		for (int x = 0; x < 300; x++) {
			list.add(x);
		}
		for (int x = 0; x < list.size; x++) {
			System.out.println(list.get(x));
		}
	}

	/**
	 * 测试size方法
	 */
	@Test
	public void TestSizeFunction() {
		ArrayList list = new ArrayList();
		for (int x = 0; x < 259; x++) {
			list.add(x);
		}
		/*
		 * for(int x=0;x<list.size;x++){ System.out.println(list.get(x)); }
		 */
		System.out.println(list.size());
	}

	/**
	 * 测试remove方法
	 */
	@Test
	public void TestRemoveFunction() {
		ArrayList list = new ArrayList();
		for (int x = 0; x < 10; x++) {
			list.add(x);
		}
		list.remove(3);
		for (int x = 0; x < list.size(); x++) {
			System.out.println(list.get(x));
		}
	}

	/**
	 * 测试Iterator方法
	 */
	@Test
	public void TestIter() {
		ArrayList list = new ArrayList();
		for (int x = 9; x < 100; x++) {
			list.add(x);
		}
		Iterator iterator = list.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}

	public static void main(String[] args) {
		// java.util.ArrayList<E> list = null;
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值