概念:

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

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. 2019.04.21 python核心特征

    本阶段我们将了解Python是如何管理内存的,学习内存管理让我们掌握python的运行机制: 并且在python中有许多函数式编程的特性,比如闭包,装饰器和生成器,这些都是一些比较难掌握的概念,但面试 ...

  2. linux 查看磁盘文件大小

    du -sh : 查看当前目录总共占的容量.而不单独列出各子项占用的容量 du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量 df -h 查看整个服务器的磁盘 ...

  3. 干了这杯Java之集合概览

    Java集合框架支持两种类型容器: 一种是为了存储一个元素的合集,为Collection 一种是为了存储键/值对,为Mapping Collection包含 Set存储不重复的元素 List存储一个有 ...

  4. js添加和删除class

    原生主要有三种方法: 1.className var DomClass = document.getElementById("id").className; //删除 pat Do ...

  5. JavaScript 的if语句和==的判断

    一. if(xx)的判断 JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值.系统内部会自动调用Boolean函数. 1.当if括号里面的表达 ...

  6. spring boot集成aop实现日志记录

    1.pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  7. codeforces-4

    这题使用到了类似于双数据 Maximal Continuous #include<iostream> #include<algorithm> #include<stdio ...

  8. 【论文速读】Fangfang Wang_CVPR2018_Geometry-Aware Scene Text Detection With Instance Transformation Network

    Han Hu--[ICCV2017]WordSup_Exploiting Word Annotations for Character based Text Detection 作者和代码 caffe ...

  9. js数组创建两种方法

    一.数组直接量形式创建数组 var arr=[];//空数组 ,,,,,]; ,,,],{x:,y:}]; ; ,x+,x+]; console.log(arr3); //[1,3,3,4] ,,]; ...

  10. 浅谈USB驱动架构 转载

    去年,老师让我分析基于HD3系统芯片的WindowsCE USB驱动的可行性.USB驱动非常庞大,多个软件层次相互交错,以及各种协议,USB系统对于一般人很难理解,我对其也只是理解一个大概,下面,我对 ...