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("\n新数组长度:" + 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、 } } }