Java数组学习笔记Day01

数组
    一维数组
            变量 : 存储单个数据
    数组 : 存储多个数据
        是一段连续的内存空间,用来存放相同类型的多个数据,可以根据索引操作数组中的数据

    数组的特点 :
        1.引用数据类型
        2.定长,长度一旦确定不可改变
        3.存储多个相同数据类型的数据
        4.有序的,索引,根据索引操作数组中的数据

    索引 :
        从0开始每次+1
        [0,数组名.length-1]

    操作数组的数据 :
        根据索引操作
        数组名[索引]

    数组的长度 :
        数组名.length

    定义 :
        声明 :
            数据类型[] 数组名;  -->推荐
            数据类型 数组名[];

            数据类型 : 可以为任意类型

        初始化 :
            动态初始化 : 先创建后赋值
                数据类型[] 数组名 = new 数据类型[长度];
                数据类型 : 数组中存放的所有数据的类型

                数组创建成功,没有手动赋值,数组的每个空间存在默认值
                    整数0  小数0.0  字符 : 空字符  引用数据类型 : null  布尔 : false

            静态初始化 : 创建的同时赋值
                数据类型[] 数组名 = new 数据类型[]{值列表};
                数据类型[] 数组名 = {值列表}; 

    数组的遍历 :
        1.普通for
            遍历数组的索引,根据索引操作数据
        2.增强for(foreach)
            for(数据类型 变量名:数组名|集合名){
                变量中存储数据中的每一个数据
            }

/*
    练习: 定义员工类型,存储多个员工类型的数据
        1.展示输出所有员工信息
        2.找到所有员工的姓名存储起来
        3.找到所有薪资>20000的员工->裁员
        4.所有同学的年龄中,出现了几种不同的年龄
 */
public class Class004_Practice {
    public static void main(String[] args) {
        //存储所有的员工数据
        Employee[] emps = {
                new Employee("胡歌",35,20000),
                new Employee("彭于晏",33,15000),
                new Employee("吴彦祖",35,18000),
                new Employee("谢霆锋",42,25000),
        };

        // 1.展示输出所有员工信息
        for (Employee e:emps){
            System.out.println(e);
        }

        // 2.找到所有员工的姓名存储起来
        String[] names = new String[emps.length];
        for(int i=0;i<=emps.length-1;i++){
            names[i] = emps[i].getName();
        }
        System.out.println(Arrays.toString(names));

        //集合 : 存储多个数据
        //根据需求增删数据动态的修改集合的长度
        //ArrayList : 存储多个数据,可以存储任意类型数据,长度可以根据需求动态的增删,有序,可以根据索引进行操作
        //1)创建一个ArrayList集合
        ArrayList list = new ArrayList();
        //2)遍历原数组
        for(Employee employee:emps){
            //3)薪资<=20000放入集合中存储
            if(employee.getPrice()<=20000){
                list.add(employee);
            }
        }
        System.out.println(list);

        //HashSet : 存储多个数据,可以存储任意类型数据,长度可以根据需求动态的增删,会自动去重,无序
        HashSet set = new HashSet();
        for(Employee e:emps){
            set.add(e.getAge());
        }
        System.out.println(set);
        System.out.println(set.size());
    }
}

//员工类型
class Employee{
    private String name;
    private int age;
    private double price;

    public Employee(String name, int age, double price) {
        this.name = name;
        this.age = age;
        this.price = price;
    }

    public Employee() {

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", price=" + price +
                '}';
    }
}


    二维数组
            二维数组 : 了解
        数组中存放数组

    声明 :
        数据类型[][] 数组名;  -->推荐
        数据类型 数组名[][];
        数据类型[] 数组名[];

    动态初始化 : 先创建二维数组,再为其赋值(内部每一个一维数组,内部每一个一维数组中的数据)
        数据类型[][] 数组名 = new 数据类型[外层二维的长度][内层一维的长度]; --> 在创建二维数组之后直接创建内层每一个一维数组,但是内层每一个一维数组长度固定
            数组名[外层二维索引][内层一维索引]操作数组中的数据
        数据类型[][] 数组名 = new 数据类型[外层二维的长度][]; --> 创建二维数组的时候,内层每一个一维数组长度不确定没创建,根据二维数组的索引单独为每一索引位置赋值一维数组,每层的每一个一维数组长度不固定
            二维数组名[索引] = 一维数组的创建方式(动态|静态)

    静态初始化
        数据类型[][] 数组名 = new 数据类型[][]{{1,2,3},{4,5},{6}....};
        数据类型[][] 数组名 = {{1,2,3},{4,5},{6}....};

    操作数组的数据 :
        数组名[外层二维索引][内层一维索引]

    遍历 :
        循环嵌套 :
            普通for
            增强for

