吴裕雄--天生自然数据结构与算法:java代码实现常用数据结构——数组

1,数组【Array】
特点:长度固定、查找方便【直接使用index查找即可】、增加、删除麻烦。
public class Demo1_Array {
    public static void main(String[] args) {
        String [] array=new String[5];//需要初始化长度
        array[0]="hello";
        array[1]="world";
        array[4]="Mufasa";
//        array[5]="right or not";//ArrayIndexOutOfBoundsException
        for(String str:array){
            System.out.print(str+"、");//hello、world、null、null、Mufasa、
        }
    }
}

②对实例化数组进行扩容【利用Java反射机制】
public class Demo1_Array2 {
    public static void main(String[] args) {
        String [] array={"hello","world",null,null,"Mufasa"};//实例化&赋值
        array = (String[])resizeArray(array,10);
        for(String str:array){
            System.out.print(str+"、");//hello、world、null、null、Mufasa、
        }
        System.out.println("
新数组长度:" + array.length);
    }

    private static Object resizeArray(Object oldArray, int newSize) {//数组扩容!!!真麻烦,还利用反射机制来实现
        int oldSize = java.lang.reflect.Array.getLength(oldArray);//获取旧数组长度,向上转型!!!
//        int oldSize =oldArray.length;//无法在此使用,因为array内容的是不定类型
        Class elementType = oldArray.getClass().getComponentType();//获取对象类别
        Object newArray = java.lang.reflect.Array.newInstance(elementType,newSize);//利用Java的反射机制实例化新数组
        int preserveLength = Math.min(oldSize, newSize);//判断是否需要copy数据
        if (preserveLength > 0)
            System.arraycopy(oldArray, 0, newArray, 0, preserveLength);
        return newArray;//oldArray切断索引成为垃圾由Runtime.getRuntime().gc();回收处理
    }
}

③数组删除与增添,本质上是创建新的数值并且copy数值
public class Demo1_Array4 {
    public static void main(String[] args) {
        String [] array=new String[5];//需要初始化长度
        array[0]="hello";
        array[1]="world";
        array[4]="Mufasa";
        array=drop(array,3);
        for(String str:array){
            System.out.print(str+"、");//hello、world、null、null、Mufasa、
        }

    }
    public static String[] drop(Object[] oldArray,int index){//删除指定位置上的元素
        int size= java.lang.reflect.Array.getLength(oldArray);
        if(index<0 || index>size) {
            throw new RuntimeException("删除索引范围有误");
        }else {
            Class elementType = oldArray.getClass().getComponentType();//获取对象类别
            Object newArray = java.lang.reflect.Array.newInstance(elementType,size-1);
            String[] newStringArray=(String[])newArray;
            int counter=0;
            for(int i=0;i<oldArray.length;i++){
                if(i!=index){
                    newStringArray[counter]= (String) oldArray[i];
                    counter++;
                }else {
                    continue;
                }
            }
            return newStringArray;
        }
    }
}

④数组添加元素,本质也是创建新数组长度+1拷贝,index后移、赋值
public class Demo1_Array5 {
    public static void main(String[] args) {
        String [] array=new String[5];//需要初始化长度
        array[0]="hello";
        array[1]="world";
        array[4]="Mufasa";
        array=add(array,3,"添加字符串");
        for(String str:array){
            System.out.print(str+"、");//hello、world、null、null、Mufasa、
        }

    }
    public static String[] add(Object[] oldArray,int index,String str){//删除指定位置上的元素
        int size= java.lang.reflect.Array.getLength(oldArray);
        if(index<0 || index>size) {
            throw new RuntimeException("添加索引范围有误");
        }else {
            Class elementType = oldArray.getClass().getComponentType();//获取对象类别
            Object newArray = java.lang.reflect.Array.newInstance(elementType,size+1);
            String[] newStringArray=(String[])newArray;
            int counter=0;
            for(int i=0;i<oldArray.length;i++){
                if(i!=index){
                    newStringArray[counter]= (String) oldArray[i];
                    counter++;
                }else {
                    newStringArray[counter]= (String) oldArray[i];
                    counter++;
                    newStringArray[counter]=str;
                    counter++;
                }
            }
            return newStringArray;
        }
    }
}

可以直接使用Java自带的类集框架中的ArrayList、Vector
import java.util.List;
import java.util.ArrayList;

public class Demo1_Array6 {
    public static void main(String[] args) {
        List<String> array=new ArrayList<>();//需要初始化长度
        array.add("hello");
        array.add("world");
//        array.set(2,"Mufasa");
        array.add("扩容!");
        System.out.println(array.size());
        for(String str:array){
            System.out.print(str+"、");//hello、world、null、null、Mufasa、
        }
    }
}

原文地址:https://www.cnblogs.com/tszr/p/12209734.html