(二)Java数组特性总结,你真的了解数组吗?
一、数组的特殊性
(一)数组标识符是一个引用,指向堆中创建的一个真实对象,这个对象(数组)保存了指向保存其他对象的引用。
(二)数组中保存引用类型时保存的是对象引用,基本数据类型数组保存基本数据的值。
(三)数组的length只表示数组能够容纳多少元素,不能保存实际保存的元素个数。
(四)多维数组可以使用Arrays.deepToString()将多维数组转换成String。
(五)不能使用泛型创建数组,例如:
T []list=new T[size];//会报错
解决方法:
使用Object转型:
Object [] objs=new Object[size];
T []Objs=(T[])objs;
二、Arrays实用功能
(一)Array常用函数
1.Array.equals()用于比较两个数组是否相等(deepEquals用于多维数组)
2.Array..fill()用于填充数组
3.Array.sort()用于对数组排序
4.Array.binarySearch()用于在已经排序的数组中查找元素
5.Array.toString()产生数组的String表示
6.Array.hashCode()产生数组的散列码
7.Array.asList()接受任意的序列或数组作为参数,将其转变成List容器
(二)复制数组
System.arraycopy(),使用此函数复制数组将会比for循环快很多。
格式System.arraycopy(src,beginIdex1,des,beginIndex2,length);
src:源数组 beginIndex1源数组开始复制的位置
des目的数组beginIndex2 目的数组开始被赋值的位置
length: 复制的长度
(三)数组的比较
Arrays.equals()方法,可以比较整个数组。数组相等的条件是元素个数相同,并且对应位置的元素也相等(通过调用每个元素的equals()作比较,基本类型调用对应包装类的equals()方法)
(四)数组元素的比较
Java通过使用策略设计模式来实现了不同元素的比较大小。
策略模式:将“会发生变化的代码”封装在单独的类中(策略对象),在其他类中,通过调用策略对象的方法实现不同的策略对象,结果不同的目的;
Java提供了两种方式来提供比较功能。
一种是实现java.lang.Comparable接口,让你的天生具有比较能力。此接口只有一个compareTo()方法,接受一个和本对象比较的另外一个对象,如果比它小就返回负数,相等为0,比它大就是正数。
示例:

测试代码:

运行结果:

另一种就是我们编写自己的comparator比较类,继承Comparator接口,实现compare方法,此方法有两个参数,即我们比较的两个对象。
示例:

测试代码:

运行结果:

总结:
自动包装机制和泛型的加入使得容器比数组更加灵活且富有优势。在java编程中,应该优先选用容器而不是数组,只有已证明性能成为问题(数组比容器对性能提高更多)时,才应该将程序重构为使用数组。
(二)Java数组特性总结,你真的了解数组吗?的更多相关文章
- Java 8新特性之 并行和并行数组(八恶人-8)
Jody Domingre 多莫歌·乔迪 “How you doing, dummy?” 你还好吗,傻瓜 一.基本介绍 Java8不仅增加了Stream,而且还增加了parallelStream(并行 ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- java提高篇(十九)-----数组之二
前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面. 三.性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但 ...
- JAVA三大特性之二——继承
很多人在学习了JAVA以后,都会了解这个概念,而且继承也会在以后的开发中经常用到,但对于JAVA的继承特性,很多人都了解的不够深入,不够完整,当然这其中包括我,所以我就想抽点时间来整理一下JAVA继承 ...
- java基础(二)-----java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少. ...
- [Java面试二]Java基础知识精华部分.
一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...
- Hi java新特性
java新特性 1995.5.23 java语言 1996 jdk1.0 250个类在API 主要用在桌面型应用程序1997 jdk1.1 500 图形用户界面编程1998 jdk1.2 2300 J ...
- Java高级特性 第5节 序列化和、反射机制
一.序列化 1.序列化概述 在实际开发中,经常需要将对象的信息保存到磁盘中便于检索,但通过前面输入输出流的方法逐一对对象的属性信息进行操作,很繁琐并容易出错,而序列化提供了轻松解决这个问题的快捷方法. ...
随机推荐
- 张高兴的 Xamarin.Forms 开发笔记:为 Android 与 iOS 引入 UWP 风格的汉堡菜单 ( MasterDetailPage )
所谓 UWP 样式的汉堡菜单,我曾在"张高兴的 UWP 开发笔记:汉堡菜单进阶"里说过,也就是使用 Segoe MDL2 Assets 字体作为左侧 Icon,并且左侧使用填充颜色 ...
- 50个Java多线程面试题(上)
Java 语言一个重要的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎.大多数待遇丰厚的 Java 开发职位都要求开发者精通多线程技术并且有丰富的 Java 程序开发.调试.优化经验 ...
- b64_md5加密Java、JavaScript实现
问题说明 MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串).经过md5后的字符数组中含有 ...
- win32 Message(MSG)消息处理
一般情况下的消息处理如下,TranslateMessage转换virtual-keys消息到characters消息,DispatchMessage调度一个消息给窗口程序. //getMessage第 ...
- jquery的2.0.3版本源码系列(1)总体结构
为什么选择2.X版本,而不是1.X版本,因为2.X不兼容IE6/7/8,所以少了兼容代码,让我们更专注于jquery原理的代码. 一共有8830行. 1.1 匿名函数自执行 首先,匿名函数的作用是,把 ...
- summernote使用心得
今日因项目需要所以使用了很有名气的富文本编辑器summernote,分享使用方法如下!填了一点坑,提供给需要的朋友借鉴! 直接转入我的前端网 地址: http://www.qdfuns.com/not ...
- 走近RDD
RDD(Resilient Distributed Datasets)弹性分布式数据集.RDD可以看成是一个简单的"数组",对其进行操作也只需要调用有限的"数组" ...
- 在htnl中,<input tyle = "text">除了text外还有几种种新增的表单元素
input标签新增属性 <input list='list_t' type="text" name='user' placeholder='请输入姓名' va ...
- 转载 远程用户连接mysql授权
授权法: 在安装mysql的机器上运行: 1.d:\mysql\bin\>mysql -h localhost -u root //这样应该可以进入MySQL服务器 2.mysql> ...
- mysql:Linux系统下mysql5.6的安装卸载
1.1. 下载rpm包 要使用yum 安装mysql,需要mysql的yum仓库,先从官网下载适合你系统的仓库 http://dev.mysql.com/downloads/repo/yum/ 我的是 ...