2013.8.7Java语言基础——数组
数组是数据类型一致的变量的集合。
一个:变量
一堆(多个):数组
数组语法:
1)数组变量(引用类型变量)
数组变量通过引用地址引用了数组(数组对象)
2)数组(数组对象)
数组就是个体,是一个整体
数组元素的个数叫数组的长度length
数组元素的范围:0 1 2…length-1
3)数组元素
是数组中的每个变量,使用[下标]访问
- 定义数组变量;
- 创建数组(数组对象)
- 访问数组元素
1 public class Test { 2 3 public static void main(String[] args) { 4 //1)定义数组变量 5 int[] ary;//声明int[] 数组类型的变量ary 6 int ary1;//也是声明数组变量,但很少使用!!! 7 //System.out.println(ary[0]);//编译错误,ary没有初始化 8 ary = null;//null 空,没有 9 //System.out.println(ary[0]);//运行异常,空指针异常 10 11 //空指针异常发生原因:引用类型的变量值是null,不引用任何对象 12 //当利用引用变量访问属性(数组元素)和方法时,出现空指针异常 13 14 //2)创建数组(创建 数组对象) 15 ary = new int[3];//数组对象有3个元素 16 //创建数组对象(new int[3]),将对象的引用赋值给ary变量 17 //ary就引用了数组对象,这个对象有3个元素 18 System.out.println(ary[0]);//0 19 //System.out.println(ary[3]);//运行异常,数组下标越界 20 //java数组元素是自动初始化的,初始值为零值,各种零值如下: 21 //0 0.0 \u0000 null false 22 double[] d = new double[3]; 23 System.out.println("d[0] = "+d[0]);//d[0] = 0.0 24 char[] c = new char[3]; 25 System.out.println("c[0] = "+c[0]);//c[0] = (看不出显示什么) 26 System.out.println((int)'\u0000');//\u0000的编码值是0 27 String[] s = new String[3]; 28 System.out.println("s[0] = "+s[0]);//s[0] = null(字符串数组初始化是null) 29 boolean[] b = new boolean[3]; 30 System.out.println("b[0] = "+b[0]);//b[0] = false 31 32 //java中数组创建的3种方式 33 //new 类型[长度] 34 //类型是任何类型:基本类型、类类型(String,Integer) 35 //长度:变量或常量值:0~Integer.MAX_VALUE 36 37 //new 类型[]{元素0,元素1,元素2} 38 //直接给出元素,元素直接初始化,元素的个数就是长度 39 ary =new int[]{2,3}; 40 System.out.println(ary[0]);//2 41 42 //静态初始化 43 //类型[] 变量={元素0,元素1,元素2} 44 int[] ary4 = {2,3,4}; 45 //静态初始化“只能用于”声明变量同时初始化! 46 //ary = {4,5,6}//编译错误 47 ary = new int[]{4,5,6};//没有问题 48 49 //new int[length]适合创建不知道具体的元素,数量很多 50 //new int[]{2,3,4}适合已经知道具体元素,元素比较少 51 //{4,5,6}只适合知道元素,并只能使用在声明变量时直接初始化 52 53 //3)访问数组元素 54 //数组元素一旦创建,数组的长度是不可以改变的 55 //使用.length属性可以获取数组的长度 56 //数组不能越界访问,会出现运行异常 57 ary = new int[]{5,6,7}; 58 System.out.println(ary.length); 59 ary[1]++; 60 System.out.println(ary[1]);//7 61 System.out.println(ary[-1]);//运行异常!下标越界 62 //迭代数组元素,迭代数组也称为遍历数组,就是逐一处理元素 63 for(int i=0;i<ary.length;i++){ 64 System.out.println(ary[i]); 65 } 66 } 67 }
使用数组非常有用的API方法
(使用API方法:API方法封装了常用算法功能,使用这些功能简化开发过程,提高开发效率)
Arrays.toString:用于字符串表示数组元素
1 package TestCode; 2 3 import java.util.Arrays; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 String[] str =new String[]{"A","b","c","d"}; 9 System.out.println(Arrays.toString(str));//打印出数组元素[A, b, c, d] 10 }
Arrays.equals:用于比较两个数组内容是否相等(便捷)
1 package TestCode; 2 3 import java.util.Arrays; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 char[] a1 = new char[]{'a','b','c'}; 9 char[] a2 = new char[]{'a','b','c'}; 10 char[] a3 = new char[]{'a','c','d'}; 11 System.out.println(Arrays.equals(a1, a2));//true 12 System.out.println(Arrays.equals(a1, a3));//false 13 } 14 }
Arrays.sort:用于实现数组排序
1 package TestCode; 2 3 import java.util.Arrays; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 char[] a = new char[]{'a','d','f','c','b','g'}; 9 System.out.println(Arrays.toString(a));//[a, d, f, c, b, g] 10 Arrays.sort(a); 11 System.out.println(Arrays.toString(a));//[a, b, c, d, f, g] 12 } 13 }
Arrays.binarySearch:用于实现有序数组 的二分法查找
只能查找排序后的数组,不然得到的结果不稳定
1 package TestCode; 2 3 import java.util.Arrays; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 char[] a = new char[]{'a','d','f','c','b','g'}; 9 int index= Arrays.binarySearch(a, 'c'); 10 System.out.println(index);//-2负数找不到 11 Arrays.sort(a); 12 index= Arrays.binarySearch(a, 'c'); 13 System.out.println(index);//在排序后数组的第2位 14 } 15 }
数组的复制
最常见用途:数组的扩容算法
1 package TestCode; 2 3 import java.util.Arrays; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 int[] ary1 = {4,5,6}; 9 int[] ary2 = ary1;//数组变量的赋值,但数组还是同一个。ary1 ary2互相影响 10 ary2[1]++; 11 System.out.println(Arrays.toString(ary1));//[4, 6, 6] 12 System.out.println(Arrays.toString(ary1));//[4, 6, 6] 13 //数组的复制:1)使用for循环实现 2)使用API 14 //将ary1引用数组进行复制 15 int[] ary3 = new int[ary1.length]; 16 for(int i=0;i<ary1.length;i++){ 17 ary3[i] = ary1[i]; 18 } 19 ary3[1]++; 20 System.out.println(Arrays.toString(ary3));//[4, 7, 6] 21 System.out.println(Arrays.toString(ary1));//[4, 6, 6] 22 //使用API System.arraycopy()实现复制,比较早期,用C写的,性能好 23 int[] ary4 = new int[ary1.length]; 24 //参数:源数组,源数组位置,目标数组,目标数组位置,个数 25 System.arraycopy(ary1, 0, ary4, 0, ary1.length); 26 System.out.println(Arrays.toString(ary1)); 27 System.out.println(Arrays.toString(ary4)); 28 //使用Arrays.copyOf()方法(JDK1.5开始出现),底层就是arraycopy 29 int[] ary5 = Arrays.copyOf(ary1, ary1.length); 30 System.out.println(Arrays.toString(ary1)); 31 System.out.println(Arrays.toString(ary5)); 32 33 } 34 }
数组的扩容 与 追加
1) 数组创建以后长度不可改变
2) 利用更换数组的方式实现扩容算法
3) 更换数组时候,利用复制方法保持原数组内容。
数组扩容是Java API 实现的常用算法!
1 package TestCode; 2 3 import java.util.Arrays; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 // 扩容原理:更换新数组 9 String[] playlist = { "song1", "song2" }; 10 System.out.println(Arrays.toString(playlist)); 11 playlist = new String[] { "song1", "song2", "song3" }; 12 System.out.println(Arrays.toString(playlist)); 13 // 扩容:为playlist扩容并追加 新 歌曲 “song4” 14 playlist = Arrays.copyOf(playlist, playlist.length + 1); 15 playlist[playlist.length - 1] = "song4"; 16 System.out.println(Arrays.toString(playlist)); 17 // 1) 复制新数组(增加容量) 18 // 2) 替换原数组 19 String[] newOne = new String[playlist.length + 1]; 20 System.arraycopy(playlist, 0, newOne, 0, playlist.length); 21 playlist = newOne; 22 System.out.println(Arrays.toString(playlist)); 23 } 24 }
转载于:https://www.cnblogs.com/grape/p/3244159.html
2013.8.7Java语言基础——数组相关推荐
- Java语言基础(数组)
Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数 ...
- 定义整型数组_C语言基础-数组怎么用
到目前为止,我们了解到C语言中可以使用整型,浮点型和字符型的数据类型来描述我们人类世界的各种数据,但是这些还远远不够-- 我们在IOT领域经常会遇到这样一个数据使用场景:某天的固定时间内,会有多台(我 ...
- C语言的数组基础,C语言基础-数组
一.数组(一维数组) 什么是数组? 数组是一组有序的.类型相同的数据的集合 数组的作用? 处理一些类型相同的数据集合 数组的构成: 元素.下标或索引.数组名 定义: 使用前必须定义 1.存储类型 2. ...
- 黑马程序员——C语言基础--数组和字符串
---------------------- Java培训.Android培训.iOS培训..Net培训.期待与您交流! ---------------------- 数组 什么是数组? 数组是一组数 ...
- C++语言基础 —— 数组
[一维数组] 与指定数字相同的数的个数(信息学奥赛一本通-T1102):点击这里 陶陶摘苹果(信息学奥赛一本通-T1103):点击这里 计算书费(信息学奥赛一本通-T1104):点击这里 数组逆序重存 ...
- C语言基础-数组逆序输出
题目描述 输入一个数组的长度并输入数组中的内容,将数组中的内容逆序打印出来 输入 第一行为数组长度 第二行为数组中的内容 输出 输出一行,逆序打印数组内容 样例输入 5 1 2 3 4 5 样例输出 ...
- JSD-2204-Java语言基础-数组-方法-Day06
1.数组 1.1复制数组+扩容 复制 System.arraycopy(a,1,b,0,4) int[] a = {10,20,30,40,50};int[] b = new int[6]; //0, ...
- Solidity语言基础-数组02
Solidity中关于数组的定义如下: ●数组是存储相同数据类型的固定元素集合的数据结构; ●数组可以在声明时指定长度,也可以动态调整大小(长度) ; ●数组具有连续的内存位置,通过索引访问数组中的元 ...
- 【C# 7.0 in a Nutshell】第2章 C#语言基础——数组
数组是一个存储相同类型元素的固定大小的顺序集合. 在元素类型后面加上方括号表示数组: char[] vowels = new char[5]; // Declare an array of 5 cha ...
最新文章
- python3常用函数大全_Python3NumPy——常用函数
- python程序员招聘信息-IT行业程序员招聘分析
- LeetCode35.搜索插入位置 JavaScript
- css中如何修改鼠标光标(指针)的样式和颜色
- 集群环境配置遇到的问题(随时更新)
- java中实现线程互斥的关键词_简单的互斥同步方式——synchronized关键字详解
- JoinPoint的用法
- 如何通过统计值z看置信水平_中恨他! 看看他如何通过这一简单技巧来改善统计信息页面...
- Elasticsearch教程-从入门到精通-ES索引迁移
- Python文本处理2个小案例(文本嗅探与关键词占比统计)
- MySQL----数据的显示位宽
- js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3
- 【期末划重点】电路与电子技术基础
- 计算机组成原理简答题第二章
- krait和kryo_高效的Java序列化(Kryo和FST)
- [我参加NVIDIA Sky Hackathon](模型训练yolo系列)
- 2018-2019年度学习计划
- NP-Hard问题--世界七大数学难题之首
- json 与 cJSON
- MES系统生产制造流程分析
热门文章
- (转)ZwQuerySystemInformation枚举内核模块及简单应用
- Rails之格式化价格方法
- traceroute命令的用法实例
- 神经网络最常用的10个激活函数,一文详解数学原理及优缺点
- this指针 java_彻底理解Java中this指针
- android timer后函数继续执行_Android内存异常机制(用户空间)_JE
- ssm异常捕获和处理
- mysql语句表名大小写敏感_Mysql 表名大小写敏感
- 1688学python学不会_还在害怕学不会Python嘛?这篇文章让你瞬间读懂Python入门!...
- python定义区间[-5、5_有一个数 x 在区间 [-5,0] 内 , 写出其条件表达式 。 (5.0分)_学小易找答案...