大数值
当基本的整数和浮点数精度不能满足需求,可使用 BigInterger 和 BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger 类实现了任意精度的整数运算,BigDecimal 实现了任意精度的浮点数运算。
使用静态的 valueOf 方法可以将普通的数值转换为大数值:BigInteger a = BigInteger.valueOf((100);
在大数值中不能使用人们熟悉的运算符(如 + 和 *)。需要使用大数值类中的 add 和 multiply 方法:
BigInteger c = a.add(b);//c = a + b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));//d = c * (b + 2)
数组
数组是一种数据结构,用于存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。在声明数组变量时,需要指出数组类型(数组元素类型紧跟 [])和数组变量名。数组名就是新分配内存空间的首地址。
一维数组初始化:int[] a = new int[100];创建了一个可以储存100个整数的数组。
判断下面数组声明并初始化语句是否正确:
int years[6] = {2012, 2013, 2014, 2015, 2016, 2017}; ✘ 声明并初始化数组不需要指定数组的大小
int years[] = {2012, 2013, 2014, 2015, 2016, 2017}; ✔
int[12] months = {1, 3, 5, 7, 8, 10, 12]; ✘
关于数组大小和默认值:
- 创建数组后就不能再修改数组的大小。
- 基本数据类型数组的默认值为0。
- char型数组元素的默认值为\u0000。
- 布尔类型数组默认值为false。
- 对象数组的元素初始化为一个特殊的值null,表示这些元素还为存放任何对象。例:String[] names = new String[10];会创建一个包含10个字符串的数组,所有字符串都为null。
数组Demo:1.求输入学生平均成绩
2.斐波那契数列
3.求数组中最大值和最小值
4.求数组中奇数个数和偶数个数
5.查找输入的数字在数组中的下标,没有找到则下标为-1
6.模拟洗牌过程
-
for each 循环
for (int i = 0; i < nums.length; i++) //等价于 for (int i : nums) for each 循环语句的循环变量将会遍历数组中的每个元素而不需要使用下标值。
语句格式为:for(variable : collection) 定义一个变量用于暂存集合中的每一个元素,并执行相应的语句(或语句块)。collection这一集合表达式必须是一个数组或是一个实现了Iterable接口的类对象。
注释:Arrays类的 toString 方法可以更加简单的打印数组中的所有值,调用 Arrays.toString(nums),返回一个包含数组元素的字符串,这些元素被放置在括号内,用逗号隔开,例如“[2,3,5,7,11]”。要想打印数组可以调用 System.out.println(Arrays.toString(nums));
-
数组排序
- 冒泡排序,比较两相邻数,换位置,双循环。
- 选择排序,每次循环,交换 i 和 index 值。
- 使用 java.util.Arrays.sort();
1.冒泡排序Demo
2.选择排序Demo
3.使用java.util.Arrays.sort();排序
三种排序算法运行耗时:
-
二分法查找(数组已有序)
-
删除
- 找到要删除元素的下标 delIndex = 3;
- 从要删除下标开始,后面一个元素赋值给前面一个元素——覆盖。nums[i] = nnums[i + 1];
- 数组总长度 -1。
count--; for(int i = deleteIndex; i < count; i++){ array[i] = array[i + 1]; }
-
插入
- 找到要插入元素位置的下标。
- 从最后一个元素开始 nums[i + 1] = nums[i]; 直到 insertIndex 结束。
- 在 insertIndex 处赋值。
- 数组长度+1.
二维数组
语法:
1、datatype[][] names;
2、double[][] scores = new double[5][3];行可省,列不可省
3、int[][] animates;
animates = new int[4][4];
总结
- 数组是可以在内存中连续存储多个元素的结构。——数组中所有元素必须属于相同的数据类型。
- 数组必须先声明,然后才能使用。——声明一个数组只是为该数组留出内存空间,并不会为其赋任何值。
- 数组的元素通过下标访问。
- 一维数组可用一个循环动态初始化,而二维数组可用嵌套循环初始化。
- 二维数组可以看作是由一维数组的嵌套而构成的。