概念:

  • 数组是一种数据结构, 用来存储同一类型值的集合.
  • 通过一个整型的下标可以访问数组中的每一个值.
  • 声明:

int[] a(推荐,将类型int[](整形数组)和变量名分开了) 或者int a[]

  • 赋值:

int[] a = new int[100]; // 创建一个可以存储100个整数的数组,下标是1-99
int[] a = new int[n]; // 100可以是变量n.

  • 初始化:

数字数组: 所有元素初始化为0;
boolean数组: 所有元素初始化为false;
对象数组: 所有元素初始化为null; // String[] names = new String[10];

int smallPrimes = {2, 3, 5, 7}; // 可在创建的时候直接赋值.
new int[] {1, 4, 6, 8}; // 可以初始化一个匿名数组.
smallPrimes = new int[] {1, 4, 6, 8}; // 可以在不创建新变量的时候重新初始化一个数组.

taps:
  Java中允许数组长度为0. ---> new int[0]; // 创建新的长度为0的空数组

  • 获取数组长度:

a.length;

  • for each:

使用: 不需要使用下标的循环, 只关注元素本身.
for (variable : collection) statement
  例: for (int element : a)
    System.out.println(element);

  • 打印数组:

1. 循环打印a[i]
2. Arrays.toString(a)
注意: 不可直接打印a, 打印出来的是地址?

  • 数组拷贝:

用=赋值的新变量与原数组变量引用了同一个地址, 更改一个, 另外一个也会改变.
可以用Arrays.copyOf方法拷贝到一个新数组中:
  int b = Arrays.copyOf(a, length);
  length是新数组b的长度:  如果小于a.length, 只拷贝a中前length个元素.
            : 如果大于a.length, 那么多余的元素会根据数组类型相应的被初始化为0 或 false, 或null

  • 数组排序:

Arrays.sort(a);

数组API:

java.util.Arrays:

  • static String toString(type[] a);

返回包含a中数据元素的字符串, 这个数据元素被放在括号内, 并用逗号分开.
参数a, 类型为int, long, short, char, byte, boolean, float, double的数组.

  • static type copyOf(type[] a, int length)
  • static type copyOf(type[] a, int start, int end)

拷贝0-length个元素或者start-end下标的元素

  • static void sort(type[] a);

采用优化的快速排序算法对数组进行排序.
参数a, 类型为int, long, short, char, byte, boolean, float, double的数组.

  • static int binarySearch(type[] a, type v)
  • static int binarySearch(type[] a, int start, int end, type v)

用二分法搜索算法查找值v. 如果查找成功, 则返回相应的下标值; 否则, 返回一个负数值r.
-r-1是为保持a有序v应插入的位置.
参数a, 类型为int, long, short, char, byte, boolean, float, double的数组.
v 同a的数据元素类型相同的值.

  • static boolean equals(type[] a, type[] b)

如果两个数组大小相同, 并且下标相同的元素都对应相等, 返回true.
参数a, b, 类型为int, long, short, char, byte, boolean, float, double的两个数组.

多维数组:
声明:
  double[][] balance;
  balance = new double[NYEARS][NRATES];
  int[][] b =
  {
    {1, 2, 3,4},
    {11, 22, 33,44},
    {12, 23, 34,45},
    {16, 27, 38,49},
  };
  处理多维数组需要用多层循环嵌套
  打印多维数组:
  1.循环打印;
  2.Arrays.deepToString(a);

package com.picc.sample.arraysample;
import java.util.Arrays; // 多维数组示例:
public class ArrayNote {
public static void main(String[] args) {
final double STARTRATE = 10;
final int NRATES = 6;
final int NYEARS = 10; double[] interestRate = new double[NRATES]; // Arrays.toString(interestRate) --> [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
for (int j = 0; j < interestRate.length; j++)
interestRate[j] = (STARTRATE + j) / 100.0;
// System.out.println(Arrays.toString(interestRate)); double[][] balances = new double[NYEARS][NRATES];
// System.out.println(Arrays.deepToString(balances)); // set initial balances to 1000
for (int j = 0; j < balances[0].length; j++)
balances[0][j] = 10000; // compute interest for future years
for (int i = 1; i<balances.length; i++) {
for (int j = 0; j < balances[i].length; j++) {
double oldBalance = balances[i - 1][j];
double interest = oldBalance * interestRate[j];
balances[i][j] = oldBalance + interest;
}
} for (int j = 0; j < interestRate.length; j++)
System.out.printf("%9.0f%%", 100 * interestRate[j]); System.out.println();
for (double[] row : balances) {
for (double b : row)
System.out.printf("%10.2f", b);
System.out.println();
}
}
} 运行结果:

  10%   11%     12%    13%    14%     15%
10000.00 10000.00 10000.00 10000.00 10000.00 10000.00
11000.00 11100.00 11200.00 11300.00 11400.00 11500.00
12100.00 12321.00 12544.00 12769.00 12996.00 13225.00
13310.00 13676.31 14049.28 14428.97 14815.44 15208.75
14641.00 15180.70 15735.19 16304.74 16889.60 17490.06
16105.10 16850.58 17623.42 18424.35 19254.15 20113.57
17715.61 18704.15 19738.23 20819.52 21949.73 23130.61
19487.17 20761.60 22106.81 23526.05 25022.69 26600.20
21435.89 23045.38 24759.63 26584.44 28525.86 30590.23
23579.48 25580.37 27730.79 30040.42 32519.49 35178.76

 

