Java数组学习心得,欢迎拍砖

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

我以前对C++比较熟悉,所以就想当然将C++中的数组与Java中的数组画上了等号。读过《TIJ》之后我发现并不是这么回事,所以,完全应该重新认识Java中的数组。这篇文章不是对Java中数组的全面介绍,只是我的一些心得。(有些内容转引自《TIJ》)

概论:
相对于C++中的数组,Java中的数组已经有了很大的改进。首先,Java中的数组是对象,这就意味着与C++中的数组的根本不同,相反,Java中的数组与C++中的STL或Java中的容器类反而更相像一些(只是作为对象,它的方法要比STL中的容器类或者Collection类少很多)。另外,Java中有支持数组的一套算法,就像STL中的Algorithm与Java中的Collections类中的静态方法一样。当然,严格的说,这些算法也许并不是STL和Collections类所强调的通用算法;但是它们是包含在标准库中的高效的算法,对于程序员来说,这些算法可以不加修改的作用于各种不同类型的数组,也算是某种程度上的通用算法了。

下面主要从数组作为对象以及通用算法两部分来讨论Java数组区别于C++数组的特性。

1. Java中的数组作为对象带来的好处
1.1 越界检查

1.2 length field:与传统的C++中的数组相比,length字段可以方便的得到数组的大小;但要注意,仅仅可以得到数组的大小,不能得到数组中实际包含多少个元素,因为length 只会告诉我们最多可将多少元素置入那个数组。

1.3 初始化:对象数组在创建之初会自动初始化成null,由原始数据类型构成的数组会自动初始化成零(针对数值类型),(Char)0 (针对字符类型)或者false (针对布尔类型)。

1.4 数组作为返回值:首先,既然数组是对象,那么就可以把这个对象作为返回值;而且,不必担心那个数组的是否可用只要需要它就会自动存在而且垃圾收集器会在我们完成后自动将其清除

2.  通用算法
2.1 在java.util 中的Arrays 数组类容纳着一系列静态方法可简化我们对数组的操作,总共有四个函数。equals()用于比较两个数组是否相等、fill()可将一个值填入数组、sort()可对数组排序、而binarySearch()用于在排好序的数组中查找一个元素。所有这些方法都已为全部原始数据类型及对象重载使用。除此以外还有一个asList()方法可用它获取任意数组然后把数组转变成一个List 容器。

2.2 sort和binarySearch的使用:在Java 2 中有两个办法可提供比较功能。第一个办法是用自然比较方法,这是通过实现java.lang.Comparable 接口来实现。Java 2 提供的第二个办法来进行对象的比较,单独创建一个类实现名为Comparator 的一个接口。接口提供了两个方法分别是compare()和equals() 。不过除非考虑到一些特殊的性能方面的因素,否则我们用不着实现equals() ,因为每次创建一个类的时候它都会默认从Object 继承,而Object 已经有了一个equals()。Comparator可以作为sort和binarySearch方法的参数。


3. 需要注意的问题
3.1 Java中的数组中既可以存储基本的值类型,也可以存储对象。对象数组和原始数据类型数组在使用方法上几乎是完全一致的,唯一的差别在于对象数组容纳的是引用而原始数据类型数组容纳的是具体的数值。这一点要特别注意,在讨论关于数组的问题时,一定要先确定数组中存储的是基本值类型还是对象。特别是在调试程序时,要注意这方面。
例如:
Arrays提供了一个fill()方法将一个值复制到一个位置,如果是对象数组则将引用复制到每一个位置。
Java 标准库提供了一个静态方法名为System.arraycopy() 专门用于数组的复制它复制数组的速度比自己亲自动手写一个for 循环来复制快得多System.arraycopy()已进行了重载可对所有类型进行控制。无论原始数据类型数组还是对象数组我们都可对它们进行复制。但是假如复制的对象数组,那么真正复制的只是引用对象本身可不会复制。

