IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Java数组 -> 正文阅读

[数据结构与算法]Java数组

1.数组的概述

  • 数组的定义:

    • 数组是具有相同数据类型的有序集合;

    • 数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成;

    • 其中,每一个数据称为数组元素,每一个数组元素可以通过一个下标来访问他们。

2.数组的声明创建

  • 首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

    dataType[] arrayRefVar; ? ? ? ? //首选的方法
    或
    dataType arrayRefVar[]; ? ? ? ? //效果相同,但不是首选方法

  • Java语言使用new操作符来创建数组,语法如下:

    dataType[] arrayRefVar = new dataType[arraySize];

  • 数组的元素是通过索引来访问的,数组索引从0开始;

  • 获取数组的长度:

    arrays.length

(1).内存分析

?

?

(2).数组的三种初始化方法

  • 静态初始化

    int[] a= {1,2,3};
    Man[] mans = {new Man(1,1),new Man(2,2)};

  • 动态初始化

    int [] a = new int[2];
    a[0] = 1;
    a[1] = 2;

  • 数组默认初始化

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

public class Demo01 {
 ? ?public static void main(String[] args) {
?
 ? ? ? ?//静态初始化
 ? ? ? ?int[] a = {1,2,3,4,5,6};
 ? ? ? ?System.out.println(a); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//运行结果:[I@1b6d3586
 ? ? ? ?System.out.println(Arrays.toString(a)); ? ? ? ? ? ? //运行结果:[1, 2, 3, 4, 5, 6]
?
 ? ? ? ?//动态初始化
 ? ? ? ?int[] b = new int[2];
 ? ? ? ?b[0] = 1;
 ? ? ? ?b[1] = 2;
 ? ? ? ?System.out.println(b[0]); ? ? ? ? ?//运行结果:1
 ? ? ? ?System.out.println(b[1]); ? ? ? ? ?//运行结果:2
?
 ? ? ? ?//数组的默认初始化
 ? ? ? ?int[] c = new int[4];
 ? ? ? ?System.out.println(c[0]); ? ? ? ? ?//运行结果:0
 ?  }
}

(3).数组的下标越界及小节

  • 数组的四个基本特点:

    • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的;

    • 其元素必须是相同类型,不允许出现混合类型;

    • 数组的元素可以是任何类型,包括基本类型和引用类型;

    • 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量;数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

  • 数组边界

    • 下标的合法区间:[0,length-1],如果越界就会报错;

      public class Demo02 {
       ? ?public static void main(String[] args) {
       ? ? ? ?int[] num = new int[2];
       ? ? ? ?System.out.println(num[2]);
       ?  }
       ? ?//运行结果:java.lang.ArrayIndexOutOfBoundsException: 2 ? ? 数组下标越界异常
      }

    • ArrayIndexOutOfBoundsException:数组下标越界异常!

    • 小节:

      • 数组是相同数据类型(数据类型可以为任意类型给)的有序集合;

      • 数组也是对象;数组元素相当于对象的成员变量;

      • 数组长度是确定的,不可变的。如果越界,则报:ArrayIndexOutOfBoundsException

3.数组的使用

  • 普通for循环

  • for-Each循环

  • 数组作方法入参

  • 数组作返回值

    public class Demo03 {
     ? ?public static void main(String[] args) {
     ? ? ? ?int[] array = {1,2,3,4,5,6,7};
    ?
     ? ? ? ?//打印全部的数组元素
     ? ? ? ?for(int i = 0; i < array.length; i++){
     ? ? ? ? ? ?System.out.print(array[i]+"");
     ? ? ?  }
    ?
     ? ? ? ?System.out.println("");
     ? ? ? ?//打印全部数组元素
     ? ? ? ?for(int i : array){
     ? ? ? ? ? ?System.out.print(i+"");
     ? ? ?  }
    ?
     ? ? ? ?System.out.println("");
     ? ? ? ?//打印全部元素
     ? ? ? ?System.out.println(Arrays.toString(array));
     ? ? ? ?System.out.println("==============================");
    ?
     ? ? ? ?//计算所有元素的和
     ? ? ? ?int sum = 0;
     ? ? ? ?for(int i = 0; i < array.length; i++){
     ? ? ? ? ? ?sum += i;
     ? ? ?  }
     ? ? ? ?System.out.println("所有元素的和为"+sum);
     ? ? ? ?System.out.println("==============================");
    ?
     ? ? ? ?//查找元素的最大值
     ? ? ? ?int max = array[0];
     ? ? ? ?for(int i = 1 ; i < array.length ; i++){
     ? ? ? ? ? ?if(array[i]>max){
     ? ? ? ? ? ? ? ?max = array[i];
     ? ? ? ? ?  }
     ? ? ?  }
     ? ? ? ?System.out.println(max);
     ?  }
    }
    public class Demo04 {
     ? ?public static void main(String[] args) {
     ? ? ? ?int[] arrays = {1,2,3,4,5,6};
     ? ? ? ?//JDK 1.5  没有下标
    // ? ? ?  for(int i : arrays){
    // ? ? ? ? ?  System.out.println(i);
    // ? ? ?  }
     ? ? ? ?printArray(arrays);
     ? ? ? ?System.out.println();
     ? ? ? ?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;
     ?  }
    }

