首页 > 编程语言 >04-Java-数组

04-Java-数组

时间:2022-11-17 21:23:58浏览次数:46  
标签:Java 04 int System 数组 println array out

Java-数组

  • 一个类型所有数据的有序集合
  • 每个数据称作一个数组元素,通过每个组的元素可以用下标访问它

数组是声明与创建

  1. 首先必须声明数组变量,才能在程序种使用数组。
dataType[] arrayRefVar; //首选声明方法
// 或
dataType arrayRefVar[]; //效果相同,但非首选
  1. 使用new操作符来创建数组
    dataType[] arrayRefVar = new dataType[arraySize];
public class ArrayDemo01 {  
    //变量类型 变量名字 = 变量的值  
    public static void main(String[] args) {  
        // 声明了一个数组,名为nums  
        int[] nums; //定义    Java        // 创建了一个nums数组,赋值10个空间  
        nums = new int[10]; //创建了一个数组  
        // 给数组赋值  
        for (int i = 0; i < 10; i++) {  
            nums[i] = i;  
            System.out.print(nums[i]+" ");  
        }  
    }  
}

内存机制


数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
没有被初始化的空间都是0

public class ArrayDemo02 {  
    public static void main(String[] args) {  
        // 静态初始化: 创建+赋值  
        int[] a = {1,2,3,4,5,6,7,8};  
        System.out.println(a[0]);  
        // 对对象也可以数组 引用类型  
        Man[] mans = {new Man(),new Man()};  
  
        // 动态初始化  
        int[] b = new int[10];  
        b[0] = 10;  
        System.out.println(b[0]); 
    }  
}

数组四个基本特点

  • 数组一旦被创建,它的大小不可改变
  • 元素必须是相同类型,不许混合类型
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属引用类型,数组本身就是对象,每个元素相当于该对象的成员变量。java中对象是在堆中的,因此数组对象本身是在堆中。

数组边界

数组使用

For循环

public class ArrayDemo03 {  
    public static void main(String[] args) {  
        int[] arrays = {1,2,3,4,5};  
        // 打印全部数组元素  
        for (int i = 0; i < arrays.length; i++) {  
            System.out.println(arrays[i]);  
        }  
        System.out.println("============");  
        // 计算所有元素的和  
        int sum = 0;  
        for (int i = 0; i < arrays.length; i++) {  
            sum += arrays[i];  
        }  
        System.out.println("sum="+sum);  
        System.out.println("==============");  
  
        // 查找最大元素  
        int max = arrays[0];  
        for (int i = 1; i < arrays.length; i++) {  
            if (max > arrays[i]) {  
                continue;  
            }else {  
                max = arrays[i];  
            }  
        }  
        System.out.println("max="+max);  
    }  
}

For Each

public class ArrayDemo04 {  
    public static void main(String[] args) {  
        int[] arrays = {1,2,3,4,5};  
        // for each  arrays代表数组,array代表数组中的每一个元素,适合打印  
        // 遍历  
        for (int array:arrays) {  
            System.out.println(array);  
        }  
        System.out.println("=======");  
        // 这里arrays就相当于参数,对象,传入进去后依然可以打印  
        printArray(arrays);  
        System.out.println("\n===========");  
        // 反转数组,返回的也是一个数组  
        int[] reverse = reverse(arrays);  
        printArray(reverse);  
    }  
    // 打印数组元素  
    public static void printArray(int[] arrays){  
        for (int i = 0; i < arrays.length; i++) {  
            System.out.print(arrays[i]+"");  
        }  
    }  
    // 反转数组  
    public static int[] reverse(int[] arrays){  
        int[] result = new int[arrays.length];  
        // 反转的操作  
        for (int i = 0, j = result.length-1; i < arrays.length; i++,j--) {  
            result[j] = arrays[i];  
        }  
        return result;  
    }  
}

二维数组

