2013.8.7Java语言基础——数组

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

一个:变量

一堆(多个):数组

数组语法:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ruby array_Ruby中带有示例的Array.select方法

ruby arrayArray.select方法 (Array.select Method) In the last articles, we have seen how to iterate over the instances of Array class? We have seen that we have got methods like Array.each, Array.reverse_each and Array.map for this purpose. In this article…

十七、轮廓发现

一、轮廓发现原理 轮廓发现是在图像边缘提取的基础上寻找对象轮廓的方法&#xff0c;故边缘提取的阈值的选定会影响到最终轮廓发现的结果。 其本质是基于二值图像的&#xff0c;边缘提取常用Canny进行提取边缘 轮廓发现也是基于拓扑结构&#xff0c;扫描连通图&#xff0c;最后…

关于 WebRequest.RegisterPrefix

RegisterPrefix 方法将 WebRequest 子代注册到服务请求。 WebRequest 后代通常被注册来处理特定的协议&#xff08;例如 HTTP 或 FTP&#xff09;&#xff0c;但也可能被注册来处理对特定服务器或服务器上的路径的请求。 已注册的预注册保留类型包括下列类型&#xff1a; htt…

LeetCode 404. 左叶子之和思考分析

题目 计算给定二叉树的所有左叶子之和。 如果是下面的树&#xff0c;只有一个左叶子结点4 思考分析 由此我们可以得到左叶子结点的定义&#xff1a; cur->left !NULL && cur->left->leftNULL && cur->left->rightNULL 递归遍历累积操作 …

天王盖地虎

1&#xff0c;求有序数列中某个元素的个数 思想&#xff1a;二分找上下界&#xff1a; int element_count(int * set, int len, int e) {int f, a, b, t;for(a 0, b len - 1; a < b; set[t a b >> 1] < e ? (a t 1) : (b t - 1));for(f a, b len - 1; a…

ruby array_Ruby中带有示例的Array.cycle()方法

ruby arrayArray.cycle()方法 (Array.cycle() Method) In this article, we will study about Array.cycle() method. You must be a little more excited to read about Array.cycle method due to its catchy name as I was pretty amazed after reading this method. In the…

十八、对已经找到轮廓的图像进行测量

图像轮廓的获取可参考博文十七 一、相关原理 1&#xff0c;弧长和面积 对于弧长和面积&#xff0c;计算出来的轮廓单位都是像素 2&#xff0c;多边形拟合 每一个轮廓都是一系列的点&#xff0c;然后通过多边形进行拟合&#xff0c;无限的接近真实形状 相关API&#xff1a;…

Linux 终端登录SSH:解决SSH的Access Denied 和 make xconfig的使用

对于SSH&#xff1a; 可以不是用putty&#xff0c;尤其是putty出现 Access denied 的时候&#xff0c;请换用konsole 或者其他终端 &#xff08;如 terminal&#xff09;在command line中&#xff1a; # ssh 要访问的主机ip eg &#xff1a; ssh 192.168.111 然后确定…

LeetCode 513. 找树左下角的值 思考分析

题目 给定一个二叉树&#xff0c;在树的最后一行找到最左边的值。 递归解 左下角要满足两个条件&#xff1a; 1、深度最大的叶子结点 2、最左结点&#xff1a;使用前序遍历&#xff0c;优先左边搜索。 1、确定递归函数的参数和返回值 参数&#xff1a;树的根结点&#xff…

利用MyBatis的动态SQL特性抽象统一SQL查询接口

1. SQL查询的统一抽象 MyBatis制动动态SQL的构造,利用动态SQL和自定义的参数Bean抽象,可以将绝大部分SQL查询抽象为一个统一接口,查询参数使用一个自定义bean继承Map,使用映射的方法构造多查询参数.在遇到多属性参数(例如order by,其参数包括列名,升序降序类型,以及可以多个列及…

ctype函数_PHP Ctype(字符类型)函数

ctype函数Ctype功能 (Ctype functions) PHP provides some of the built-in functions, which are used to verify the characters in the string i.e. to check whether a string contains the characters of specific types. PHP提供了一些内置函数&#xff0c;这些函数用于验…

Linux 平台下 MySQL 5.5 安装 说明 与 示例

一.下载说明前期的一些准备说明&#xff0c;参考&#xff1a;MySQL 发展史http://blog.csdn.net/tianlesoftware/article/details/6999245Mysql 不同版本 说明http://blog.csdn.net/tianlesoftware/article/details/6723117 MySQL 分为Community Server 和 Enterprise Edition。…

开始python之旅

接触python缘于工作所需&#xff0c;曾经接触过C、C等语言&#xff0c;对于编程语言在学习上大体是一个套路&#xff0c;当然套路因人而异&#xff0c;适合就好。接下来&#xff0c;我将不断分享python的知识和学习技巧&#xff0c;共同学习。 起源 初识一门语言善于先了解语言…

LeetCode 112. 路径总和 、113. 路径总和 II 思考分析

目录112. 路径总和题目递归解递归解&#xff0c;其他人的解法迭代解&#xff0c;其他人的解法113. 路径总和 II题目递归解递归解&#xff0c;参考别人的思路112. 路径总和 题目 给定一个二叉树和一个目标和&#xff0c;判断该树中是否存在根节点到叶子节点的路径&#xff0c;…

kotlin 查找id_Kotlin程序查找矩阵的转置

kotlin 查找idA transpose of a matrix is simply a flipped version of the original matrix. We can transpose a matrix by switching its rows with its columns 矩阵的转置只是原始矩阵的翻转形式。 我们可以通过切换矩阵的行和列来转置矩阵 Given a matrix, we have to…

[mongodb翻译]分片和故障转移

一个配置恰当的mongodb 分片集群不会有单点失效。 本章节描述了集群服务器中可能出现的故障&#xff0c;及相应的对策。 1. 某个mongos路由进程故障 每一个mongos会运行每一台应用服务器上面&#xff0c;该应用服务器只能通过这个mongos进程和集群进行通信。mongos进程不是…

看张子阳的书真是收获很多,也醒悟了很多(一)

摘录&#xff1a; 这是有一次开会时&#xff0c;我的老总跟我们说了这样一个事例&#xff1a;通常来说&#xff0c;医生是很高尚的职业&#xff08;暂不考虑国内医生的负面新闻&#xff09;&#xff0c;尤其是牙科医生&#xff0c; 他们有着体面的工作并且收入不菲。但是&#…

【C++ grammar】抽象、封装与this指针

目录1、Abstraction and Encapsulation&#xff08;抽象与封装&#xff09;1. Data Field Encapsulation (数据域封装)2. Accessor and Mutator (访问器与更改器)2.1. To read/write private data, we need get/set function (为读写私有数据&#xff0c;需要get/set函数)2.2. …

java创建临时文件_用Java创建一个临时文件

java创建临时文件The task is to create a temporary file in Java. 任务是用Java创建一个临时文件。 Creating a temporary file 创建一个临时文件 To create a temporary file in java – we use createTempFile() method of "File" class. The createTempFile()…

十九、图像的形态学操作

一、图像形态学 图像形态学是图像处理学科的一个单独分支学科 主要针对的是灰度图和二值图像 是由数学的集合论以及数学中的拓扑几何原理发展而来 二、膨胀操作&#xff08;dilate&#xff09; 33的卷积核 以33为卷积核从左往右(从上往下)开始运行&#xff0c;若这卷积核…