数据结构:自定义线性数组
2013-12-11 19:14
549 查看
package com.accp.list;
/**
* 接口
* @author Administrator
*
* @param <T>
*/
public interface MyList<T> {
//增加元素
public void add(T t);
//插入元素
public void insert(int index, T t);
//删除数组
public void remove(T t);
//删除指定位置的元素
public void removeAt(int index);
//获取数组的大小
public int size();
//判断数组是否为空
public boolean isEmpty();
//获取元素
public T get(int index);
//设置元素
public void set(int index, T t);
//获取指定位置的元素
public int indexOf(T t);
//清除数组
public void clear();
}
package com.accp.list;
/**
* 实现List的增、删、改、查操作
* @author Administrator
*
* @param <T>
*/
public class MyArrayList<T> extends MyAbstractList<T> {
private T[] list;
/**存储空间的大小*/
private int capacity;
public MyArrayList() {
this(10);
}
public MyArrayList(int capacity) {
this.capacity = capacity;
list = (T[]) new Object[capacity];
}
@Override
/**
* 添加元素:在尾部
*/
public void add(T t) {
ensureCapacity();
list[size++] = t;
}
@Override
/**
* 插入元素
*/
public void insert(int index, T t) {
if(index < 0 || index > size) {
throw new IndexOutOfBoundsException();
}
ensureCapacity();
for(int i = size; i > index; i--) {
list[i] = list[i - 1];
}
list[index] = t;
size++;
}
@Override
/**
* 删除元素
*/
public void remove(T t) {
int index = indexOf(t);
if (index != -1) {
removeAt(index);
}
}
@Override
/**
* 删除指定位置的元素
*/
public void removeAt(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
for (int i = index; i < size - 1; i++) {
list[i] = list[i + 1];
}
size--;
}
@Override
/**
* 数组的大小
*/
public int size() {
return size;
}
@Override
/**
* 判断数组是否为空
*/
public boolean isEmpty() {
return size == 0;
}
@Override
/**
* 获取元素
*/
public T get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
return list[index];
}
@Override
/**
* 设置指定位置元素的值
*/
public void set(int index, T t) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
list[index] = t;
}
@Override
/**
* 清除数组:使数组的大小变为0
*/
public void clear() {
size = 0;
}
/**
* 追加存储的空间
*/
private void ensureCapacity() {
if (size == capacity) {
T[] temp = (T[]) new Object[capacity * 2];
capacity = capacity * 2;
for (int i = 0; i < size; i++) {
temp[i] = list[i];
}
list = temp;
}
}
}
package com.accp.list;
/**
* 抽象类
* @author Administrator
*
* @param <T>
*/
public abstract class MyAbstractList<T> implements MyList<T> {
protected int size;
@Override
public int size() {
return size;
}
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public int indexOf(T t) {
for (int i = 0; i < size; i++) {
if (get(i).equals(t)) {
return i;
}
}
return -1;
}
}
/**
* 接口
* @author Administrator
*
* @param <T>
*/
public interface MyList<T> {
//增加元素
public void add(T t);
//插入元素
public void insert(int index, T t);
//删除数组
public void remove(T t);
//删除指定位置的元素
public void removeAt(int index);
//获取数组的大小
public int size();
//判断数组是否为空
public boolean isEmpty();
//获取元素
public T get(int index);
//设置元素
public void set(int index, T t);
//获取指定位置的元素
public int indexOf(T t);
//清除数组
public void clear();
}
package com.accp.list;
/**
* 实现List的增、删、改、查操作
* @author Administrator
*
* @param <T>
*/
public class MyArrayList<T> extends MyAbstractList<T> {
private T[] list;
/**存储空间的大小*/
private int capacity;
public MyArrayList() {
this(10);
}
public MyArrayList(int capacity) {
this.capacity = capacity;
list = (T[]) new Object[capacity];
}
@Override
/**
* 添加元素:在尾部
*/
public void add(T t) {
ensureCapacity();
list[size++] = t;
}
@Override
/**
* 插入元素
*/
public void insert(int index, T t) {
if(index < 0 || index > size) {
throw new IndexOutOfBoundsException();
}
ensureCapacity();
for(int i = size; i > index; i--) {
list[i] = list[i - 1];
}
list[index] = t;
size++;
}
@Override
/**
* 删除元素
*/
public void remove(T t) {
int index = indexOf(t);
if (index != -1) {
removeAt(index);
}
}
@Override
/**
* 删除指定位置的元素
*/
public void removeAt(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
for (int i = index; i < size - 1; i++) {
list[i] = list[i + 1];
}
size--;
}
@Override
/**
* 数组的大小
*/
public int size() {
return size;
}
@Override
/**
* 判断数组是否为空
*/
public boolean isEmpty() {
return size == 0;
}
@Override
/**
* 获取元素
*/
public T get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
return list[index];
}
@Override
/**
* 设置指定位置元素的值
*/
public void set(int index, T t) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
list[index] = t;
}
@Override
/**
* 清除数组:使数组的大小变为0
*/
public void clear() {
size = 0;
}
/**
* 追加存储的空间
*/
private void ensureCapacity() {
if (size == capacity) {
T[] temp = (T[]) new Object[capacity * 2];
capacity = capacity * 2;
for (int i = 0; i < size; i++) {
temp[i] = list[i];
}
list = temp;
}
}
}
package com.accp.list;
/**
* 抽象类
* @author Administrator
*
* @param <T>
*/
public abstract class MyAbstractList<T> implements MyList<T> {
protected int size;
@Override
public int size() {
return size;
}
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public int indexOf(T t) {
for (int i = 0; i < size; i++) {
if (get(i).equals(t)) {
return i;
}
}
return -1;
}
}
相关文章推荐
- 数据结构实战——线性结构之静态数组表示法
- 复习(数据结构:java):线性表(数组):泛型的写法
- C# 数据结构 线性表(顺序表 链表 IList 数组)
- struct自定义数据结构部分代替pair,vector,map的功能(数组连用)Uva Matrix Chain Multiplication
- 【郝斌数据结构自学笔记】57-59_递归8 _ 汉诺塔_1线性结构总复习 2线性结构和非线性结构关系 3栈队列链表数组之间的关系【重点】
- 数据结构学习之线性表和数组的区别
- 【数据结构】线性结构:栈&队列&数组
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- 数据结构-线性表的数组实现-Java
- 数据结构的基础---线性群集存储模式(数组、链表和hash)
- vector自定义数据结构数组按照指定元素排序
- 小白学数据结构——一、线性结构(数组&链表)
- 07-数据结构_线性结构-连续存储-数组
- 数据结构之线性结构--数组
- 如何实现自定义的数据结构?以线性表的实现为例分析
- (一)线性数组的数据结构和算法
- Java数据结构-线性结构数组(Array)详解
- 数据结构线性结构之连续存储---数组
- java数据结构:线性表之数组实现
- 每日一省之—使用线性探测法(仅利用数组作为底层数据结构)实现HashMap