public class ArrayDemo05 {  
    public static void main(String[] args) {  
        // 二维数组 [4][2]        /*            1,2  array[0]            2,3  array[1]            3,4  array[2]            4,5  array[3]         */        int[][] array = {{1,2},{2,3},{3,4},{4,5}};  
        // 查看 array[0] 输出 [I@77459877 ,这是一个对象(可以理解为是一个地址)  
        System.out.println(array[0]);  
        System.out.println(array[0][0]); //1  
        System.out.println(array[3][0]); //4  
        System.out.println("==========");  
        System.out.println(array[0].length); // 长度为2  
        printArray(array[0]); //将array[0]送进,相当于一个一维数组  
    }  
    public static void printArray(int[] arrays) {  
        for (int i = 0; i < arrays.length; i++) {  
            System.out.print(arrays[i] + "");  
        }  
    }  
}

Arrays类

  • java给我们提供了一个数组的工具类,java.util.Arrays
  • 该类给我们提供了API,可以使用其对数据对象进行一些基本的操作
  • 由于Arrays类中的方法都是static修饰的静态方法,在使用时,我们可以直接使用类名进行调用
  • 具有以下常用功能
    • 给数组赋值:fill
    • 给数组排序:sort
    • 比较数组:equals比较数组中元素值是否相等
    • 查找数组元素:binarySearch(排序好的数组进行二分查找)
import java.util.Arrays;  
  
public class ArrayDemo06 {  
    public static void main(String[] args) {  
        int[] a = {1,2,3,4,897,987,34,98,453,798,324,7,564};  
        System.out.println(a);  
        // 打印元素 Arrays.toString 打印数组,变成了字符串  
        System.out.println(Arrays.toString(a));  
        // 排序类  
        Arrays.sort(a); //在当前地址进行排序-从小到大  
        System.out.println(Arrays.toString(a));  
        // 填充方法  
        Arrays.fill(a,2,4,0); //将a的 2-4之间的值 赋值为0  
        System.out.println(Arrays.toString(a));;  
    }  
}

冒泡排序

比较每两个数,大的数上浮或者下层,时间复杂的\(O(n^2)\)

import java.util.Arrays;  
  
public class ArrayDemo07 {  
    public static void main(String[] args) {  
        int[] a = {1,3,7,63,2,4,67,32,3};  
        int[] sort = sort(a);  
  
        System.out.println(Arrays.toString(sort));  
    }  
    // 冒泡排序  
    public static int[] sort(int[] array) {  
        // 外层循环,判断我们走多少次  
        int temp = 0;  
        for (int i = 0; i < array.length-1; i++) {  
            // 内层循环  
            // 如果是顺序的,提前跳出循环  
            boolean flag = false; //标志位  
  
            for (int j = 0; j < array.length-1-i; j++) {  
                // 前面比后面大 >                // 前面比后面小 <                if (array[j+1] > array[j]){  
                    temp = array[j];  
                    array[j] = array[j+1];  
                    array[j+1] = temp;  
                    flag = true;  
                }  
            }  
            if (flag == false) {  
                break;  
            }  
        }  
        return array;  
    }  
}

稀疏数组

当大多数数值都为同一值时,我们可以用稀疏数组来保存值。记录有用值坐标与数值。
稀疏数组的处理方式:
- 记录数组一共有几行几列,多少不同数值
- 把具有不同数值的元素的行和列记录在一个小规模的数组中