4.多维数组

  • 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一位数组,其中每一个元素都是一个一位数组。

    ?

  • 二维数组:以下二维数组i可以看成四行四列

    int i[][] = new int[4][4];

public class Demo05 {
 ? ?public static void main(String[] args) {
 ? ? ? ?//创建四行四列的二维数组
 ? ? ? ?int[][] array = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
 ? ? ? ?//遍历二维数组
 ? ? ? ?for(int i = 0 ; i < array.length ; i++){
 ? ? ? ? ? ?for(int j = 0 ; j < array[i].length ; j++){
 ? ? ? ? ? ? ? ?System.out.print(array[i][j]+ " ");
 ? ? ? ? ?  }
 ? ? ? ? ? ?System.out.println();
 ? ? ?  }
 ?  }
// ?  运行结果:1 2 3 4
// ? ? ? ? ? ? 5 6 7 8
// ? ? ? ? ? ? 9 10 11 12
// ? ? ? ? ? ? 13 14 15 16
}

5.Arrays类

  • 数组的工具类java.util.Arrays;

  • 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作;

  • 查看JDK帮助文档;

  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用。

  • 具有一下常用功能:

    • 给数组赋值:通过fill方法;

    • 对数组排序:通过sort方法,按升序;

    • 比较数组:通过equals方法比较数组中元素值是否相等;

    • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法。

import java.util.Arrays;
?
public class Demo06 {
 ? ?public static void main(String[] args) {
 ? ? ? ?int[] a = {1,2,54651,6498,1987,41564,64,15846,7,8};
?
 ? ? ? ?//打印数组Arrays.toString(数组名)
 ? ? ? ?System.out.println(Arrays.toString(a));
 ? ? ? ?//运行结果:[1, 2, 54651, 6498, 1987, 41564, 64, 15846, 7, 8]
?
 ? ? ? ?//为数组排序 : 升序
 ? ? ? ?Arrays.sort(a);
 ? ? ? ?System.out.println(Arrays.toString(a));
 ? ? ? ?//运行结果:[1, 2, 7, 8, 64, 1987, 6498, 15846, 41564, 54651]
?
 ? ? ? ?Arrays.fill(a,0);
 ? ? ? ?System.out.println(Arrays.toString(a));
 ? ? ? ?//运行结果:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
?
 ? ? ? ?printArray(a);
 ?  }
?
 ? ?public static void printArray(int[] a){
 ? ? ? ?for(int i = 0 ; i < a.length ; i++ ){
 ? ? ? ? ? ?if(i==0){
 ? ? ? ? ? ? ? ?System.out.print("[");
 ? ? ? ? ?  }
 ? ? ? ? ? ?if(i==a.length-1){
 ? ? ? ? ? ? ? ?System.out.println("]");
 ? ? ? ? ?  }else{
 ? ? ? ? ? ? ? ?System.out.print(a[i] + ", ");
 ? ? ? ? ?  }
 ? ? ?  }
 ?  }
 ? ?//运行结果:[0, 0, 0, 0, 0, 0, 0, 0, 0, ]
}

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 16:12:59  更:2021-12-14 16:13:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:38:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码