方法与数组之一维数组的各大神通(1)

雨霖先森 2022-09-28 12:03:40

方法与数组之一维数组的各大神通(1)

一、一维数组

1.理解;数组是一组数据的容器(数组中可以存放多个数据)

2.优点:查询效率高(原因:数组在内存中开辟的空间是连续的)

3.概念:

1.数组中的数据叫做元素 2.每个元素都有编号,叫做索引/下标 3.下标从0开始 4.数组是引用数据类型 5.数组一旦初始化,长度不可改变(意味着数组不可以添加和删除) 6.数组在内存中开辟的空间是连续的

4.数组的声明:

数据类型 数组名[]; int[] is; -- int类型的数组 String[] names; -- 字符串类型的数组

5.数组的初始化:

1.静态初始化:由程序员指定数据,系统自动分配空间

public class 文件名{
        public static void main(String[] args){
        
        //静态初始化1
        //String[] names = new String[]{"东邪","南帝","西毒","北丐","中神通"};
        
        //静态初始化2 - 先声明,再初始化
        //String[] names;
        //names = new String[]{"东邪","南帝","西毒","北丐","中神通"};
        
        //静态初始化3 - 简化静态初始化1的写法
        String[] names = {"东邪","南帝","西毒","北丐","中神通"};
        
        //设置指定下标上的元素
        names[2] = "西狂";
        
        //获取指定下标上的元素
        String n = names[2];
        System.out.println("获取指定下标上的元素:" + n);//西狂
        
        //获取元素个数
        int len = names.length;
        System.out.println("获取元素个数:" + len);//5
        
        System.out.println("-------------------------------------");
        
        //遍历1 - for循环
        for(int i = 0;i<names.length;i++){
            System.out.println(names[i]);
        }
        
        System.out.println("-------------------------------------");
        
        //遍历2 - foreach/增强for循环
        for(String element : names){//依次循环数组中的元素,并赋值给element
            System.out.println(element);
        }
                /**
            for vs foreach
            
            循环中使用到下标,就使用for
            循环中不使用到下标,就使用foreach
        */
    }
}

2.动态初始化:由程序员指定长度,系统自动分配初始值

            整数类型:0
            浮点类型:0.0
            字符类型:' '
            布尔类型:false
            引用类型:null - 空
public class 文件名{
        public static void main(String[] args){
        
        //动态初始化1
        //String[] names = new String[5];
        //5表示连续开辟几个空间 - {null,null,null,null,null}
        
        //动态初始化2 - 先声明,再此初始化
        String[] names;
        names = new String[5];
        //5表示连续开辟几个空间 - {null,null,null,null,null}
        
        //设置指定下标上的元素
        names[0] = "aaa";
        names[1] = "bbb";
        names[2] = "黄蓉";
        names[3] = "ccc";
        names[4] = "ddd";
        
        //ArrayIndexOutOfBoundsException - 数组下标越界异常
        //names[5] = "eee";
        
        //获取指定下标上的元素
        String n = names[2];
        System.out.println("获取指定下标上的元素:" + n);//黄蓉
        
        //获取元素个数
        int len = names.length;
        System.out.println("获取元素个数:" + len);//5
        
        System.out.println("-------------------------------------");
        
        //遍历1 - for循环
        for(int i = 0;i<names.length;i++){
            System.out.println(names[i]);
        }
    }
}

3.静态初始化 vs 动态初始化

静态初始化:一开始就知道数据 动态初始化:一开始只知道长度

需求:声明5个长度的int数组,元素由用户输入,计算出最大值

import java.util.Scanner;
public class 文件名{
        public static void main(String[] args){
        
            int [] is = new int[5];
            
            Scanner scan = new Scanner(System.in);
            for(int i = 0;i<is.length;i++){
                System.out.println("请输入第" + (i+1) + "个数字");
                is[i] = scan.nextInt();
            }
            
            int max = is[0];
            for(int i = 1;i<is.length;i++){
                if(max < is[i]){
                    max = is[i];
                }
            }
            System.out.println("最大值为:" + max);
            
    }
}

二、数组的排序 -- 冒泡排序

    口诀:
        N个数字来排序
        两两相比小靠前
        外层循环N-1
        内层循环N-1-i
public class 文件名{
        public static void main(String[] args){
        
        int [] is = {35,81,18,25,9};
        
        for(int i = 0;i<is.length-1;i++){
            for(int j = 0;j<is.length-1-i;j++){
                
                if(is[j] >is[j+1]){
                    int temp = is[j];
                    is[j] = is[j+1];
                    is[j+1] = temp;
                }
            }
        }
        for(int num : is){
            System.out.println(num);
        }
    }
}

三、数组的查找

1.线性查找

思路:从头到尾遍历 缺点:慢

public class 文件名{
        public static void main(String[] args){
            int[] is = {35,81,18,25,9};
            int num = 81;
            
            for(int i = 0;i<is.length;i++){
                if(num == is[i]){
                    System.out.println("找到元素了");
                }
            }
        
        }
}

2.二分法查找

思路:先排序,在二分

import java.util.Arrays;
public class 文件名{
        public static void main(String[] args){
        
            int [] is = {35,81,18,25,9};
            
            //排序 -- 9,18,25,35,81
            Arrays.sort(is);
            
            int num = 81;
            int start = 0;
            int end = is.length-1;
            
            while(start <= end){
                
                //求中间值
                int mid = (start + end)/2;
                
                if(num > is[mid]){//说明要查找的值在中间值的右边
                    
                    start = mid+1;
                    
                }else if(num <is[mid]){//说明要查找的值在中间值的左边
                    end = mid-1;
                }else{//找到了
                    System.out.println("找到了");
                    break;
                }
            }
    }
}

四、数组的复制1

缺点:修改原数组,会影响到新数组

public class 文件名{
        public static void main(String[] args){
​
        //原数组
        String[] names = {"哆哆","咪咪","发发","嘻嘻"};
        
        //新数组
        String[] newNames = names;
        
        //修改原数组中的数据
        names[2] = "啦啦";
        
        //遍历新数组
        for(String element : newNames){
            System.out.println(element);
        }
        
​
    }
}

五、数组的复制2

public class 文件名{
    public static void main(String[] args){
​
        //原数组
        String[] names = {"哆哆","咪咪","发发","嘻嘻"};
        
        //新数组
        String[] newNames = new String[names.length];
        
        //遍历原数组,将原数组中的元素复制到新数组中
        for(int i = 0;i<names.length;i++){
            newNames[i] = names[i];
        }
        
        //修改原数组中的数据
        names[2] = "啦啦";
        
        //遍历新数组
        for(String element : newNames){
            System.out.println(element);
            
      //遍历原数组
        for(String element : names){
            System.out.println(element);
        }
    }
}
...全文
192 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