/*
二维数组
    动态初始化 数据类型[][]数组名=new 数据类型[二维长度][一维长度]
             数据类型[][]数组名=new 数据类型[二维长度][]
    静态初始化 数据类型[][]数组名=new 数据类型[][]{{},{},{}...}

*/
public class T04_ArrayTest {
    public static void main(String[] args) {
        int [][]arr1=new int[2][3];
        int count=0;
        for (int a=0;a<arr1.length;a++) {
            for (int b=0;b<arr1[a].length;b++) {
                count++;
                arr1[a][b]=count;
            }
        }
        for (int a=0;a<arr1.length;a++) {
            for (int b=0;b<arr1[a].length;b++) {
                System.out.print("["+arr1[a][b]+"]");
            }
        }
        //------------------------
        System.out.println();
        int [][]arr2=new int[2][3];
        for (int[]arr:arr2) {
            for (int b=0;b<arr.length;b++) {
                count++;
                arr[b]=count;
            }
        }
        for (int a=0;a<arr1.length;a++) {
            for (int b=0;b<arr1[a].length;b++) {
                System.out.print("["+arr2[a][b]+"]");
            }
        }
        //------------------------
        System.out.println();
        /*int [][]arr3=new int[2][3];
        for (int a=0;a<arr3.length;a++) {
            for (int arr:arr3[a]) {
                count++;

            }  外普通内增强 无法给数组赋值
        }*/
        for (int a=0;a<arr1.length;a++) {
            for (int arr:arr2[a]) {
                System.out.print("["+arr+"]");
            }
        }
        //------------------------
        System.out.println();
       /* int [][]arr3=new int[2][3];
        for (int arr4[]:arr3) {
            for (int arr : arr4) {
                count++;

            }  外增强内增强也无法给数组赋值
        }*/
        for (int arr3[]:arr2) {
            for (int arr:arr3) {
                System.out.print("["+arr+"]");
            }
        }
    }
}


    Arrays工具类
            Arrays : 该类包含用于操作数组的各种方法(例如排序和搜索)。
        静态工厂
          

