热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

Java中的数组基础知识学习教程

这篇文章主要介绍了Java中的数组基础知识学习教程,文中同时也整理了Java对数字类型的支持状况及Number类中的方法,需要的朋友可以参考下

数字

通常情况下,当我们处理数字时,使用原始数据类型,如 byte,int,long,double 等。

示例

int i = 5000;
float gpa = 13.65;
byte mask = 0xaf;

然而,在开发中,我们会遇到需要使用对象而不是原始数据类型的情况。为了实现这个, Java 为每个原始数据类型提供包装类。

所有的包装类 (Integer, Long, Byte, Double, Float, Short) 是抽象类 Number 的子类。

201621884859636.jpg (400×167)

这种包装是由编译器处理,这个过程称为装箱。因此,当一个原始数据类型被使用,当需要一个对象时,编译器将原始数据放入其包装类。同样地,编译器也能将对象取出返回到原始数据类型。Number 是 java.lang 包的一部分。

这里是装箱和拆箱的一个例子:

public class Test{

  public static void main(String args[]){
   Integer x = 5; // boxes int to an Integer object
   x = x + 10;  // unboxes the Integer to a int
   System.out.println(x); 
  }
}

这将产生以下结果:

代码如下:
15

当 x 被分配整数值,则编译器将整数放入箱中,因为 x 为整数对象。然后,x 被拆箱,以便它们可以被添加为整数。

Number 方法
以下是对 Number 类实现的所有子类中实现的实例方法的列表:

SN 方法描述
1 xxxValue()
这个Number对象的值转换为XXX的数据类型并返回
2 compareTo()
把这个Number对象与参数做比较
3 equals()
确定这个数字对象是否等于参数
4 valueOf()
返回一个Integer对象持有指定的原始值
5 toString()
返回表示指定的int或整数的值的String对象
6 parseInt()
此方法用于获取某个字符串的原始数据类型
7 abs()
返回参数的绝对值
8 ceil()
返回的最小整数大于或等于该参数。返回为double
9 floor()
返回的最大整数小于或等于该参数。返回为double
10 rint()
返回的整数,它是最接近值该参数值。返回为double
11 round()
返回最接近的long或者int,通过该方法的返回类型所指参数
12 min()
返回两个参数中较小的
13 max()
返回两个参数中较大的
14 exp()
返回自然对数的底数e,该参数的幂值
15 log()
返回参数的自然对数
16 pow()
返回第一个参数的提高至第二个参数的幂值
17 sqrt()
返回参数的平方根
18 sin()
返回指定的double值的正弦值
19 cos()
返回指定的double值的余弦值
20 tan()
返回指定的double值的正切值
21 asin()
返回指定的double值的反正弦
22 acos()
返回指定的double值的反余弦值
23 atan()
返回指定的double值的反正切值
24 atan2()
将直角坐标(x,y)转换为极坐标(r,θ)并返回θ
25 toDegrees()
将参数转换为度
26 toRadians()
将参数转换为弧度
27 random()
返回一个随机数


数组
Java 提供了一个数据结构:数组,用于存储相同类型的元素的一个固定大小的连续集合。数组是用于存储数据的集合,但往往将数组认为是相同类型的变量的集合。

跟声明单个变量相反,如 number0, number1, ... number99, 声明一个数组变量,如数字和使用 numbers[0], numbers[1] ..., numbers[99] 来表示各个变量。

此次教程将介绍如何使用索引变量声明数组变量,创建数组,并处理数组。

声明数组变量
要使用一个程序的数组,必须声明一个变量来引用数组,必须指定数组的变量可以引用的类型。下面是来声明一个数组变量的语法:

dataType[] arrayRefVar;  // preferred way.

or

dataType arrayRefVar[]; // works but not preferred way.

注 风格 dataType[] arrayRefVar 是首选的。风格 dataType arrayRefVar[] 来自于 C/C++ 语言, 方便Java 继承 C/C++ 的编程风格。

示例

下面的代码片段是这种语法的例子:

double[] myList;     // preferred way.

or

double myList[];     // works but not preferred way.

创建数组
可以通过使用 new 运算符使用以下语法创建一个数组:

arrayRefVar = new dataType[arraySize];

上面的语句做了两件事:

  • 它创建了一个使用 new dataType[arraySize] 的数组;
  • 它将新创建的数组引用分配给变量 arrayRefVar。

声明数组变量,建立一个数组,并分配给变量数组引用可以在一个语句中组合使用,如下所示:

dataType[] arrayRefVar = new dataType[arraySize];

另外,可以创建数组,如下所示:

dataType[] arrayRefVar = {value0, value1, ..., valuek};

数组元素通过索引访问。数组的下标是从0开始的,也就是说,它们从0开始到 arrayRefVar.length-1。

示例

下面的语句声明一个数组变量 myList,创建 double 类型的10个元素的数组,并把它的引用分配到 myList :

double[] myList = new double[10];

以下图片代表数组 myList。在这里,myList 有10个 double 值,索引是从0到9。

201621885056282.jpg (450×243)

处理数组
当处理数组元素时,经常使用的是 loop 循环或 foreach 循环,因为一个数组中所有的元素是相同类型的并且数组的大小是已知的。

示例

下面是一个演示如何创建,初始化和处理数组的完整例子:

public class TestArray {

