zoukankan      html  css  js  c++  java
  • 吴裕雄--天生自然数据结构与算法: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、
            }
        }
    }

  • 相关阅读:
    Ubuntu下errno值
    Git 经常使用命令总结
    【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记38 Unwind Segue反向过渡
    高斯噪声
    小记5.8面试
    基数排序之多keyword排序运用队列
    广告贴
    输入字符串反序输出
    Codeforces Round #313 A. Currency System in Geraldion
    matlab中怎样加入凝视
  • 原文地址:https://www.cnblogs.com/tszr/p/12209734.html
Copyright © 2011-2022 走看看