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

数字

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

示例

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

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

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

这种包装是由编译器处理,这个过程称为装箱。因此,当一个原始数据类型被使用,当需要一个对象时,编译器将原始数据放入其包装类。同样地,编译器也能将对象取出返回到原始数据类型。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。

处理数组
当处理数组元素时,经常使用的是 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 < myList.length; i++) {
     System.out.println(myList[i] + " ");
   }
   // Summing all elements
   double total = 0;
   for (int i = 0; i < myList.length; i++) {
     total += myList[i];
   }
   System.out.println("Total is " + total);
   // Finding the largest element
   double max = myList[0];
   for (int i = 1; i < myList.length; i++) {
     if (myList[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 < array.length; i++) {
  System.out.print(array[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 < list.length; i++, j--) {
  result[j] = list[i];
 }
 return result;
}

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.)
(0)

相关推荐

  • Java 面试题基础知识集锦

    经典的Java基础面试题集锦,欢迎收藏和分享. 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示"main方法不是public的". 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝. 问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode. 问题:Java的"一次编写,处处运行"是如何实现的? 答案:Java程序会被编译成字节码组成

  • servlet基础知识_动力节点Java学院整理

    Servlet是一门专门用于开发动态web资源的技术,Sun公司在其API中提供了一个Servlet接口(当然,我们不会去直接实现这个接口,而是去继承其实现类会更好),因此,狭义的Servlet是指这个接口,广义的Servlet是指任何实现了这个Servlet接口的类. 使用Servlet开发一个动态web资源,其实就是开发一个Java程序向浏览器输出数据. Servlet其实就是一个运行在服务器上得Java程序,Servlet是J2EE十三门技术中的一种,因此我们不能去看J2SE的API文档,

  • Java基础知识汇总

    Java基础知识 1.Java语言的优点: 1)Java是纯面向对象语言 2)与平台无关性,一次编译到处运行 3)Java提供了狠多内置类库 4)提供了对web应用的支持 5)具有较好的安全性(数组边界检测.Bytecode检测)和健壮性(强制型机制.垃圾回收器.异常处理) 6)去除c++难以理解的一些特性(头文件 指针 运算符重载 多重继承) 2.java与c++的异同: 1)Java为解释型语言,c++为编译型语言,java会慢但是跨平台 2)Jave为纯面向对象,c++既面向对象又能面向过

  • java 基础知识之网络通信(TCP通信、UDP通信、多播以及NIO)总结

    java 基础知识之网路通信总结 在这篇文章里,我们主要讨论如何使用Java实现网络通信,包括TCP通信.UDP通信.多播以及NIO. TCP连接 TCP的基础是Socket,在TCP连接中,我们会使用ServerSocket和Socket,当客户端和服务器建立连接以后,剩下的基本就是对I/O的控制了. 我们先来看一个简单的TCP通信,它分为客户端和服务器端. 客户端代码如下: 简单的TCP客户端 import java.net.*; import java.io.*; public class

  • javaBean的基础知识及常见乱码解决方法

    javaBean的基础知识及常见乱码解决方法 乱码问题应该是做javaWeb开发人员都遇到过的问题吧,这个问题当时还影响了我学习Java的想法,甚至有过想放弃的想法,没办法,当时年轻,呵呵.其实产生乱码问题的原因有很多,解决乱码的问题也有很多,现在就一一来看一下: 出现乱码的地方大致可以分为以下三种: 1 jsp页面中 2 jsp页面之间相互传参的参数 3 与数据库中数据的存取 解决方案大致可以分为三种: 1 出现在jsp页面中,是由于没有设置jsp页面的中文字符编码.   2 出现在jsp页面

  • Java的Socket网络编程基础知识入门教程

    一.TCP/IP简介 TCP/IP协议族是互联网使用的协议,也可以用在独立的专用网络中. TCP/IP协议族包括了IP协议.TCP协议和UDP协议. IP协议使用IP地址来分发报文,但它是尽力而为的服务,报文可能丢失.乱序或者 重复发送.TCP和UDP协议在IP协议基础上增加了端口号,从而在两台主机的应用 程序间建立起透明的连接. 不同的是,TCP协议会对IP层的错误进行修复,它通过握手消息在主机间建立连接, 之后通过在消息中加入序列号来恢复消息中的错误.而UDP只是简单地扩展了IP协议, 使它

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

    数字 通常情况下,当我们处理数字时,使用原始数据类型,如 byte,int,long,double 等. 示例 int i = 5000; float gpa = 13.65; byte mask = 0xaf; 然而,在开发中,我们会遇到需要使用对象而不是原始数据类型的情况.为了实现这个, Java 为每个原始数据类型提供包装类. 所有的包装类 (Integer, Long, Byte, Double, Float, Short) 是抽象类 Number 的子类. 这种包装是由编译器处理,这个

  • 简单了解Java中多态的基础知识

    一.多态 多态分为两种:(1)引用的多态.(2)方法的多态 引用的多态: 父类的引用可以指向本类的对象: 父类的引用可以指向子类的对象: 注意:子类的对象不可以指向父类的对象,如下图所示 方法的多态: 创建本类对象时,调用的方法为本类的方法: 创建子类对象时,调用的方法为子类重写的方法或者继承的方法: 注意:父类的引用调用的方法不能是子类独有的方法,必须是从父类继承的方法或重写父类的方法.. 二.多态中的引用类型转换 1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换.不存在风险.

  • 详解Java中的数组与字符串相关知识

    Java数组的定义和使用 如果希望保存一组有相同类型的数据,可以使用数组. 数组的定义和内存分配 Java 中定义数组的语法有两种: type arrayName[]; type[] arrayName; type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量.例如: int demoArray[]; int[] demoArray; 这两种形式没有区别,使用效果完全一样,读者可根据自己的编程习惯选择

  • Java中的数组复制(clone与arraycopy)代码详解

    JAVA数组的复制是引用传递,而并不是其他语言的值传递. 1.clone protectedObjectclone() throwsCloneNotSupportedException创建并返回此对象的一个副本."副本"的准确含义可能依赖于对象的类.这样做的目的是,对于任何对象x,表达式: x.clone()!=x为true,表达式: x.clone().getClass()==x.getClass()也为true,但这些并非必须要满足的要求.一般情况下: x.clone().equa

  • Java中对象数组的使用方法详解

    本文实例讲述了Java中对象数组的使用方法.分享给大家供大家参考,具体如下: 一 点睛 对象可以用数组来存放,通过下面两个步骤来实现. 1 声明以类为数据类型的数组变量,并用new分配内存空间给数组. 2 用new产生新的对象,并分配内存空间给它. 下面介绍4种方式来定义对象数组 方式一:静态方式 Person p1[] = { new Person(), new Person(), new Person() }; 方式二:动态初始化化 Person p2[]; p2 = new Person[

  • js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进行内容的转化,后来发现不可以,网上说js与java没有桥接的东西,所以呢: 我的解决方案是:在action层,将java的对象数组转化为Json串,而在js中,再把json转化为数组对象. 1.将java的对象数组转化为Json串: 要用到两个类: net.sf.json.JSONObject ne

  • Java中char数组(字符数组)与字符串String类型的转换方法

    本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法.分享给大家供大家参考,具体如下: 在Java语言编程时,使用"口令字段"jPasswordField组件时,如果要获得密码值,就需要使用该组件的getPassword()方法.jPasswordField的getPassword()方法返回一个char类型的数组,我们经常需要将这个数组转换为String类型,以便进行诸如口令匹配或口令赋值等操作.这时,就需要将char类型的数组进行转换.当然也经常会遇到

  • 基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

  • java中删除 数组中的指定元素方法

    java中删除 数组中的指定元素要如何来实现呢,如果各位对于这个算法不是很清楚可以和小编一起来看一篇关于java中删除 数组中的指定元素的例子. java的api中,并没有提供删除数组中元素的方法.虽然数组是一个对象,不过并没有提供add().remove()或查找元素的方法.这就是为什么类似ArrayList和HashSet受欢迎的原因. 不过,我们要感谢Apache Commons Utils,我们可以使用这个库的ArrayUtils类来轻易的删除数组中的元素.不过有一点需要注意,数组是在大

  • 关于java中构造函数的一些知识详解

    java的构造函数是一个非常重要的作用,首先java里的构造函数是可以重载的,而且因为也是可以继承在父类的构造函数,所以在子类里,首先必然是调用父类的构造函数.可以看下面的两个例子来对比: public class Test { public static void main(String args[]) { B b = new B(100); } } class A { public A() { System.out.println("A without any parameter"

随机推荐

其他