3.2 为什么使用数组而不使用ArrayList等容器类?
效率和类型。
3.2.1 效率:
对于Java 来说要想保存和随机访问一系列对象实际是对象引用效率最高的方法莫过于数组。
3.2.2 类型:
Java标准库中的容器类都把对象当作没有具体类型那样对待,换言之它们将其当作Object 类型处理。Object 类型是Java 中所有类的根类,从某种角度看这种处理方法是非常合理的,我们只需构建一个容器然后所有Java 对象都可进入那个容器。原始数据类型除外,可用Java 的基类型封装器类将其作为常数置入容器或自建一个类把它们封装到里面当作可变值进行对待。这再一次体现出数组相较于普通容器的优越性,创建一个数组时可让它容纳一种特定的类型。这意味着可进行编译时间的类型检查防范自己设置了错误的类型或者错误地提取了一种类型,而不是运行时的Exception。

 

总结:在你想容纳一组对象的时候第一个也是最有效的一个选择便是数组。

Java使用数组学习心得 数组的长度初始化后不可变,而String类型初始化后值不可变 提到数组和字符串,就不得不提两者很容易混淆的length和length()属性,下面这篇文章对比了两者: 初始化数组时 不要既动态初始化又静态初始化,即不要既指定长度又分配初始值 下面是错误示范: int[] x = new int[3]{1,2,3}; 正确写法: int[] x = new int[3]; x[0] = 1; x[1] = 2; x[3] = 3; 或者: int[] x = new .. 阅读详情

相关推荐

Java学习心得数组

