day10_复习_数组_方法

news2024/11/18 6:59:28

非常重要的: 方法设计(参数,返回值,调用)

数组也重要,但是后续很少用! 是因为后期有更简单的【集合】,重要在于是一种思想,也是一种代码逻辑


关于数组:

  • 声明创建
  • 取值,存值
  • 遍历
  • 面试|算法 --> 排序
  • 内存图(堆,栈,引用)

今天

  • 数组工具类:Arrays
  • 数组扩容(拷贝)
  • 作业

一、Arrays

Arrays , 数组工具类, 主要提供一系列操作数组的方法,常用的

  • String toString(数组参数) 将数组的元素以字符串的形式返回(将数组转成字符串后返回)
  • void sort(数组参数), 将数组按照升序排序
  • copy
package com.qf.array;

import java.util.Arrays;

/**
 * @desc
 */
public class Demo1 {

    public static void main(String[] args) {
        // 数组声明创建方式1
        int[] arr1 = new int[3];
        // int arr2[];// 语法不错,但是不建议
        // 数组声明创建方式2
        int[] arr2 = new int[]{1,2,3,4};

        // 数组声明创建方式3
        int[] arr3 = {1,2,3,4};


        /**
         * 使用数组工具类,用法
         *  返回值 = 类名.方法名(参数)
         *------------------------------
         * toString方法,作用是将数组以字符串形式返回
         *-----------------------------
         * 作用:
         *   主要用来遍历数组元素,方便查看
         */
        // String s = Arrays.toString(arr3);
        // System.out.println(s );
        System.out.println( "遍历" + Arrays.toString(arr3));
        /**
         * Arrays工具第二个常用方法
         * void sort(数组),作用是将数组按照升序排序
         */
        int[] arr4 = {5,2,3,1,4};
        // 排序前遍历一遍,看效果
        System.out.println("排序前: "+Arrays.toString(arr4));

        // 调用方法完成排序
        Arrays.sort(arr4);

        System.out.println("排序后: "+Arrays.toString(arr4));
    }
}

二、数组扩容

数组特点是长度固定,那还怎么扩容?

  • 为什么扩容? 因为装不下
  • 怎么扩? 其实是重新创建一个大一点(一般是1.5倍,2倍)的数组,将之前数组的元素拷贝到新的数组

image-20231007104719762

三、拷贝

3.1 手动

思路

  1. 手动创建一个数组(假定原数组2倍长度)
  2. 遍历老数组取出元素,挨个存储到新数组
package com.qf.array;

import java.util.Arrays;

/**
 * @desc 数组扩容+拷贝
 */
public class Demo2 {

    public static void main(String[] args) {

        // 现有数组
        int[] arr = {1,2,3,4,5};
        System.out.println("扩容前: " + Arrays.toString(arr) );
        // 继续往里存储数据,但是存储不了
        // arr[5] = 6; // 报错,越界
        // 现在想将数组扩容,后再存储
        arr = copy1(arr);

        arr[5] = 6;
        System.out.println("扩容后: " + Arrays.toString(arr) );

    }

    // 需求: 将数组长度扩大2倍
    // 拷贝方式1: 手动实现
    public static int[] copy1(int[] arr) {
        // 创建一个新数组是原来的2倍
        int[] arr2 = new int[arr.length * 2];
        // System.out.println("拷贝前: " + Arrays.toString(arr2) );
        // 开始拷贝
        for (int i = 0; i < arr.length; i++) {
            // 取出老数组中的元素赋值给新数组
            arr2[i] = arr[i];
        }
        // System.out.println("拷贝后: " + Arrays.toString(arr2) );
        return arr2;
    }
}

image-20231007112526549

3.2 System工具【重要】

package com.qf.array;

import java.util.Arrays;

/**
 * @desc 数组扩容+拷贝(工具实现)
 */
public class Demo3 {

    public static void main(String[] args) {

        // 现有数组
        int[] arr = {1,2,3,4,5};
        System.out.println("扩容前: " + Arrays.toString(arr) );
        // 继续往里存储数据,但是存储不了
        // arr[5] = 6; // 报错,越界
        // 现在想将数组扩容,后再存储

        arr = copy(arr);// 将新数组地址值覆盖给变量
        // 即arr现在指向新的数组

        arr[5] = 6;
        System.out.println("扩容后: " + Arrays.toString(arr) );

    }

