java.util.Arrays类
※ Array 数组

数组是指一组数据的集合,(容器)数组中的每个数据称为元素。在Java中,数组也是Java对象。数组中的元素可以是任意类型(包括基本类型和引
用类),但同一个数组里只能存放类型相同的元素。长度不可变,构建时会有默认值(JVM)创建数组大致包括如下步骤:

. 声明一个数组类型的引用变量,简称为数组变量;
. 用new语句构造数组的实例。new语句为数组分配内存,并且为数组中的每个元素赋予默认值;
. 初始化,即为数组的每个元素设置合适的初始值。

声明/创建/初始化赋值
基本数据类型的声明

int[] n;
int n[];
引用类型的声明
Student[] stuff; Student是类名,[]存的是地址值
Student stuff[];

本章的主要内容:

. 数组的创建,包括基本类型数组的创建和类类型数组的创建;
. 访问数组的元素和长度属性;
. 创建一个数组的数组;

我之前已经接触过数组了,就是主函数(main方法)中的参数:

public static void main(String[] args){}

一. 数组变量的声明;

声明数组:
1) 一个存放同一类型数据的集合
a. 即可以是基本类型,也可以是对象类型;
b. 数组中的每个数据为元素;
2) 数组是一个对象,成员是数组长度和数组中的元素;
3) 声明了一个数组变量并不是创建了一个对象;
4) 声明数组的方式:

int[] IArray 或者 int IArray[] 基本数据类型数组,数组中存放的是基本数据类型。
Teacher[] tArray 或者 Teacher tArray[] 类类型数组,数组中存放的是Teacher类创建的若干个的对象。

注意:1) 声明数组变量的时侯,不能指定数组的长度,以下声明方式是非法的。

             int x[1];int[2] x;

二. 初始化

初始化:自变量创建后首次赋值的过程;

1)创建数组对象;

数组对象和其他Java对象一样,也用new语句创建;

   int[] iArray = new int[2];

构建数组:第二个[]必须加参数,表示数组存储元素个数

new int[2]语句执行以下步骤:

a. 在堆区中为数组分配内存空间,以上代码创建了一个包含2个元素的int数组
b. 为数组中的每个元素赋予其数据类型的默认值。

  byte/short/int/long    0float          0.0fdouble                0.0dString                nullchar                  '\u0000'boolean               false

c. 返回数组对象的引用

在用new语句创建数组对象时,需要指定数组长度。数组长度表示数组中包含的元素数目。数组长度可以用具体的数值表示,也可以用
变量表示。如:

 int[] x = new int[10];或int[] x={1,23,54};int[] x=new int[]{3,43,23};//先给默认值在覆盖或int size=10;int[] x = new int[size];

数组的长度可以为0,此时数组中一个元素也没有。例如

       int[] x = new int[0];

对于Java类的程序入口方法main(String args[]),如果运行时这个类没有输入参数,那么main()方法的参数args并不是null, 而是一个长度为0的数组。例如:

       public class Sample {public static void main(String[] args) {System.out.println(args.length);           //打印0}}java.util.ArraystoString(n);方法System.out.print(x[0]);//获取x[0]地址System.out.print(Arrays.toString(x[0]));//获取x[0]中的值sort(n)//对数组排序n.length//获取数组长度binarySearch(n,2)//前提:先排序

数组对象创建后,它的长度是固定的。数组对象的长度是无法改变的,但是数组变量可以改变所引用的数组对象。

       int[] x = new int[3];int[] y = x;x = new int[4];

2)初始化数组对象;

数组中的每个元素都有一个索引,或者称为下标。数组中的第一个元素的索引为0,第二个元素的索引为1, 依次类推。
通过索引可以访问数组中的元素或者给数组中元素内容赋值。

(1) 声明、创建、初始化分开:

  //声明int[] iArray;//创建iArray = new int[2];//初始化iArray[0] = 0;iArray[1] = 1;

(2) 声明、创建的同时并初始化数组;

 int[] iArray = {0, 1};int[] iArray = new int[]{0, 1};Student sArray[] = new Student[] { new Student(“George”, “Male”, 20), new Student()};Student[] stArray = { new Student(), new Student()} ;

注意:a.下面这些都是非法的数组初始化方式:
int[] x = new int[5]{5,4,3,2,1}; //编译出错,创建数组对象的同时并初始化的时候就不能指定数组长度了;

                   int[] x;x = {5,4,3,2,1};                           //{5,4,3,2,1}必须在声明数组变量的语句中使用,不能单独使用

3)多维数组;