一、数组的概念 数组可以看成多个相同类型数据的组合。数组属于引用类型,也可以看成对象,其中每一个元素可以看成一个成员变量。数组的元素可以是任何数据类型,包括基本类型和引用类型。c和c++中的数组都可以分配在栈上面,Java中的数组只能分配在堆上面。 二、一维数组 声明方式有两种: 格式一:数组元素类型  数组名[ ];即type var[ ]格式二:数组元素类型[

寒风中的信 699

java数组心得_java心得--数组1

1.数组Java语言中的一种引用数据类型,它是一组相同类型的数据的有序集合。适用于集中管理类型相同、用途相近的多个数据µJava数组要求所有数组元素具有相同的数据类型。 (可以是基本数据类型,也可是引用数据类型)µ一旦数组的初始化完成,数组在内存中所占的存储空间将被固定下来,因此数组的长度不可改变。µ通过数组元素的索引号(或者说是下角标)来访问数组元素。µ数组元素的...

weixin_35125159的博客 433

关于java数组学习心得

##### 求平均数并打印出大于平均数的数```java    public static void main(String[] args)    {        Scanner in = new Scanner(System.in);        int x;        int [] numbers = new int [100];        //定位数组并创建了数组        ...

hezixiaowu的博客 2014

Java学习心得--数组

Java学习心得 关于数组: Java数组的定义是一串具有相同属性的变量, 存储的是Java的地址值,通过地址值再去找到对应的存储的数据. 比如直接打印数组名字,得到的是数组对应的内存地址:哈希值. 数组的格式(以下几种都可以): 1.数据类型 [] 数组名称 = new 数据类型 [数组的内存空间值]; 例 : int [] num = new int [] ; 2.数据类型 [] 数组名称 = {数组中要存储的数值}; 例 : int [] num = {1,2,3}; 3.数据类型 [] 数组名称

DYHSWYXBB的博客 330

[转]Java数组学习心得欢迎拍砖

我以前对C++比较熟悉,所以就想当然将C++中的数组Java中的数组画上了等号。读过《TIJ》之后我发现并不是这么回事,所以,完全应该重新认识Java中的数组。这篇文章不是对Java数组的全面介绍,只是我的一些心得。(有些内容转引自《TIJ》) 概论: 相对于C++中的数组Java中的数组已经有了很大的改进。首先,Java中的数组对象,这就意味着与C++中的数组的根...

weixin_30846599的博客 87

Java数组学习心得欢迎拍砖 选择自 jjjer 的 Blog

 我以前对C++比较熟悉,所以就想当然将C++中的数组Java中的数组画上了等号。读过《TIJ》之后我发现并不是这么回事,所以,完全应该重新认识Java中的数组。这篇文章不是对Java数组的全面介绍,只是我的一些心得。(有些内容转引自《TIJ》)概论:相对于C++中的数组Java中的数组已经有了很大的改进。首先,Java中的数组对象,这就意味着与C++中的数组的根本不同,相反,Ja

小马的专栏 1014

Java异常学习心得,欢迎拍砖

Java异常学习心得本文重在Java中异常机制的一些概念。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。1. 异常机制1.1 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个

jjjer的专栏 2250

Java容器类学习心得欢迎拍砖

Java容器类学习心得由于我对C++比较熟悉,所以学习Java应该重点体会Java带来的新概念。本文基本上是Java标准库中集合框架的基本概念,没有例子。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。1. 接口整个Java容器类的基础是容器接口(例如Collection,Map等接口),而不是类。使用接口的最大好处在于将容器的实现与容器的接口分开,这就意味着

jjjer的专栏 1397

第一周:PageRank学习心得--JAVA编程实现

最近复习Hadoop  发现之前很多笔记,贴出来很大家共享下。 Google 矩阵和Page Rank的简单介绍                                                                                                                                       

我是一只有梦想的攻城狮 1405

【软考篇】--基础知识总结

第二次软考已经拉开序幕,作为我们组的小小组长,第一次会议的基调已经奠定好了,那就必过!!!小组已经 学习两天了,感觉收获的特别多,新生是小小太阳,贤达是小能手,聚哥就是个万能宝宝,咱组反正就是人才辈出!        第一天,我们的学习内容是J2SE视频的基础知识部分,以及我们的重点内容:数组和线程。下边对关着书和笔记 做一些简单的总结。       基础知识总结:

努力成为自己的榜样。 985

Swift 笔记四:collection集合

大家一起探讨swift的学习心得欢迎大家拍砖,点赞,关注,订阅!     讨论QQ群:105584515    版权所有,转载注明出处: 雨燕天涯浪 QQ 2645059985     废话少说,上干货!

johnasSwift的专栏 525

java学习心得 4 数组

数组 数组的一些基本知识 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括 基本数据类型和引用数据类型。 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是 这块连续空间的首地址。 数组的长度一旦确定,就不能修改。 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。 数组的分类: 按照维度:一维数组、二维数组、三维数组、… 按照元素的数据类型分:基本数据...

yikuki的博客 265

JAVA数组学习总结

JAVA数组学习总结

Syllll_的博客 1103

javascript ES5中 foreach()遍历方法

forcach() array.forEach(function(currentValue, index, arr)) currentValue:数组当前项的值 index:数组当前项的索引 (可选) arr:数组对象本身 filter() 方法创建一个新的数组, 新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组 注意它直接返回一个新数组 代码: <script> var arr=[50,86,12,10,0,38]; var newa

weixin_44638167的博客 6296

java数组实验心得体会_JAVA实验报告心得

实用汇总报告1/5北京联合大学信息学院“面向对象程序设计”课程上机实验报告题目:java上机实验心得思想到姓名(学号):专业:计算机科学与技术编制时间:2012年12月19日版本:1.0.0指导教师:北京联合大学-信息学院编制实验1熟悉java运行环境实验目的:熟悉jdk环境和操作,编写简单的java应用程序。心得思想到:在该实验中,我碰到的问题是jdk环境变量的设置。解决方法是通过查阅资料书...

weixin_39573781的博客 3659

c++ string数组赋值_java打卡10 数组操作

数组操作1. 数组地址转移问题【难点】public 问题总结: 2. 数组作为方法的参数2.1 还是比葫芦画瓢public 2.2 数组作为参数分析过程/* 2.3 方法实现和文档注释/** 2.4 方法验证和传参方式class 2.5 方法运行内存图【难点】2.6 总结1. 数组作为方法参数的固定格式 (数据类型[] 数组参数名) 2. 数组作为方法的实际参数的固定格式 ...

weixin_39717692的博客 226

java数组心得_javase基础心得体会总结(1)

Java1.jdk,jvm,jre概念:java跨平台因为jvm虚拟机不跨平台,执行的是字节码文件,而不是二进制代码;jdk是开发环境和运行环境,开发环境就是SDK,jre就是运行环境。2。面向对象:1。封装2。抽象3。继承4。多态3。java数据类型1。自动转换和强制转换4。java注释/***/ //5.java标识符和关键字6。java运算符7。java内存空间分配1。栈:存放简单数据类...

weixin_32899685的博客 292
下一篇: Java容器类学习心得,欢迎拍砖
jjjer
博客等级 码龄22年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值