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中一维数组的基础语法,运用以及一些代码实例java学习日记2021-07-28 -> 正文阅读

[Java知识库]java中一维数组的基础语法,运用以及一些代码实例java学习日记2021-07-28

????????一维数组

javase进阶
p542-p557
关键词:
一维数组

Array

1.java语言中的数组是一种引用数据类型,不属于基本数据类型。数组的父类是Object。

2.数组实际上是一个容器,可以同时容纳多个元素。(数组是一个数据的集合。)

3.数组当中可以存储基本数据类型的数据,也可以存储引用数据类型的数据。

4.数组因为是引用类型,所以数组对象实在堆内存当中。(数组是存储在堆当中。)

5.数组在内存方面是怎么样的一个图形?

连续的

6.对于数组当中如果存储的是java对象的话,实际上储存的是对象的引用(内存地址)。数组中不能直接存储java对象。

7.数组一旦创建,在java中规定,长度不可变。

(数组长度不可变)

8.数组分类:

一维数组、二维数组、三维数组、多维数组…(一维数组较多,二维数组偶尔使用!)

9.所有数组都用Length属性(java自带的),用来获取素组的元素个数。

10.java中的数组要求数组中元素的类型统一。

比如int类型数组只能储存int类型Person类型数组只能储存Person类型。
例如:超市购物,购物袋当中只能装苹果,不能同时装苹果和橘子。

11.数组在内存方面存储的时候,数组中的元素内存地址是连续的。

(存储的每一个元素都是有规则的,挨着排列的。)
这是数组存储元素的特点。数组实际上是一种简单的数据结构。

12.所有的数组都是拿第一个小方框的内存地址作为整个数组对象的内存地址。(数组中首元素的内存地址,作为整个数组对象的内存地址)

13.数组中的下标:

数组中每个元素都有下标,下标从0开始,以1递增。最后一个元素的下标是“ Length - 1
下标非常重要,因为我们对数组进行存取的时候,都需要通过下标进行。

14.数组这种数据结构的优点和缺点是什么?

优点:查询/查找/检索某个下标上的元素时效率极高。k可以说是查询效率最高的一个数据结构。
为什么检索效率高:
第一:每一个元素的内存地址存储上是连续的。
第二:每一个元素类型相同,所以占用空间大小一样
第三:知道首元素的内存地址。
第四:通过下标可以计算出偏移量。
通过一个数学表达式,就可以快速计算出某个下标位置上元素的内存地址,直接通过内存地址定位,效率非常高。

数组中存储100个元素,或者存储100万个元素,在元素查询/检索方面,效率是相同的,因为数组中的元素查找的时候不会一个一个找,是通过数学表达式计算出来的。(算出一个内存地址,直接定位的。)
缺点:第一:由于为了保证数组中的每个元素内存地址连续,所以在数组上随机删除或者增加元素的时候,效率较低,因为罖增删元素会涉及到后面元素统一向前或者向后位移的操作。
第二:数组不能存储大数据量,为什么?
因为很难在内存上找到一块特别大的连续的内存空间
随机增删效率较低,数组无法存储大数据量。
注意:数组最后一个元素的增删效率不受影响。

15.怎么声明/定义一个一维数组?

语法格式:
int[] array1;
double[] array2;
boolean[]] array3;
String[] array4;
Object[] array5;

16.怎么初始化一个一维数组?

包括两种方式:静态初始化一维数组,动态初始化一维数组。
静态初始化语法格式:
int[] array = {100,2100,300,55};
动态初始化语法格式:
int[] array = new int[5];//这里的5表示数组的元素个数。
//初始化一个5个长度的intl类型数组
//每个元素默认值为0
String[] names = new String[6]; //初始化6个长度的String类
//型数组,每个元素默认值null
什么使用采用静态初始化方式,什么时候使用动态初始化方式呢?
当你创建数组的时候,确定数组中存储哪些具体元素时,就采用静态初始化方式。
当你创建数组的时候,不确定数组里面存储哪些数据,就使用动态初始化方式,预先分配内存空间。
也可后期赋值,注意下标别越界
main方法的编写方式,也可以采用c++的语法格式
String args[]

一维数组怎么遍历?

代码:

package com.javase.array;

public class ArrayTest01 {
    public static void main(String[] args) {
        int[] a = {111, 555, 666, 777, 888, 999};
        System.out.println("第一个元素为:" + a[0]);
        System.out.println("最后一个元素为: " + a[a.length-1]);
        a[0] = 123;//改
        System.out.println("第一个元素为:" + a[0]);
        //遍历数组
        for (int i = 0; i <a.length;i++){
            System.out.println(a[i]);
        }
        // System.out.println(a[7]);//越界,Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
        for(int i = a.length - 1;i >= 0;i--){
            System.out.println("倒序输出-->"+a[i]);
        }
    }
}

当一个方法类似是数组的时候,我们应该怎么传参:

public class ArrayTest03 {
    //当一个方法的类型是数组的时候,我们应该怎么传参。
    public static void main(String[] args) {
        int[] x = {1,2,3,4};
        String[] stringArray = {"abc","def","hehe"};
        String[] strArray = new String[10];
        printArray(x);
        printArray(stringArray);
        printArray(strArray);
        printArray(new String[3]);
        printArray(new int[4]);
    }

    public static void printArray(int[] array){
        for (int i = 0; i <array.length ; i++) {
            System.out.println(array[i]);

        }
    }
    public static void printArray(String[] args){
        for (int i = 0; i <args.length ; i++) {
            System.out.println("String数组中的元素" + args[i]);

        }
    }
}

main方法中的String[] args有什么用:

例:

// 登陆系统验证
public class ArrayTest06 {
    public static void main(String[] args) {
        if(args.length != 2 ){
            System.out.println("输入格式错误,应该输出类似zhangsan 123");
            return;
        }
        String username = args[0];
        String password = args[1];
        if("admin".equals(username) && "123".equals(password)){
            System.out.println("账户密码正确,登陆成功");
            System.out.println("您可以继续使用该系统");
        }else{
            System.out.println("登陆失败,您的账户名或者密码错误");
        }
    }
}

一维数组的深入:

数组中存储的类型为:引用数据类型
对于数组来说,实际上只能存储java对象的内存地址。
数组中存储的每个元素是引用

关于一维数组的扩容。
在java开发中,数组长度一旦确定不可变,那么数组满了怎么办?
数组满了,需要扩容
java中对数组的扩容是:
先建一个大容量的数组,然后讲小容量的数组中的数据一个一个拷贝到大数组当中。
结论:数组扩容效率较低。因为涉及到拷贝的问题。所以在以后开发中请注意:尽量少的进行拷贝数组。
可以在创建数组对象的时候预估一下多长合适,最好预估精确,这样可以减少数组扩容次数,提高效率。
一维数组拷贝,调用了System.arraycopy(拷贝源,拷贝源开始位置,目的数组,目的数组开始位置,拷贝长度)方法

当是数组中如果存储的元素是引用,可以拷贝吗?
当然可以,但是在这拷贝的是内存地址。
拷贝内存图:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:36:58  更:2021-07-30 12:38:44 
 
开发: 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年5日历 -2024/5/2 3:32:11-

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