package com.picc.sample.arraysample;

import java.util.Arrays;
import java.util.Scanner; // 输出输出, 数组方法
public class LotterDrawing {
public static void main(String[] args) {
Scanner in = new Scanner(System.in); System.out.println("How many numbers do you need to draw");
int k = in.nextInt(); System.out.println("How many numbers do you need to draw");
int n = in.nextInt(); int[] numbers = new int[n];
for (int i = 0; i < numbers.length; i++)
numbers[i] = i + 1; int[] result = new int[k]; for (int i = 0; i < result.length; i++) {
int r= (int) (Math.random() * n);
result[i] = numbers[r];
numbers[r] = numbers[n - 1];
n--;
} Arrays.sort(result); // 两种打印方法
// System.out.println(Arrays.toString(result));
for (int r: result)
System.out.print(r + ", ");
}
} 运行示例:

How many numbers do you need to draw

How many numbers do you need to draw

1, 4, 5, 9, 13,


java笔记 -- 数组的更多相关文章

  1. Java学习笔记十:Java的数组以及操作数组

    Java的数组以及操作数组 一:什么是数组: 数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩 数组中的元 ...

  2. 菜鸡的Java笔记 第七 - java 数组

    数组的基本概念     笔试中经常出现的试题或是问题    1.1 概念        数组指的是一组相关变量的集合         如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...

  3. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  4. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  5. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  6. Java-Runoob-高级教程-实例-数组:05. Java 实例 – 数组输出

    ylbtech-Java-Runoob-高级教程-实例-数组:05. Java 实例 – 数组输出 1.返回顶部 1. Java 实例 - 数组输出  Java 实例 以下实例演示了如何通过循环输出数 ...

  7. Java笔记 —— 初始化

    Java笔记 -- 初始化 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red !impo ...

  8. Java笔记---枚举类和注解

    Java笔记---枚举类和注解 一.枚举类 自定义枚举类 方式一:JDK5.0之前自定义枚举类 class Seasons { //1. 声明Seasons对象的属性 private final St ...

  9. 《Java笔记——基础语法》

    Java笔记--基础语法       一.字符串的拼接: 例如: System.out.println(""+"");     二.换行语句: 例如: Syst ...

随机推荐

  1. Python多线程下存在_strptime的问题

    由于Python的datetime和time中的_strptime方法不支持多线程,运行时会报错:AttributeError: _strptime code: # -*- coding:utf-8 ...

  2. 三目运算符与Scanner类

    1.三目运算符(条件运算符)格式:X ? Y : ZX表达式必须是boolean类型 的表达式执行流程:首先计算X表达式的结果,如果X的结果为true,那么整个表达式的结果就是Y的值如果X的结果为tr ...

  3. 22.C# 事件

    1.事件的含义 事件和异常类似,它们都是由对象引发,我们可以提供代码处理它们.不同的是事件并没有使用try ..catch这样的代码来处理,而是要订阅事件,订阅的含义是提供一段事件处理代码,在事件发送 ...

  4. spark的运行模式

    1.local(本地模式) 单机模式,通常用来测试 将spark应用以多线程方式,直接运行在本地 本地模式可以启动多个executor不过上限不能超过cpu数 2.standalone(独立模式) 独 ...

  5. IDE中使用System.getProperty()获取一些属性

    使用环境:一般在项目首页或者项目后端配置中会使用到一些属性获取: package com.liuyc.study.utils; /** * 获取当前操作系统中或者当前环境中的一些默认配置 * @aut ...

  6. git冲突管理

    Diff 查看工作区(working directory)和暂存区(staged)之间差异:git diff 查看工作区(working directory)与当前仓库版本(repository)HE ...

  7. 使用 acme.sh 签发续签 Let‘s Encrypt 证书 泛域名证书

    1. 安装 acme.sh 安装很简单, 一个命令: curl https://get.acme.sh | sh 并创建 一个 bash 的 alias, 方便你的使用 alias acme.sh=~ ...

  8. HTML5新增常用属性

    一. 代码名称语义化的好处 1.能让搜索引擎更好的收录 2.对于特殊设备如盲人设备好解析 二.article和section的区别 article(文章):独立且能被外部引用 section(章节.段 ...

  9. GO语言的包

    包介绍 包(package)是多个Go源码的集合,go语言有很多内置包,比如fmt,os,io等. 定义包 main包是一个可执行的包,只应用程序的入口包,编译完会生成一个可执行文件. 包名可以不和文 ...

  10. vue-cli —— 局部修改Element样式

    最近在做vue项目时用到了Element,发现这玩意儿用起来很舒服,很新颖,上手也很快,而且效果足够酷炫.但是后面发现一个很大的问题,那就是Element的样式有限,这极大地限制了项目的应用广度,所以 ...