    public static int[] copy(int[] arr) {
        /**
         * 现在使用jdk自带工具方法完成数组拷贝
         * 参数1: src,资源(原始、源),即原数组
         * 参数2: srcPos,原始数组位置
         * 参数3: dest,目的地即新数组
         * 参数4: destPos,新数组位置
         * 参数5: length,长度即拷贝的元素个数
         *
         * 从原数组的指定位置拷贝指定个数到新数组指定位置
         */
        int[] arr2 = new int[arr.length * 2];
        System.arraycopy(arr,0,arr2,0,arr.length);
        return arr2;// 返回的是新数组的地址值
    }
}

3.3 Arrays工具

public class Demo4 {

    public static void main(String[] args) {
        // 现有数组
        int[] arr = {1,2,3,4,5};
        System.out.println("扩容前: " + Arrays.toString(arr) );
        // 继续往里存储数据,但是存储不了
        // arr[5] = 6; // 报错,越界
        // 现在想将数组扩容,后再存储

        /**
         * Arrays提供的方法
         * copyOf方法内部创建了新数组,长度是指定长度
         *   而且还会将之前老数组的元素拷贝到新数组
         *   最后将新数组的地址值返回给变量arr
         * 即arr指向最新的数组
         */
        arr = Arrays.copyOf(arr,arr.length*2);

        arr[5] = 6;
        System.out.println("扩容后: " + Arrays.toString(arr) );

    }
}

四、作业

题19

请创建一个长度为5的整数数组,并为数组中的元素赋值。遍历数组,打印所有元素,元素之间用空格隔开。比如:
数组为:1,2,3,4,5
打印结果:[1,2,3,4,5] 
    public static void main(String[] args) {
        int[] arr = {11, 22, 33, 44, 55};
        String s = toStrPro(arr);
        System.out.println(s );
        Arrays.toString(arr);
    }

    // 请创建一个长度为6的整数数组,并为数组中的元素赋值。遍历数组,打印所有元素,元素之间用空格隔开。比如:
    // 数组为:1,2,3,4,5
    // 打印结果:[1,2,3,4,5]
    public static void toStr(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {// 是不是最后一个
                System.out.print(arr[i] + "]");
            } else {
                System.out.print(arr[i] + ",");
            }
        }
    }

    // 模拟Arrays.toString()方法,将数组元素以字符串形式返回
    public static String toStrPro(int[] arr) {
        String s = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {// 是不是最后一个
                s += arr[i] + "]";
            } else {
                s += arr[i] + ",";
            }
        }
        return s;// "[1,2,3]"
    }

题目23

写一个方法 用于合并两个int类型的数组  合并法则如下
   {1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0} (合并)
 public static void main(String[] args) {
        int[] arr1 = {1,2,5,8,9};
        int[] arr2 = {1,3,0,6,10};
        int[] arr3 = concatArray(arr1,arr2);
        System.out.println(Arrays.toString(arr3) );
    }

    /**
     * 扩展知识:
     * 整型默认值: 0
     * 浮点型默认值: 0.0
     * char默认值: ' '
     * boolean默认值: false
     * ---
     * 引用类型: 数组,类,接口
     * 引用类型的默认初始值都是null
     */
    //  {1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0} (合并)
    public static int[] concatArray(int[] arr1, int[] arr2) {
        // 创建新数组,存储所有元素
        int[] arr3 = new int[arr1.length + arr2.length];

        // 方式1
        // for (int i = 0; i < arr1.length; i++) {
        //     arr3[i] = arr1[i];
        // }
        // for (int i = 0; i < arr2.length; i++) {
        //     arr3[arr1.length+i] = arr2[i];
        // }

        // 方式2
        // for (int i = 0; i < arr3.length; i++) {
        //     if (i < arr1.length) {
        //         arr3[i] = arr1[i];
        //     } else {
        //         arr3[i] = arr2[i - arr1.length];
        //     }
        // }

        // 方式3
        System.arraycopy(arr1,0,arr3,0,arr1.length);
        System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);

        return arr3;
    }

题目24

写一个方法 用于合并两个int类型的数组  合并法则如下
   {1,2,5,3,8,9}{1,3,0}---->{0,1,1,2,3,3,5,8,9} (合并并排序不需要去重)
 public static void main(String[] args) {
        int[] arr1 = {1,2,5,8,9};
        int[] arr2 = {1,3,0,6,10};
        int[] arr3 = concatSortArray(arr1,arr2);
        System.out.println(Arrays.toString(arr3) );

    }

    // 合并并排序
    //    {1,2,5,3,8,9}{1,3,0}---->{0,1,1,2,3,3,5,8,9} (合并并排序不需要去重)
    public static int[] concatSortArray(int[] arr1, int[] arr2) {
        // 创建新数组,存储所有元素
        int[] arr3 = new int[arr1.length + arr2.length];
        System.arraycopy(arr1,0,arr3,0,arr1.length);
        System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);
        Arrays.sort(arr3);
        return arr3;
    }

