热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVASE回顾及思考(2)——数组的复制与动态扩展

我们知道在Java中数组是非基本类型既数组是对象(Object)的子类,所以用下面的这种方式是不能复制该对象的publicstaticvo

我们知道在Java中数组是非基本类型既数组是对象(Object)的子类,所以用下面的这种方式是不能复制该对象的

public static void main(String[] args) {int[] arry1 = new int[]{1, 2, 3, 4};//数组赋值int[] arry2 = arry1; //一个数组对象,两个引用同时引用该对象System.out.println(arry1[1]);System.out.println(arry2[1]);arry1[1] = 8;System.out.println(arry2[1]);}

这样并不能复制数组只是一个简单的赋值操作,下面我们采取另一种方式试一下。

public static void main(String[] args) {int[] arry1 = new int[]{1, 2, 3, 4};int[] arry3 =new int[arry1.length];for(int i=0; i

其实这个Java API中已经提供了一个非常简便并且效率比较高的方法System.arraycopy(src, srcPos, dest, destPos, length),这个方法的底层是用C++写的,比上面的那种for循环实现拷贝效率要高的多。 JDK 1.6以上提供了Arrays.copyOf(src, length)方法,其实这个方法的底层也是arraycopy方法实现的。

public static void main(String[] args) {int[] src = {1, 2, 3, 4};int[] dest = new int[4];System.arraycopy(src, 0, dest, 0, src.length);System.out.println(Arrays.toString(dest));}

public static void main(String[] args) {int[] src = {1, 2, 3, 4};int[] dest = Arrays.copyOf(src, src.length);System.out.println(Arrays.toString(dest));}
学过Java和C语言的知道Java的数组对象的大小是固定的,数组对象是不能扩展的,不过我们可以用上面复制数组的方法来实现数组的动态长度。

System.arraycopy()可以复制数组

Arrays.copyOf()可以简便的创建数组副本

public static void main(String[] args) {char[] cArr = {'大', '碗'};char[] temp = Arrays.copyOf(cArr, 4);temp[2] = '干';temp[3] = '拌';System.out.println(Arrays.toString(temp));}
下面我们通过上面的方法完成一个练习“从一段文字中统计某个字符所有的位置”

package com.dawanganban.test;import java.util.Arrays;public class ArrayCopyTest {public static void main(String[] args) {String str = "统计一个字符在字符串中的所有位置";int[] ary = countAll(str, '字');System.out.println(Arrays.toString(ary));} /*** 统计一个字符在字符串中的所有位置的方法* @param str 被统计的字符串* @param ch 统计的字符* @return 位置数组*/private static int[] countAll(String str, char ch){int[] ary = {};for(int i=0; i}



转:https://www.cnblogs.com/lanzhi/p/6469453.html



推荐阅读
  • 最近遇到了一个关于单链表的编程问题,这是来自福富公司的笔试题目。以往我通常使用C语言来解决这类问题,但这次决定尝试用Java来实现。该题目要求实现一个单链表,并完成特定的方法。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 设计一个算法,用于计算给定字符串中出现的不同ASCII字符数量。该任务将重点考察字符串处理、集合操作以及基础的输入输出技术。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 本文介绍了如何在 Django 项目中集成和配置 REST Framework,以支持 API 开发。通过在 settings.py 文件中注册 'rest_framework' 应用,可以轻松启用这一功能。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 在使用 PyInstaller 将 Python 应用程序打包成独立的可执行文件时,若项目中包含动态加载的库或插件,需要正确配置 --hidden-import 和 --add-binary 参数,以确保所有依赖项均能被正确识别和打包。 ... [详细]
  • 深入理解线程池及其基本实现
    本文探讨了线程池的概念、优势及其在Java中的应用。通过实例分析不同类型的线程池,并指导如何构建一个简易的线程池。 ... [详细]
author-avatar
奉召开博_745
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有