public class Class001_Arrays {
    public static void main(String[] args) {
        int[] arr1 = new int[]{1,3,5,2,6};
        int[] arr2 = new int[]{3,1,5,2,4};

        char[][] arr3 = new char[][]{{'a','b','c'},{'中','国'}};
        char[][] arr4 = new char[][]{{'a','b','c'},{'中','国'}};

        //static String toString(int[] a) 返回指定数组内容的字符串表示形式。
        System.out.println(Arrays.toString(arr1));

        //static boolean equals(int[] a, int[] a2) 如果两个指定的int数组彼此 相等 ,则返回 true 。
        //static boolean equals(int[] a, int aFromIndex, int aToIndex, int[] b, int bFromIndex, int bToIndex) 如果指定范围内的两个指定的int数组彼此 相等 ,则返回true。
        //注意 : 参数中如果有指定结束索引,一般结束索引位置都不不包含
        System.out.println(arr1==arr2); //false
        System.out.println(Arrays.equals(arr1,1,4,arr2,1,4)); //true
        System.out.println(Arrays.equals(arr1,arr2)); //false

        //只对于多维数组
        //static String deepToString(Object[] a) 返回指定数组的“深层内容”的字符串表示形式。
        System.out.println(Arrays.toString(arr3));
        System.out.println(Arrays.toString(arr4));
        System.out.println(Arrays.deepToString(arr3));

        //static boolean deepEquals(Object[] a1, Object[] a2) 如果两个指定的数组彼此 深度相等 ,则返回 true 。
        System.out.println(Arrays.equals(arr3,arr4));
        System.out.println(Arrays.deepEquals(arr3,arr4));

        //static void fill(int[] a, int val) 将指定的int值分配给指定的int数组的每个元素。
        //Arrays.fill(arr1,1000);
        //static void fill(int[] a, int fromIndex, int toIndex, int val) 将指定的int值分配给指定的int数组的指定范围的每个元素。
        //Arrays.fill(arr1,1,3,1000);
        System.out.println(Arrays.toString(arr1));

        //static void sort(int[] a) 将指定的数组按升序排序。
        Arrays.sort(arr1);
        System.out.println(Arrays.toString(arr1));

        //static void sort(int[] a, int fromIndex, int toIndex) 按升序对数组的指定范围进行排序。

        //static int binarySearch(int[] a, int key) 使用二进制搜索算法在指定的int数组中搜索指定的值。,如果不存在返回 -插入点-1
        //二分搜索法 : 要求查询之前先升序排序
        System.out.println(Arrays.binarySearch(arr1,7));
    }
}


            Arrays :与数组拷贝相关的方法 ****
                        static int[] copyOf(int[] original, int newLength) 使用零复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度。
                创建新数组+数据拷贝
                参数 :
                    int[] original 要拷贝的原数组
                    int newLength  新数组的长度
                        新数组长度 == 原数组长度   拷贝
                        新数组长度 < 原数组长度   截取   默认从原数组索引为0的位置开始拷贝,拷贝newLength个
                        新数组长度 > 原数组长度   填充   默认从原数组索引为0的位置开始拷贝,拷贝原数组的所有数据,使用默认值填充剩余的位置
                返回值 :
                    新数组

               特点 : 1)方法内部创建新数组  2)默认从索引为0的位置考试拷贝原数组中的数据
                        static int[] copyOfRange(int[] original, int from, int to) 将指定数组的指定范围复制到新数组中。
                一般结束索引不包含
            特点 : 1)方法内部创建新数组  2)可以实现拷贝原数组指定索引范围内的数据
                        static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。
            参数 :
                Object src 原数组
                int srcPos 原数组的起始索引
                Object dest 新数组|目标数组
                int destPos 新数组起始索引
                int length 拷贝数据个数

public class Class002_Array {
    public static void main(String[] args) {
        int[] arr= {1,2,3,4,5,6,7,8};
        int[] newArr= new int[10];
        /*
            static int[] copyOf(int[] original, int newLength) 使用零复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度。
                创建新数组+数据拷贝
                参数 :
                    int[] original 要拷贝的原数组
                    int newLength  新数组的长度
                        新数组长度 == 原数组长度   拷贝
                        新数组长度 < 原数组长度   截取   默认从原数组索引为0的位置开始拷贝,拷贝newLength个
                        新数组长度 > 原数组长度   填充   默认从原数组索引为0的位置开始拷贝,拷贝原数组的所有数据,使用默认值填充剩余的位置
                返回值 :
                    新数组

               特点 : 1)方法内部创建新数组  2)默认从索引为0的位置考试拷贝原数组中的数据
         */
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(Arrays.copyOf(arr,5)));
        System.out.println(Arrays.toString(Arrays.copyOf(arr,8)));
        System.out.println(Arrays.toString(Arrays.copyOf(arr,10)));
        System.out.println("--------------------------------------------------");

        /*
            static int[] copyOfRange(int[] original, int from, int to) 将指定数组的指定范围复制到新数组中。
                一般结束索引不包含
            特点 : 1)方法内部创建新数组  2)可以实现拷贝原数组指定索引范围内的数据
         */
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(Arrays.copyOfRange(arr,1,4)));

        /*
            static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。
            参数 :
                Object src 原数组
                int srcPos 原数组的起始索引
                Object dest 新数组|目标数组
                int destPos 新数组起始索引
                int length 拷贝数据个数
         */
        System.out.println(Arrays.toString(newArr));
        System.arraycopy(arr,2,newArr,4,3);
        System.out.println(Arrays.toString(newArr));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值