数组的使用
定于数组最常用的两种方法
int[] arr = new int[3];
int[] arr = new int[]{1,2,3};
我们会发现长度都是不可变的,如何解决这个问题呢?
如何给长度为3的饱和数组中再添加一个元素呢?? 仔细想想,我们可以这样做
public static void main(String[] args) {
int arr[] = new int[]{1,2,3};
System.out.println(Arrays.toString(arr));
int dst = 4;
//创建一个新的数组,长度是原数组长度+1
int arr1[] = new int[arr.length+1];
//把原数组中的数据全部复制到新数组中
for (int i = 0; i < arr.length; i++) {
arr1[i] = arr[i];
}
//把目标元素放入新数组最后
arr1[3] = dst;
//新数组替换原数组
arr = arr1;
System.out.println(Arrays.toString(arr));
}
如何 删除数组中的元素呢?
public static void main(String[] args) {
int arr[] = new int[]{9,8,7,6,5,4};
System.out.println(Arrays.toString(arr));
//要删除元素的下标
int dst = 3;
//创建一个新的数组
int arr1[] = new int[arr.length-1];
//复制原数组中除了要删除元素以外的所有元素
for (int i = 0; i < arr1.length ; i++) {
if(i<dst) {
arr1[i] = arr[i];
}else {
arr1[i] = arr[i + 1];
}
}
//新数组替换旧数组
arr = arr1;
System.out.println(Arrays.toString(arr));
}
我们会发现,上面写的向数组中添加元素或者删除元素太麻烦啦。。想要简单的的对数组元素进行添加、删除、插入、取出等操作,我们引入了面向对象的数组
数组的查找算法
数组的查找算法分为线性查找和二分查找
1、线性查找 :就是把需要查找的元素和数组中的元素依次对比。如果找到了,返回数组元素下标,要是找不到就返回-1。挨个查找,效率比较低。
2、二分查找:把数组切成两半,从中间开始找,如果不是转换下标。注意前提是:数组必须是有序数组。
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
int target = 9;
int left = 0;
int right = arr.length-1;
while (true) {
int mid = (left+right)/2;
if(arr[mid] > target) {
//在tmp左侧
right = mid-1;
} else if(arr[mid] < target) {
//在tmp右侧
left = mid+1;
} else {
System.out.println(mid);
break;
}
//若左边元素下标已经大于等于右边元素下标时还没有跳出循环,说明找不到此元素
if(left >= right) {
System.out.println("无此元素");
break;
}
}
}
。。。