二维数组:
本质:一维数组里面的元素也是数组

    int[] n=new int[]{1,2,3,4};n[0]=1;int[][] n=new int[][]{{1,2,3,4},{1,2,3,4},{1,2,3,4}}; n[0]={1,2,3,4}n[0][0]=1;

Java支持多维数组。假定某个宾馆有三层楼,第一层有4个房间,第二层有3个房间,第三层有5个房间。某一天客户人住宿情况如
下图所示

       第三层:           |    |Tom |Jerry|    |Rose|第二层:          |Mary|    |Kevin|第一层:          |Mike|Jane|Duke |    |

可以用两维数组来存储各个房间的客人信息。

       String[][] room = new String[3][];room[0] = new Stirng[]{"Mike","Jane","Duke",null};room[1] = new String[]{"Mary",null,"kevin"};room[2] = new String[]{null,"Tom","Jerry",null,"Rose"}以上代码等价于:String[][] room = {{"Mike","Jane","Duke",null},{"Mary",null,"kevin"},{null,"Tom","Jerry",null,"Rose"}};

多维数组本质上是数组的数组,数组的元素内容还是数组;写一个类MultiArray.java来创造一个二维数组并输出其中元素

4)数组的边界:

(1).一个数组的下标从0开始,数组通过数组的对象引用变量的下标访问数组。数组中第一个元素的索引为0, 第二元素的索引为1,依次类推。如果一个数组长度是5,要访问最后一个数组元素可以通过下标4来访问,如果通过下标5访问,超出了数组的边界,在运行时会抛出ArrayIndexOutOfBoundsException。

(2).通过调用数组的length方法可以获得一个数组的元素个数(数组长度)。所有Java数组都有一个length属性,表示数组的长度. 该属性只能读取,但是不能修改。

以下修改数组的length属性,这是非法的。

int[] x = new int[4];x.length = 10;            //编译出错,length属性不能被修改。

注:a. 数组变量必须在指向一个数组对象之后,才能访问其元素。

public class Sample {private int[] x;public static void main(String[] args) {Sample s = new Sample();System.out.println(s.x);            //打印nullSystem.out.println(s.x[0]);         //运行时抛出NullPointerExceptionSystem.out.println(s.x.length);      //运行时抛出NullPointerException}}

b. 当数组的元素为引用类型时,数组中存放的是对象的引用,而不是对象本身;

练习:(1) 求一组值的平均值:

                 public class ArrayAvgTest {public double avg(int[] n) {double result = 0.0;for(int i=0;i<n.length;i++) {result += n[i];}result /= n.length;return result;}public static void main(String[] args) {ArrayAvgTest a = new ArrayAvgTest();int[] a = {100,60,80,90,75,38};System.out.println("Avg score: " + a.avg(a));}}

(2) 求一组值的最大值:

                 public class ArrayMaxTest {public int max(int[] n) {int result = n[0];for(int i=1;i<n.length;i++) {if(result<n[i])result = n[i];}return result;}public static void main(String[] args) {ArrayMaxTest a = new ArrayMaxTest();int[] n = {100,60,80,90,75,38};System.out.println("Max score: " + a.max(n));}} 

(3) 数组内容排序
详见算法,选择排序、插入排序、冒泡排序。
(4)java.util.Arrays辅助类的使用。sort(int[] n)以及binarySearch(int[] n,int key)
方法的使用。

注意: a. 这二个方法均为static方法,可直接通过类名使用;
b. binarySearch方法必须保证数组中的元素已经按照升序排列,这样才能得到正确的结果;

import java.util.Arrays;public class ArraySortTest2 {public void print(int[] n) {for(int i=0;i<n.length;i++)System.out.print(n[i] + "\t");System.out.println();}public static void main(String[] args) {ArraySortTest2 s = new ArraySortTest2();int[] n = {100,60,80,90,75,38};Arrays.sort(n);System.out.println(Arrays.binarySearch(n, 80));s.print(n);System.out.println(Arrays.binarySearch(n, 80));       }}

(5) 从众多手机号码中抽取一个获奖手机号码

