数组的遍历
数组的遍历使用for循环与foreach来实现
for(int i =0;i<arr.length;i++){
System.out.println(arr[i]);
}
for (int x:arr) {
System.out.println(x);
}
foreach使用时针对x修改不会对数组的访问有影响
这里的arr是已知数组。
通过修改a[0] 可以改变arr[0]的数值
Java中引用类型都具有这样的特点
标准库中数组转字符串的方法
Arrays.toString()
int[] arr={1,2,3,4};
System.out.println(Arrays.toString(arr));
[1, 2, 3, 4]
数组拷贝
int[] arr2=arr1;
这并不是拷贝只是起了一个别名
int[] arr={1,2,3,4};
int[] result=copyof(arr);
真正的拷贝数组标准库中有这样的函数,它允许新数组和旧数组不一样长
如果新数组长度比旧数组短,数组被截断拷贝,如果比旧数组长,则多余的位置自动初始化为0
Arrays.copyOf()
int[] arr={1,2,3,4};
int[] result=Arrays.copyOf(arr,arr.length);
以上写法称之为浅拷贝
更复杂的数组拷贝(二维数组的拷贝)深拷贝
{
{1,2,3,4},
{1,2,3,4}
}
在数组中有两种查找
1.给下标查数值(不算查找)
2.给值查下表
方法1:
int[] arr={1,2,3,4};
int pos =chaZhao(arr,1);
System.out.println(pos);
}
public static int chaZhao(int[] arr,int toChaZhao){
for (int i=0;i<arr.length;i++){
if(toChaZhao==arr[i]){
return i;
}
}
return -1;
}
方法2二分查找
(要求有序)本质在于拿待查找区间中的元素,和待查找元素进行比较,每次比较都能砍掉一半的区间。
int pos=erFen(arr,100);
System.out.println(pos);
}
public static int erFen(int[] arr, int toErFen) {
int left=0;
int right=arr.length-1;
while(left<=right){
int mid=(left+right)/2;
if(toErFen<arr[mid]){
right=mid-1;
}
else if(toErFen>arr[mid]){
left=mid+1;
}
else{
return mid;
}
}return -1;
}
java的数组排序标准库中有相应的Arrays.sort方法来进行排序。
当然在面试中我们需要掌握快速排序和冒泡排序。尤其是快速排序在面试中是非常高频出现的。
集合类排序Collections.sort
逆序
逆序是要修改数组的内容,而不是反向打印(不修改内容)
public static void niXu(int[] arr) {
int left=0;
int right=arr.length-1;
while(right>left){
int tmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
left++;
right--;
}
}
排序之偶数在前奇数在后
核心思想
public static void ouQianJiHou(int[] arr) {
int left=0;
int right=arr.length-1;
while (left<right){
while(left<right&&arr[left]%2==0){
left++;
}
while (left<right&&arr[right]%2!=0){
right --;
}
int tmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
}
}