public class ArrayDemo08 {  
    public static void main(String[] args) {  
        //1. 创建一个二维数组 11*11 0:无棋子,1:黑, 2:白  
        int[][] array1 = new int[11][11];  
        array1[1][2] = 1;  
        array1[2][3] = 2;  
        // 输出原始数组  
        System.out.println("原始数组");  
        for (int[] ints: array1) {  
            for (int anInt:ints) {  
                System.out.print(anInt+"\t");  
            }  
            System.out.println();  
        }  
        // 转换为稀疏数组  
        // 获取有效值的个数  
        int sum = 0;  
        for (int i = 0; i < 11; i++) {  
            for (int j = 0; j < 11; j++) {  
                if (array1[i][j] != 0) {  
                    sum++;  
                }  
            }  
        }  
        System.out.println("有效值个数:"+sum);  
  
        // 创建一个稀疏数组  
        int[][] array2 = new int[sum+1][3];  
  
        array2[0][0] = 11;  
        array2[0][1] = 11;  
        array2[0][2] = sum;  
        //遍历二维数组,将非0值存放在稀疏数组中  
        int count = 0;  
        for (int i = 0; i < array1.length; i++) {  
            for (int j = 0; j < array1[i].length; j++) {  
                if (array1[i][j] != 0) {  
                    count ++;  
                    array2[count][0] = i;  
                    array2[count][1] = j;  
                    array2[count][2] = array1[i][j];  
                }  
            }  
        }  
        // 输出稀疏数组  
        // 二维数组,array2.length 输出的是行数(也就是栈里的长度)  
        System.out.println("稀疏数组");  
        for (int i = 0; i < array2.length; i++) {  
            System.out.println(array2[i][0] + "\t"  
                    + array2[i][1] + "\t"  
                    + array2[i][2] + "\t");  
        }  
        // 读取稀疏数组  
        int[][] array3 = new int[array2[0][0]][array2[0][1]];  
        for (int i = 1; i < array2.length; i++){  
            array3[array2[i][0]][array2[i][0]] = array2[i][2];  
        }  
  
        // 还原数组  
        System.out.println("还原数组");  
        for (int[] ints: array3) {  
            for (int anInt:ints) {  
                System.out.print(anInt+"\t");  
            }  
            System.out.println();  
        }  
    }  
}

标签:Java,04,int,System,数组,println,array,out
From: https://www.cnblogs.com/WTAGO/p/16900994.html

相关文章

  • 【Jmeter】21天打卡 04 之使用Jmeter请求www.baidu.com并查看响应信息
    具体要求a.新建测试计划-->添加线程组-->添加取样器_http请求-->添加监听器_查看结果树b.在http请求中协议填写:http,服务器名称或IP填写:www.baidu.comc.点击功能栏中启......
  • JavaScript对象-Function、Array
    JavaScript对象-FunctionFunction:函数(方法对象):1、创建:1.varfun=newfunction(形式参数列表,方法体);2.function方法名称(形式参数列表){方法体}3.var......
  • JavaScript字符串MD5
    进行HTTP网络通信的时候,调用API向服务器请求数据,有时为了防止API调用过程中被黑客恶意篡改,所请求参数需要进行MD5算法计算,得到摘要签名。服务端会根据请求参数,对签名进行验......
  • Java流程控制
    scanner对象可以通过scanner类来获取用户的输入语法Scannerscanner=newScanner(System.in);通过scanner类的next()与nextLine()方法获取输入的字符串,在读取前......
  • 【算法】用Java解出来的算法,移除链表元素,只出现一次的数字
    (算法题)1.只出现一次的数字题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线......
  • 数组指针和指针数组?
    首先,理解一下数组指针和指针数组这两个名词:“数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了——数组的指针:是一个指针,什么样的指针呢?指向数组的指针......
  • 0003.JavaScript
    一、JavaScript介绍作用:如果把HTML比做一个人,那么CSS就是衣服,那JS就是指人的动作和行为;书写:JS代码可以直接写在script标签里面,或者写在其他的.js后缀文件中,并通过script......
  • 【Java】线程通信:生产者/消费者问题
    1.问题生产者将产品交给店员,而消费者从店员处取走产品,店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会叫生产者停一下。如果店中有空位放产品......
  • Java8新特性之lambda表达式
    1.1Java8的概述Java8于2014年3月发布,该版本是Java语言的一个重要版本,自Java5以来最具革命性的版本,该版本包含语言、编译器、库、工具和JVM等方面的多个新特性。1.2......
  • Day14.3:数组的三种初始化理解
    数组的三种初始化静态初始化即数组的声明和赋值一起完成int[]arrays={1,2,3,4,5};动态初始化-——手动赋值(包含默认初始化)声明数组的但不赋以确切的值,没有赋值......