  public static void main(String[] args) {
   double[] myList = {1.9, 2.9, 3.4, 3.5};

   // Print all the array elements
   for (int i = 0; i  max) max = myList[i];
   }
   System.out.println("Max is " + max);
  }
}

这将产生以下结果:

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

foreach 循环
JDK 1.5 引入了一个新的 for 循环被称为 foreach 循环或增强的 for 循环,它无需使用一个索引变量来完整的遍历数组。

示例

下面的代码显示数组 myList 中的所有元素:

public class TestArray {

  public static void main(String[] args) {
   double[] myList = {1.9, 2.9, 3.4, 3.5};

   // Print all the array elements
   for (double element: myList) {
     System.out.println(element);
   }
  }
}

这将产生以下结果:

1.9
2.9
3.4
3.5

将数组传递给方法
正如传递基本类型值的方法,也可以将数组传递给方法。例如,下面的方法显示在一个 int 数组中的元素:

public static void printArray(int[] array) {
 for (int i = 0; i 

你可以通过传递数组调用它。例如,下面的语句调用方法 PrintArray 显示3,1,2,6,4,2:

printArray(new int[]{3, 1, 2, 6, 4, 2});

从一个方法返回一个数组
一个方法也可以返回一个数组。例如,下面所示的方法返回一个数组,它是另一个数组的反转:

public static int[] reverse(int[] list) {
 int[] result = new int[list.length];

 for (int i = 0, j = result.length - 1; i 

Arrays 类
java.util.Arrays 中的类包含各种静态方法用于排序和搜索数组、数组的比较和填充数组元素。这些方法为所有基本类型所重载。

SN 方法和描述
1 public static int binarySearch (Object[] a, Object key)
使用二进制搜索算法搜索对象的指定数组(字节,整数,双精度等)来指定值。该数组必须在进行此调用之前进行分类。如果它被包含在列表 (-(insertion point + 1), 将返回索引搜索关键字。
2 public static boolean equals (long[] a, long[] a2)
如果多头的两个指定数组彼此相等返回true。两个数组认为是相等判定方法:如果两个数组包含相同的元素数目,并在两个数组元素的所有相应对相等。如果两个数组相等,返回true。同样的方法可以用于所有其它的原始数据类型 (Byte, short, Int, etc.)
3 public static void fill(int[] a, int val)
将指定的int值到指定的int型数组中的每个元素。同样的方法可以用于所有其它的原始数据类型(Byte, short, Int etc.)
4 public static void sort(Object[] a)
将对象指定的数组升序排列,根据其元素的自然顺序。同样的方法可以用于所有其它的原始数据类型( Byte, short, Int, etc.)


推荐阅读
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 如何为PDF文档添加水印?简单步骤实现
    为了增强PDF文档的安全性和版权保护,添加水印是一个有效的方法。本文将介绍如何通过专业软件或在线工具轻松为PDF文档添加水印,确保您的文档在共享时仍能保持其独特性和安全性。 ... [详细]
  • 深入理解MongoDB的SCRAM-SHA-1认证流程
    本文详细解析了MongoDB的SCRAM-SHA-1认证机制的具体步骤,旨在帮助读者深入了解这一安全认证方法的工作原理及其在实际应用中的重要性。 ... [详细]
  • Web开发实践:创建连连看小游戏
    本文详细介绍了如何在Web环境中开发一款连连看小游戏,适合初学者和技术爱好者参考。通过本文,您将了解游戏的基本结构、连线算法以及实现方法。 ... [详细]
  • 本文介绍了如何通过 ADB 命令行工具启动和停止 Android 应用。通过简单的命令,您可以轻松地控制设备上的应用运行状态。 ... [详细]
  • 本文介绍了如何使用jQuery获取浏览器窗口的可视区域高度、文档的整体高度以及宽度等关键尺寸信息,包括边界、填充和边距在内的完整尺寸。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 我整理了HMOV四大5G旗舰的参数,可依然没能拯救我的选择困难症
    伊瓢茕茕发自凹非寺量子位报道|公众号QbitAI报道了那么多发布会,依然无法选出要换的第一部5G手机。这不,随着华为P40系列发布,目前国 ... [详细]
  • 最优化算法与matlab应用3:最速下降法
    最优化算法与matlab应用3:最速下降法最速下降法是一种沿着N维目标函数的负梯度方向搜索最小值的方法。(1)算法原理函数的负梯度表示如下:搜索步长可调整ak,通常记为(第k次迭代 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文探讨了在 Python 2.7 环境下,如何有效地对大量数据(如几百 KB 的字符串)进行加密和压缩,并确保能够准确无误地解密回原始数据。 ... [详细]
  • ACM经典书籍推荐
    本文介绍了几本在算法和计算机科学领域具有重要影响力的书籍,包括由Donald E. Knuth编著的《计算机程序设计艺术》第一卷,以及潘氏兄弟的数论经典教材等。这些书籍不仅是学习相关领域的宝贵资源,也是专业人士不可或缺的参考书。 ... [详细]
  • Linux内核中的内存反碎片技术解析
    本文深入探讨了Linux内核中实现的内存反碎片技术,包括其历史发展、关键概念如虚拟可移动区域以及具体的内存碎片整理策略。旨在为开发者提供全面的技术理解。 ... [详细]
author-avatar
书友68610983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有