题目25

写一个方法 用于合并去重两个int类型的数组  合并法则如下
   {1,2,5,3,8,9}{1,3,0}---->{0,1,2,3,5,8,9} (合并并排序需要去重)
    public static void main(String[] args) {
        int[] arr1 = {1,2,5};
        int[] arr2 = {1,6,2,3,10};
        int[] arr3 = concatSortDistinctArray(arr1,arr2);
        System.out.println(Arrays.toString(arr3) );

    }

    // 写一个方法 用于合并去重两个int类型的数组  合并法则如下
    //    {1,2,5,3,8,9}{1,3,0}---->{0,1,2,3,5,8,9} (合并并排序需要去重)
    public static int[] concatSortDistinctArray(int[] arr1, int[] arr2) {
        // 创建新数组,合并所有元素
        int[] arr3 = new int[arr1.length + arr2.length];
        System.arraycopy(arr1,0,arr3,0,arr1.length);
        System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);
        // 排序
        Arrays.sort(arr3);
        // 去重
        // [0,1,1,2,3,5,8,9] --> [0,1,2,3,5,8,9]
        /**
         * 要新建数组存储去重后的元素
         * 利用极值思想,那就创建一个根原数组一样大的数组存储
         */
        int[] arr4 = new int[arr3.length];
        int index = 0;
        for (int i = 0; i < arr3.length; i++) {
            int e = arr3[i];
            boolean flag = false;// 判断是否有重复元素的标志,false是没有重复元素
            for (int j = 0; j < arr4.length; j++) {
                if (e == arr4[j]) {
                    flag = true;// 有重复,标志改动
                    break;
                }
            }
            if (!flag) {
                 arr4[index] = e;
                 index++;
            }
        }
        // 只存储不重复的元素
        int[] arr5 = new int[index];
        System.arraycopy(arr4,0,arr5,0,index);
        return arr5;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1066426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux服务器报错“No space left on device”如何解决

一、错误的含义&#xff0c;说明在服务器设备上的存储空间已经满了&#xff0c;不能再上传或者新建文件夹或者文件等。 二、确认查看服务器系统的磁盘使用情况是否是真的已经没有剩余空间&#xff0c;复制下面命令在服务器上运行&#xff0c;然后发现如果如下图所示那么表明sda…

Unsafe概述

前言 ​ 如果看过Java并发包里面的源码、或者netty网络通讯相关源码&#xff0c;就会到Unsafe类有一定的了解。这个与其的特性有关。 介绍 ​ **Unsafe是位于sun.misc包下的一个类&#xff0c;主要提供一些用于执行低级别、不安全操作的方法&#xff0c;如直接访问系统内存资…

《DevOps 精要:业务视角》- 读书笔记(三)

DevOps 精要:业务视角&#xff08;三&#xff09; 第3章 原则3.1 价值流3.2 部署流水线3.3 一切都应存储在版本控制系统中3.4 自动化配置管理3.5 完成的定义3.6 小结 第3章 原则 将原则从实践中分离出来&#xff0c;这是一种很有用的做法。当然了&#xff0c;这两个词分别有着…

CCF中国开源大会专访|毛晓光:“联合”是开源走向“共赢”的必由之路

受访嘉宾 | 毛晓光 记者 | 朱珂欣 2023 CCF 中国开源大会&#xff08; CCF ChinaOSC &#xff09;拟于 2023 年 10 月 21 日至 22 日在湖南省长沙市北辰国际会议中心召开。 作为第二届 CCF 中国开源大会&#xff0c;本届大会将组织特邀报告、高峰论坛和领域分论坛等不同类…

防御安全第四次作业

1. 什么是APT&#xff1f; APT全称&#xff1a;Advanced Persistent Threat 高级可持续威胁攻击。 指的是某组织对特定对象展开持续有效的攻击活动。 这种攻击活动具有极强的隐蔽性和针对性&#xff0c;通常会运用受感染的各种介质&#xff0c;供应链和社会工程学等手段&#x…

Kafka 架构

正文 一、Kafka的架构 如上图所示&#xff0c;一个典型的Kafka集群中包含若干Producer&#xff08;可以是web前端产生的Page View&#xff0c;或者是服务器日志&#xff0c;系统CPU、Memory等&#xff09;&#xff0c;若干broker&#xff08;Kafka支持水平扩展&#xff0c;一般…

解决 Jenkins 性能缓慢的问题~转

解决 Jenkins 性能缓慢的问题 Docker中文社区 ​​ 计算机技术与软件专业技术资格持证人 2 人赞同了该文章 没有什么比缓慢的持续集成系统更令人沮丧的了。它减慢了反馈循环并阻止代码快速投入生产。虽然像使用性能更好的服务器可以为您争取时间&#xff0c;但您最终必须投资…

AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

张量-复数操作函数

tf.complex(real,imag,name None),该函数用于将两实数转化为复数。 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()real tf.constant([2.25,3.25],dtype tf.float64) imag tf.constant([4.75,5.75],dtype tf.float64)with tf.Session() as …

Bigemap中如何添加21级的影像图

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 很多人在咨询如何查看21级的影像图 这里先来说一下影像的像素分辨率&#xff0c;一般17级是1米的、18级是0.5米、19级是0.25米以此类推&#xff0c;咱们国家测绘要求允…

HTTP/2和HTTP/3简介(上)(下)【中科大-郑烇老师】

文章目录 我的总结&#xff1a;HTTP 1.0HTTP 1.0 支持 多个并行连接HTTP 1.1 持久连接&#xff08;非流水线和流水线&#xff09; HTTP/2HTTP /3HTTP的演化 from &#xff1a; https://www.bilibili.com/video/BV1R34y1G76h/?spm_id_from333.788&vd_source21cce77bb69d40a…

Zookeeper经典应用场景实战(二)

文章目录 1、 Zookeeper 分布式锁实战1.1、 什么是分布式锁1.2、 基于数据库设计思路1.3、 基于Zookeeper设计思路一1.4、 基于Zookeeper设计思路二 1、 Zookeeper 分布式锁实战 1.1、 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候&#xff0c;大家往往采用Sync…

Bootstrap对段落和文本的设置(与段落-和文本相关的类)

目录 01-利用lead类突出显示段落文本02-为段落添加强调样式03-给段落文字添加鼠标停留时的说明语04-添加引用信息05-文本对齐(左对齐、居中对齐、右对齐、两端对齐)06-阻止文本换行07-以省略号显示溢出的文本内容08-转换文本内容中字母的大小写09-设置文本字体的粗细和斜体10-取…

The Sandbox 与 TB Media Global 达成合作

这家总部位于泰国的公司以开发原创、适合家庭观看的内容而闻名&#xff0c;将在 The Sandbox 中推出新的虚拟体验。 备受赞誉的 IP 开发公司 T&B Media Global 正式加入 The Sandbox 元宇宙。该公司以专注于故事讲述艺术而闻名。这次合作不仅为虚拟世界带来了新的维度&…

java常见API----indexof

API indexof API toUpperCase()用法及实例&#xff1a; package daysreplace;import java.util.Locale;public class IndexofApiTest {public static void main(String[] args) {String str "nanyanghhhhh";String bigStr "KKKKAAAAHHHH";System.…

4.物联网射频识别,RFID开发【智能门禁项目】

补充&#xff1a;学习路径 一。项目介绍及需求分析 1.酒店智能门禁使用场景介绍 1.客人入住 客人在前台办理入住手续&#xff0c;前台管理员通过门禁管理系统为客户开一张门禁卡 客户持卡到相应客房&#xff0c;用IC 卡刷卡开门 客人过了入住时间后&#xff0c;卡自动失效&a…

第十课 贪心

文章目录 第十课 贪心lc 322.零钱兑换--中等题目描述代码展示 lc860.柠檬水找零--简单题目描述代码展示 lc455.分发饼干--简单题目描述代码展示 lc122.买卖股票的最佳时机II--中等题目描述代码展示 lc45.跳跃游戏II--中等题目描述代码展示 lc1665.完成所有任务的最少初始能量--…

WPF中样式静态、动态资源、资源字典

1、绑定静态资源后&#xff0c;样式不会发生改变 绑定动态资源后&#xff0c;资源样式发生改变&#xff0c;控件也会改变 2、资源字典

为什么越来越多的人转行网络安全?

为什么越来越多的人转行网络安全&#xff1f; 目前&#xff0c;我国互联网已经从前期的爆发增长进入稳定发展阶段&#xff0c;同时每年大量计算机相关专业的毕业生进入就业赛道&#xff0c;导致IT行业逐渐趋于饱和状态&#xff0c;甚至出现裁员现象&#xff0c;去年很多大厂都…

《DevOps 精要:业务视角》- 读书笔记(二)

DevOps 精要:业务视角&#xff08;二&#xff09; 第2章 基础2.1 精益生产2.1.1 关键事实2.1.2 挑战 2.2 敏捷2.2.1 关键事实2.2.2 挑战 第2章 基础 2.1 精益生产 2.1.1 关键事实 正如1.2节提到的&#xff0c;DevOps非常依赖于精益生产的原则与实践。有些人甚至相信&#xf…