信手拈来 妙手偶得 » 日志 » 【原创】动态数组类
【原创】动态数组类
Junglesong 发表于 2008-06-28 16:47:33
代码:
package com.sitinspring;


/** *//**
* 动态数组类,以数组为数据容器实现动态数组的功能
* @author: sitinspring(junglesong@gmail.com)
* @date: 2008-6-23-下午10:08:09
*/

public class DynamicArray
{

/** *//** *//** *//**
* 用于存储数据的数组
*/
private int[] arr;


/** *//** *//** *//**
* 初始化大小
*/
private static final int initSize = 10;


/** *//** *//** *//**
* 当前元素个数
*/
private int currItemsCount = 0;


/** *//** *//** *//**
* 构造函数一,固定大小
*/

public DynamicArray()
{
arr = new int[initSize];
}

/** *//** *//** *//**
* 构造函数二,指定大小
*/

public DynamicArray(int len)
{
arr = new int[len];
}


/** *//** *//** *//**
* 取得位置在i的元素
*/

public int get(int i)
{

if (i < currItemsCount)
{
return arr[i];
}

return -999;
}


/** *//** *//** *//**
* 取得数组中已有元素的个数
* @return
*/

public int size()
{
return currItemsCount;
}


/** *//** *//** *//**
* 添加一个元素到数组
* @param number
*/

public void add(int number)
{

if (currItemsCount >= arr.length)
{
int[] arrNew = new int[arr.length * 2];

for (int i = 0; i < arr.length; i++)
{
arrNew[i] = arr[i];
}

arr = arrNew;
}

arr[currItemsCount] = number;
currItemsCount++;
}


/** *//** *//** *//**
* 删除位置在i的元素
* @param removeIndex
*/

public void remove(int removeIndex)
{

if (removeIndex < arr.length)
{

if (removeIndex > currItemsCount)
{
int[] arrNew = new int[arr.length - 1];

for (int j = 0; j < arrNew.length; j++)
{
arrNew[j] = arr[j];
}

arr = arrNew;

} else
{
int[] arrNew = new int[arr.length - 1];

for (int j = 0; j < removeIndex; j++)
{
arrNew[j] = arr[j];
}


for (int j = removeIndex + 1; j < arr.length; j++)
{
arrNew[j - 1] = arr[j];
}
currItemsCount--;
arr = arrNew;
}
}
}


/** *//** *//** *//**
* 取得添值部分的数组
* @return
*/

public int[] getArr()
{
int[] arrNew = new int[currItemsCount];


for (int i = 0; i < arrNew.length; i++)
{
arrNew[i] = arr[i];
}

return arrNew;
}

/** *//** *//** *//**
* 取得已排序的数组
* @return
*/

public int[] getSortedArr()
{
int[] arrSorted = getArr();
insertSort(arrSorted);
return arrSorted;
}


/** *//** *//** *//**
* 进行插入排序
* @param arr
*/

private static void insertSort(int[] arr)
{
int i, temp;
// 插入位置
int insertPos;

for (i = 1; i < arr.length; i++)
{
// 当前需要进入已排序队列的项
temp = arr[i];
insertPos = i;

// 向右移动

while (0 < insertPos && arr[insertPos - 1] >= temp)
{
arr[insertPos] = arr[insertPos - 1];
--insertPos;
}

// 当前项该处于的位置
arr[insertPos] = temp;
}
}


/** *//** *//** *//**
* 显示添值部分的数组
*
*/

public void display()
{
System.out.print("现有元素有:");

for (int i = 0; i < currItemsCount; i++)
{
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}


/** *//** *//** *//**
* 显示数组的所有子元素,包括添值和未添值部分
*
*/

public void displayAll()
{
System.out.print("所有元素有:");

for (int i = 0; i < arr.length; i++)
{
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}


/** *//** *//** *//**
* 程序入口
* @param args
*/

public static void main(String[] args)
{
DynamicArray dArray = new DynamicArray(12);

dArray.add(1);
dArray.add(2);
dArray.add(3);
dArray.add(4);
dArray.add(5);
dArray.display();
dArray.displayAll();

dArray.add(6);
dArray.add(7);
dArray.add(8);
dArray.add(9);
dArray.add(10);
dArray.display();
dArray.displayAll();

dArray.add(11);
dArray.add(12);
dArray.add(13);
dArray.add(14);
dArray.add(15);
dArray.display();
dArray.displayAll();

dArray.remove(3);
dArray.display();
dArray.displayAll();

dArray.remove(0);
dArray.display();
dArray.displayAll();

dArray.remove(10);
dArray.display();
dArray.displayAll();

dArray.add(2);
dArray.add(3);
dArray.add(4);
dArray.add(3);
dArray.add(4);
dArray.display();
System.out.print("已排序数组元素為:");
int[] arr = dArray.getSortedArr();

for (int i = 0; i < arr.length; i++)
{
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}
}
执行效果:
现有元素有:1,2,3,4,5,
所有元素有:1,2,3,4,5,0,0,0,0,0,0,0,
现有元素有:1,2,3,4,5,6,7,8,9,10,
所有元素有:1,2,3,4,5,6,7,8,9,10,0,0,
现有元素有:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
所有元素有:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,
现有元素有:1,2,3,5,6,7,8,9,10,11,12,13,14,15,
所有元素有:1,2,3,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,
现有元素有:2,3,5,6,7,8,9,10,11,12,13,14,15,
所有元素有:2,3,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,
现有元素有:2,3,5,6,7,8,9,10,11,12,14,15,
所有元素有:2,3,5,6,7,8,9,10,11,12,14,15,0,0,0,0,0,0,0,0,0,
现有元素有:2,3,5,6,7,8,9,10,11,12,14,15,2,3,4,3,4,
已排序数组元素為:2,2,3,3,3,4,4,5,6,7,8,9,10,11,12,14,15,
package com.sitinspring;

/** *//**
* 动态数组类,以数组为数据容器实现动态数组的功能
* @author: sitinspring(junglesong@gmail.com)
* @date: 2008-6-23-下午10:08:09
*/
public class DynamicArray
{
/** *//** *//** *//**
* 用于存储数据的数组
*/
private int[] arr;

/** *//** *//** *//**
* 初始化大小
*/
private static final int initSize = 10;

/** *//** *//** *//**
* 当前元素个数
*/
private int currItemsCount = 0;

/** *//** *//** *//**
* 构造函数一,固定大小
*/
public DynamicArray()
{
arr = new int[initSize];
}

/** *//** *//** *//**
* 构造函数二,指定大小
*/
public DynamicArray(int len)
{
arr = new int[len];
}

/** *//** *//** *//**
* 取得位置在i的元素
*/
public int get(int i)
{
if (i < currItemsCount)
{
return arr[i];
}
return -999;
}

/** *//** *//** *//**
* 取得数组中已有元素的个数
* @return
*/
public int size()
{
return currItemsCount;
}

/** *//** *//** *//**
* 添加一个元素到数组
* @param number
*/
public void add(int number)
{
if (currItemsCount >= arr.length)
{
int[] arrNew = new int[arr.length * 2];
for (int i = 0; i < arr.length; i++)
{
arrNew[i] = arr[i];
}
arr = arrNew;
}
arr[currItemsCount] = number;
currItemsCount++;
}

/** *//** *//** *//**
* 删除位置在i的元素
* @param removeIndex
*/
public void remove(int removeIndex)
{
if (removeIndex < arr.length)
{
if (removeIndex > currItemsCount)
{
int[] arrNew = new int[arr.length - 1];
for (int j = 0; j < arrNew.length; j++)
{
arrNew[j] = arr[j];
}
arr = arrNew;
} else
{
int[] arrNew = new int[arr.length - 1];
for (int j = 0; j < removeIndex; j++)
{
arrNew[j] = arr[j];
}

for (int j = removeIndex + 1; j < arr.length; j++)
{
arrNew[j - 1] = arr[j];
}
currItemsCount--;
arr = arrNew;
}
}
}

/** *//** *//** *//**
* 取得添值部分的数组
* @return
*/
public int[] getArr()
{
int[] arrNew = new int[currItemsCount];

for (int i = 0; i < arrNew.length; i++)
{
arrNew[i] = arr[i];
}
return arrNew;
}

/** *//** *//** *//**
* 取得已排序的数组
* @return
*/
public int[] getSortedArr()
{
int[] arrSorted = getArr();
insertSort(arrSorted);
return arrSorted;
}

/** *//** *//** *//**
* 进行插入排序
* @param arr
*/
private static void insertSort(int[] arr)
{
int i, temp;
// 插入位置
int insertPos;
for (i = 1; i < arr.length; i++)
{
// 当前需要进入已排序队列的项
temp = arr[i];
insertPos = i;
// 向右移动
while (0 < insertPos && arr[insertPos - 1] >= temp)
{
arr[insertPos] = arr[insertPos - 1];
--insertPos;
}
// 当前项该处于的位置
arr[insertPos] = temp;
}
}

/** *//** *//** *//**
* 显示添值部分的数组
*
*/
public void display()
{
System.out.print("现有元素有:");
for (int i = 0; i < currItemsCount; i++)
{
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}

/** *//** *//** *//**
* 显示数组的所有子元素,包括添值和未添值部分
*
*/
public void displayAll()
{
System.out.print("所有元素有:");
for (int i = 0; i < arr.length; i++)
{
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}

/** *//** *//** *//**
* 程序入口
* @param args
*/
public static void main(String[] args)
{
DynamicArray dArray = new DynamicArray(12);
dArray.add(1);
dArray.add(2);
dArray.add(3);
dArray.add(4);
dArray.add(5);
dArray.display();
dArray.displayAll();
dArray.add(6);
dArray.add(7);
dArray.add(8);
dArray.add(9);
dArray.add(10);
dArray.display();
dArray.displayAll();
dArray.add(11);
dArray.add(12);
dArray.add(13);
dArray.add(14);
dArray.add(15);
dArray.display();
dArray.displayAll();
dArray.remove(3);
dArray.display();
dArray.displayAll();
dArray.remove(0);
dArray.display();
dArray.displayAll();
dArray.remove(10);
dArray.display();
dArray.displayAll();
dArray.add(2);
dArray.add(3);
dArray.add(4);
dArray.add(3);
dArray.add(4);
dArray.display();
System.out.print("已排序数组元素為:");
int[] arr = dArray.getSortedArr();
for (int i = 0; i < arr.length; i++)
{
System.out.print(arr[i] + ",");
}
System.out.print("\n");
}
}执行效果:
现有元素有:1,2,3,4,5,
所有元素有:1,2,3,4,5,0,0,0,0,0,0,0,
现有元素有:1,2,3,4,5,6,7,8,9,10,
所有元素有:1,2,3,4,5,6,7,8,9,10,0,0,
现有元素有:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
所有元素有:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,
现有元素有:1,2,3,5,6,7,8,9,10,11,12,13,14,15,
所有元素有:1,2,3,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,
现有元素有:2,3,5,6,7,8,9,10,11,12,13,14,15,
所有元素有:2,3,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,
现有元素有:2,3,5,6,7,8,9,10,11,12,14,15,
所有元素有:2,3,5,6,7,8,9,10,11,12,14,15,0,0,0,0,0,0,0,0,0,
现有元素有:2,3,5,6,7,8,9,10,11,12,14,15,2,3,4,3,4,
已排序数组元素為:2,2,3,3,3,4,4,5,6,7,8,9,10,11,12,14,15,