在平常使用数组的过程中,我们常常会觉得其功能有限,例如常常会超出下标限制,而且数据比较危险。为了解决这种情况,我们可以写一个自己的list类来存储数据。其基本功能应该包括自动管理下标 ,自动扩容 ,排序 ,合并, 增删查改 ,去重合并 等等。
具体代码如下。
import java.util.Arrays;
public class newList {
// 属性 :
int length;
int size;// 个数: 从1开始计算 下标: 从0开始
// 存储结构 所有类的父类为数据类型
Object[] arrvalue;
// 默认参数
// 默认长度
final int dflength=10;
// 获取长度
public int getLength() {
return length;
}
// 返回 容器中元素个数
public int getSize() {
return size;
}
// 初始化
public newList(){
initList();
}
// 默认初始化
private void initList(){
length = dflength;
arrvalue=new Object[length];
size=0;
}
// 初始长度
public newList(int initLength){
if(initLength<=0){
System.err.println("输入参数小于0,不在可取范围!");
}
if(initLength>=Integer.MAX_VALUE){
System.out.println("输入参数大于上限,不在可取范围!");
}
if(initLength<=dflength){
initList();
}
if(initLength>dflength){
length = initLength;
arrvalue=new Object[length];
size=0;
}
}
public void grow(){
// 扩容 创建一个新的数组 ,比原数组容量更大
int oldlength = length;
int newlength = (oldlength>>1)+oldlength;
length = newlength;
Object[] newArrvalue = new Object[length];
// 然后 将原数组中的所有数据 存入新数组中
for (int i = 0; i < arrvalue.length; i++) {
newArrvalue[i]=arrvalue[i];
}
// 引用替换
arrvalue = newArrvalue;
newArrvalue=null;// 垃圾变量回收
System.out.println("扩容:"+getLength());
System.out.println("元素个数:"+getSize());
}
// 添加元素
public void add(Object value){
//size 当前越界了
if(size>=length){
grow();
}
arrvalue[size++]=value;
}
// 根据值删除元素
//根据下标删除元素
public void delete(int index){
Object[] newArr = new Object[arrvalue.length-1];
for(int i=0, k =0;i<arrvalue.length;i++){
if(i!=index){
newArr[k]=arrvalue[i];
k++;
}
}
arrvalue = newArr;
newArr = null;
System.out.println(Arrays.toString(arrvalue));
}
//根据下标查找元素
public void check(int index){
if(index>length){
System.out.println("index out of bound");
}else if (index<0){
System.out.println("index smaller than zero");
}
System.out.println(arrvalue[index]);
}
//根据元素查找下标
public void check1(Object value){
for(int i=0;i<arrvalue.length;i++){
if(arrvalue[i].equals(value)){
System.out.println(i);
}
}
}
//根据下标更改元素
public void change(int index, Object value){
if(index>length){
System.out.println("index out of bound");
}else if (index<0){
System.out.println("index smaller than zero");
}
arrvalue[index] = value;
System.out.println("changed: " + Arrays.toString(arrvalue));
}
public static void main(String[] args) {
newList chessList = new newList();
for (int i = 0; i < 15; i++) {
chessList.add(i);
}
chessList.delete(3);
chessList.check(2);
chessList.change(2, 10);
chessList.check1(10);
}
}