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;
}
}
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;
}
}
相关文章推荐
- 数据结构(JAVA)---二叉树的简单实现及排序
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- [java数据结构]--java双向链表LinkedList的简单实现
- Java数据结构之简单的连接点(link)实现方法示例
- 数据结构(Java语言)——Stack简单实现
- 【算法数据结构Java实现】递归的简单剖析及时间复杂度计算
- Java数据结构之简单的链表的实现
- Java实现简单的数据结构(二)
- Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用
- Java实现一部分简单的排序算法和数据结构(学习笔记20171022002)
- 数据结构(Java语言)——LinkedList简单实现
- Java实现简单数据结构之二叉树结构排序 binary tree
- 数据结构: Java中LinkedList的简单实现
- Java实现简单的数据结构(三)
- 【Java数据结构】2.2双向链表的简单实现
- 数据结构(Java语言)——BinaryHeap简单实现
- 数据结构-Java实现-简单回文
- 数据结构笔记--栈的总结及java数组实现简单栈结构
- Java数据结构----栈(Stack)源码分析和用链表简单实现
- Java实现简单的数据结构(四)