数组
数组基本知识点
知识点一——简介
-
数组占据一块连续的内存并按照顺序存储数据,并且再创建数组时指定数组的容量大小。
-
数组读/写时间复杂度为O(1)。
-
数组变量声明,需要指明数组元素类型和数组变量的名字(仅仅是声明并没有初始化为一个真正的数组):
int[] a 或者int a[]
使用new运算符创建数组:
int[] a = new int[100] -
创建数字数组时 ,所有元素初始为0;boolean数组元素初始化为false;对象数组的元素初始化为null.
-
如果需要再运行过程中扩展数组的大小,使用另外一种数据结构————数组列表(array list)。
知识点二——for each循环
增强for循环可以依次处理数组的每个元素:
for( varivable : collection) statement
示例:
for(int element : a) System.out.println(element);
更简单打印数组中的所有值————Arrays类的toString方法。Arrays.toString(a)返回一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号隔开,比如"[2,3,4,5,6]",打印数组可以调用
System.out.println(Arrays.toString(a));
知识点三——数组初始化及匿名数组
方法1:int[] a = { 2, 3, 5, 6}
方法2:int[] a = new int[]{2, 3, 5, 6}
方法3(匿名数组) new int[] { 2, 3, 5, 6}
知识点四——数组拷贝
数组拷贝本质是两个数组变量引用同一个数组
int[] LuckyNumber = smallPrimes;
LuckyNumber[5] = 12;
拷贝数组另一个方法(可以增加数组长度)——数组2 =Arrays.copyOf(数组1,数组2长度):
int[] copiedLuckyNumber = Arrays.copyOf(LuckyNumber, LuckyNumber.length)
知识点五——命令行参数
针对java应用程序中String arg[]参数的main方法,表明mainc方法将接受一个字符串数组,也就是命令行参数。
运行代码:
java Message -g cruel world
则args数组内容为:
args[0]="-g";args[1]=“cruel”; args[2]=“world”
运行结果显示:
Goodbye, cruel world
知识点六——数组排序
对数值型数组排序可以使用Arrays.sort(a)
备注:
- Math.random()返回一个0到1(包含0不包含1)的随机浮点数
- Arrays.sort(a):采用优化的快速排序算法对数组进行排序
- Arrays.toString(type[] a):返回包含a中数据元素的字符串,这些元素被放在括号里,并用逗号隔开(a类型为int,long, short,char, byte, boolean, float, double的数组)
- Arrays.copyOf(type[] a, int length)
- Arrays.copyOfRange(type[] a,int start, int end):包含start,不包含end,返回与a类型相同的数组
- Arrays.binarySearch(type[] a,type v)
- Arrays.binarySearch(type[] a, int start, int end, type v):在start~end之间二分查找v,成功返回下标值;失败返回负数值r
- Arrays.fill(type[] a, type v):将所有元素值设置为v
- Arrays.equals(type[] a,type[] b):如果两个数组大小相同, 并且下标相同的元素都对应相等,返回true。
知识点七——多维数组
- 多维数组的声明与一维数组相同,如二维数组:
int[][] a = new int[length][length];
int[][] a;
int[][] a ={{1,2 },{1,3},{4, 6}};
java实际上没有多维数组,只有一维数组,多维数组被解释为“数组的数组”。
数组类型例题——leedcode
简单例题
例题一——面试题03:数组中重复的数字
例题二——面试题04:二维数组中的查找
例题三——leedcode121~122:买卖股票的最佳时机
例题四——面试题53:寻找重复的数字I与寻找缺失的数字II
例题五——Leetcode面试题16.11:跳水板
例题六——面试题39:数组中出现次数超过一半的数字
中等例题
例题一——Leetcode34:在数组中查找元素的第一个位置和最后一个位置
例题二——Leetcode78:子集
例题三——Leetcode78:子集II