     public class ArrayRandomTest {public String getTel(String[] n) {int index = (int)(Math.random()*n.length);return n[index];}public static void main(String[] args) {ArrayRandomTest a = new ArrayRandomTest();String[] n = { "1318259016", "13564560540","13858687810","13999999999"};System.out.println(a.getTel(n));}}

(6)产生四位长度的验证码, 验证码内容为大小写字母或数字组成;

     public class ArrayValidateCodeTest {private char[] c;public ArrayValidateCodeTest() {String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";c = s.toCharArray();}public String getValidateCode() {int i1 = (int)(Math.random()*c.length);int i2 = (int)(Math.random()*c.length);int i3 = (int)(Math.random()*c.length);int i4 = (int)(Math.random()*c.length);return ""+c[i1]+c[i2]+c[i3]+c[i4];}public static void main(String[] args) {ArrayValidateCodeTest a = new ArrayValidateCodeTest();System.out.println(a.getValidateCode());}}

5)数组的拷贝:
数组的长度一旦确定之后便不能调整,我们可以通过复制数组的内容变通实现改变数组长度。在System类中提供一个辅助的arraycopy方法提供复制数组内容的功能:

       System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)参数1,需要被复制的目标数组(原始数组)参数2,从这个数组的那个一个位置开始复制(原始数组起始位置)参数3,需要把数据复制到的另外的那一个新的数组对象(目标数组)参数4,复制到新数组里面哪个位置(从这个位置开始算)(目标数组开始追加数组的角标)参数5,复制的目标数组的长度(原始数组复制的长度)
  1. 可变参数 JDK1.5或以上
    之前的写法
    在方法中可以把可变参当做数组使用。
    可变参表示当前参数的类型可以接受0到多个
public void test(int[] a){}main:int[] i = {1,2,3,4};a.test(i);可变参数写法public void test2(int... a){}main:int[] i = {1,2,3,4};test2(i);test2();test2(1,2,3,4);test2(1,2,3,4,5,6,7);

可变参数前面可以加其他参数(可变参必须在最后,不能同时出现两个可变参)

public static void test3(String msg,int... a){}main:int[] i = {1,2,3,4};String msg = "helo";test3(msg,i);test3(msg);test3(msg,1,2,3,4);test3(msg,1,2,3,4,5,s6,7);可变参数后面不能加任何参数 这样是编译不通过的public static void test4(int... a,String msg){}
  1. 格式化输出 JDK1.5或以上
    System.out.printf是JDK1.5之后加入的新的方法,可以给我们格式化输出内容

常见用法例子:

 // 定义一些变量,用来格式化输出。  double d = 345.678;  String s = "你好!";  int i = 1234;  // "%"表示进行格式化输出,"%"之后的内容为格式的定义。 // "f"表示格式化输出浮点数。 System.out.printf("%f", d); //345.678000System.out.println();  // "9.2"中的9表示输出的长度,2表示小数点后的位数。 注意输出数字前面的空格 System.out.printf("%9.2f", d);//   345.68System.out.println();  // "+"表示输出的数带正负号。  System.out.printf("%+9.2f", d);//  +345.68System.out.println();  // "-"表示输出的数左对齐(默认为右对齐)。  System.out.printf("%-9.4f", d);//345.6780System.out.println();  // "+-"表示输出的数带正负号且左对齐。  System.out.printf("%+-9.3f", d);//+345.678System.out.println();  // "d"表示输出十进制整数。System.out.printf("%d", i);//1234System.out.println();  // "o"表示输出八进制整数。 System.out.printf("%o", i);//2322System.out.println();  // "x"表示输出十六进制整数。  System.out.printf("%x", i);//4d2System.out.println();  // "#x"表示输出带有十六进制标志的整数。  System.out.printf("%#x", i);//0x4d2System.out.println();  // "s"表示输出字符串。System.out.printf("%s", s);//你好! System.out.println();  System.out.printf("输出一个浮点数:%f,一个整数:%d,一个字符串:%s", d, i, s);//输出一个浮点数:345.678000,一个整数:1234,一个字符串:你好!

Array [] 数组相关推荐

  1. JavaScript引用类型之Array数组之强大的splice()方法

    splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...

  2. 列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)...

    一.列表(list) 一组有序项目的集合.可变的数据类型[可进行增删改查] 列表是以方括号"[]"包围的数据集合,不同成员以","分隔. 列表中可以包含任何数据 ...

