数组是数据类型一致的变量的集合。

一个:变量

一堆(多个):数组

数组语法:

1)数组变量(引用类型变量)

  数组变量通过引用地址引用了数组(数组对象)

2)数组(数组对象)

  数组就是个体,是一个整体

  数组元素的个数叫数组的长度length

  数组元素的范围:0 1 2…length-1

3)数组元素

  是数组中的每个变量,使用[下标]访问

  1. 定义数组变量;
  2. 创建数组(数组对象)
  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语言基础——数组相关推荐

  1. Java语言基础(数组)

    Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数 ...

  2. 定义整型数组_C语言基础-数组怎么用

    到目前为止,我们了解到C语言中可以使用整型,浮点型和字符型的数据类型来描述我们人类世界的各种数据,但是这些还远远不够-- 我们在IOT领域经常会遇到这样一个数据使用场景:某天的固定时间内,会有多台(我 ...

  3. C语言的数组基础,C语言基础-数组

    一.数组(一维数组) 什么是数组? 数组是一组有序的.类型相同的数据的集合 数组的作用? 处理一些类型相同的数据集合 数组的构成: 元素.下标或索引.数组名 定义: 使用前必须定义 1.存储类型 2. ...

  4. 黑马程序员——C语言基础--数组和字符串

    ---------------------- Java培训.Android培训.iOS培训..Net培训.期待与您交流! ---------------------- 数组 什么是数组? 数组是一组数 ...

  5. C++语言基础 —— 数组

    [一维数组] 与指定数字相同的数的个数(信息学奥赛一本通-T1102):点击这里 陶陶摘苹果(信息学奥赛一本通-T1103):点击这里 计算书费(信息学奥赛一本通-T1104):点击这里 数组逆序重存 ...

  6. C语言基础-数组逆序输出

    题目描述 输入一个数组的长度并输入数组中的内容,将数组中的内容逆序打印出来 输入 第一行为数组长度 第二行为数组中的内容 输出 输出一行,逆序打印数组内容 样例输入 5 1 2 3 4 5 样例输出 ...

  7. 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, ...

  8. Solidity语言基础-数组02

    Solidity中关于数组的定义如下: ●数组是存储相同数据类型的固定元素集合的数据结构; ●数组可以在声明时指定长度,也可以动态调整大小(长度) ; ●数组具有连续的内存位置,通过索引访问数组中的元 ...

  9. 【C# 7.0 in a Nutshell】第2章 C#语言基础——数组

    数组是一个存储相同类型元素的固定大小的顺序集合. 在元素类型后面加上方括号表示数组: char[] vowels = new char[5]; // Declare an array of 5 cha ...

最新文章

  1. python3常用函数大全_Python3NumPy——常用函数
  2. python程序员招聘信息-IT行业程序员招聘分析
  3. LeetCode35.搜索插入位置 JavaScript
  4. css中如何修改鼠标光标(指针)的样式和颜色
  5. 集群环境配置遇到的问题(随时更新)
  6. java中实现线程互斥的关键词_简单的互斥同步方式——synchronized关键字详解
  7. JoinPoint的用法
  8. 如何通过统计值z看置信水平_中恨他! 看看他如何通过这一简单技巧来改善统计信息页面...
  9. Elasticsearch教程-从入门到精通-ES索引迁移
  10. Python文本处理2个小案例(文本嗅探与关键词占比统计)
  11. MySQL----数据的显示位宽
  12. js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3
  13. 【期末划重点】电路与电子技术基础
  14. 计算机组成原理简答题第二章
  15. krait和kryo_高效的Java序列化(Kryo和FST)
  16. [我参加NVIDIA Sky Hackathon](模型训练yolo系列)
  17. 2018-2019年度学习计划
  18. NP-Hard问题--世界七大数学难题之首
  19. json 与 cJSON
  20. MES系统生产制造流程分析

热门文章

  1. (转)ZwQuerySystemInformation枚举内核模块及简单应用
  2. Rails之格式化价格方法
  3. traceroute命令的用法实例
  4. 神经网络最常用的10个激活函数,一文详解数学原理及优缺点
  5. this指针 java_彻底理解Java中this指针
  6. android timer后函数继续执行_Android内存异常机制(用户空间)_JE
  7. ssm异常捕获和处理
  8. mysql语句表名大小写敏感_Mysql 表名大小写敏感
  9. 1688学python学不会_还在害怕学不会Python嘛?这篇文章让你瞬间读懂Python入门!...
  10. python定义区间[-5、5_有一个数 x 在区间 [-5,0] 内 , 写出其条件表达式 。 (5.0分)_学小易找答案...