您的位置:首页 > 理论基础 > 数据结构算法

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

2017-03-07 16:46 281 查看
利用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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构