  3. php手册数组函数,PHP - Manual手册 - 函数参考 - Array 数组函数 - array_diff计算数组的差集...

    PHP - Manual手册 - 函数参考 - Array 数组函数 - array_diff计算数组的差集 array_diff (PHP 4 >= 4.0.1, PHP 5) array_d ...

  4. Js Array数组ES5/ES6常用方法

    Js Array数组ES5/ES6常用方法 1.栈方法(先进后出) push():在数组的最后一项后追加值(参数:可以为多个值或数组) 返回:数组的长度,改变了原数组. var a=[1,2,3] a ...

  5. Java中Arrays.toString ()打印二维数组及Array数组的常用操作

    1.Java中Arrays.toString () 已知打印一维数组的API为System.out.println ( Arrays.toString ();,其参数为数组名或数组指针,其支持的数据类 ...

  6. doctrine find的对象转换成数组_「ES6基础」Array数组的新方法(上)

    在日常工作中我们经常会与数组打交道,因此需要熟练掌握数组操作的相关方法,ES6中关于数组的操作,又给我们带来了哪些惊喜呢,Array数组操作又添加了哪些新方法? 本篇文章将从以下几个方面进行介绍: A ...

  7. c/c++ 模板与STL小例子系列一 自建Array数组

    c/c++ 模板与STL小例子系列 自建Array数组 自建的Array数组,提供如下对外接口 方法 功能描述 Array() 无参数构造方法,构造元素个数为模板参数个的数组 Array(int le ...

  8. JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)

    1.字符串属性 <script> var test_var = "I Iove you"; console.log(test_var.charAt(3)) //char ...

  9. for 循环 和 Array 数组对象

    博客地址:https://ainyi.com/12 for 循环 和 Array 数组对象方法 for for-in for-of forEach效率比较 - 四种循环,遍历长度为 1000000 的 ...

  10. 小汤学编程之JavaScript学习day03——对象、Array数组、String字符、Date日期、JSON

    一.JS中的对象 二.Array数组 1.特点     2.数组的定义     3.常用方法     4.数组的遍历 三.String字符 1.定义     2.常用方法 四.Date日期 1.定义  ...

最新文章

  1. eslint 学习笔记
  2. Matlab中下标、斜体及希腊字母的使用方法
  3. ajax参数中字符串最大长度_6.7 C++数组名作函数参数 | 求3*4矩阵中最大的值
  4. 电脑重装系统后提示invalid partition table怎么解决
  5. react中webpack.config.js配置lessless-loader less
  6. php框架laravel百科,PHP 的Laravel 框架
  7. python jsonpath-rw_Python使用jsonpath-rw模块处理Json对象操作示例
  8. UiAutomator控件获取
  9. cssbefore图片大小_我可以在CSS:before /:after伪元素中更改图像的高度吗?
  10. 呈现模式_外汇欧盘:分析师料欧元有望涨至1.15 全球市场呈现轮涨模式
  11. 小程序的全栈开发新时代
  12. Hillstone设备管理-许可证安装
  13. VM虚拟机,Linux系统安装tools过程遇到 what is the location of the “ifconfig” program
  14. (转)曹锋、宋天玮:区块链技术在证券市场中的应用探索
  15. 【Windows】要不要升级Win11?Win11与Win10界面对比体验
  16. 从入门到变现|全面解析视频号运营规则,看完少走3天弯路!
  17. 如何有效地描述软件缺陷(Defect)?
  18. 今天终于把爬虫的Ajax请求搞懂了
  19. css 从右到左的方向调整
  20. 用python画皮卡丘画法-用python画一只可爱的皮卡丘

热门文章

  1. 不爱说话?社交无能?或许你可以试试这种说话术
  2. 基于微信小程序的个人管理软件-计算机毕业设计
  3. 试问蓝桥杯有多水,一道题就能回答你(吐槽,坑)
  4. 刷脸支付服务商巧借东风顺势而为
  5. html点击文字下拉,利用jQuery实现可输入搜索文字的下拉框
  6. 如何解决路由器延迟问题
  7. 聊一聊基础的CPU寄存器~
  8. php rot13解密,php对字符串执行ROT13编码的函数str_rot13()
  9. uniapp- onshow和onload
  10. (转)Elasticsearch .net client NEST使用说明 2.x