一:数组基础知识
public class demo01 {
public static void main(String[] args) {
//1.新建数组.指定数组长度
long[] arr1 = new long[10];
//给数组赋值
arr1[0] = 8;
//2.新建数组,指定数组元素
long[] arr2 = new long[]{1,2,3,4,5,6,7,8};
//3.新建数组,指定元素
long[] arr3 = {6,7,8};
//访问数组元素
System.out.print(arr1[0]);
}
}
二:自定义类封装数组(增删改查)
//自定义类封装数组
public class Demo02 {
//1.自定义数组
private long[] arr;
//2.数组长度
private int length;
//3.空参构造方法
public Demo02(){
arr = new long[10];
}
//4.带参构造
public Demo02(int size){
arr = new long[size];
}
//5.添加数据
public void insert(long value){
arr[length] = value;
length++;
}
//6.显示数据
public void display(){
System.out.print("[");
for (int i=0;i<length;i++){
if (i ==length-1){
System.out.print(arr[i]);
}else{
System.out.print(arr[i]+",");
}
}
System.out.print("]");
System.out.println();
}
//7.查询数据
public void search(int index){
if (index>=length || index < 0){
System.out.println("数组越界");
}else{
System.out.println(arr[index]);
}
}
//8.根据值查找元素位置
public int find(long value){
int i;
for ( i =0;i<length ; i++){
if (arr[i]==value){
break;
}
}
if (i == length){
return -1;
}else{
return i;
}
}
//9.通过索引删除数据
public void delete(int index){
if (index >= length || index < 0){
throw new ArrayIndexOutOfBoundsException();
}else{
for (int i = index;i<length;i++){
arr[i] = arr[i+1];
}
length--;
}
}
//10.更新数据
public void update(int index,long value) {
if (index >= length || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index] = value;
}
}
}
三:有序数组(保证每次插入新数据后都保持有序)
public class Demo03 {
//1.自定义数组
private long[] arr ;
private int length;
//3.空参构造方法
public Demo03(){
arr = new long[10];
}
//4.带参构造
public Demo03(int size){
arr = new long[size];
}
//5.插入数据,保证有序
public void insert(int value){
int i;
//插入数据之前先判断找到插入数据的位置 i
for ( i=0;i<length;i++){
if (arr[i] > value){
break;
}
}
//把第 i 个元素的数据传给 i+1 位置
for (int j=length;j>i;j--){
arr[j] = arr[j-1];
}
//正式插入数据
arr[i] = value;
//数组长度自增
length++;
}
//3.打印数组
public void show(){
System.out.print("[");
for (int i=0;i<length;i++){
if (i == length-1){
System.out.print(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}
}
四:查找算法
4.1线性查找
public class Demo04 {
//自定义数组
private long[] arr = {2,3,41,6,8,91,0,8};
//线性查找
public int find(int value){
int i;
for (i=0;i<arr.length;i++){
//如果找到就结束循环,把 index 返回
if (arr[i]==value){
break;
}
//如果最后一个也不是,就返回 -1
if (i==arr.length-1 && arr[arr.length-1] != value){
return -1;
}
}
return i;
}
}
4.2二分法查找
前提: 是有序数组
public class Demo05 {
//有序数组
private long[] arr = {1,2,3,4,5,6,7,8,9};
//二分查找
public int find(int value){
//定义开始索引和最大索引
int start=0;
int end=arr.length-1;
int mid=0;
while (true){
mid = (start+end)/2;
if (arr[mid]==value){
return mid;
}else if (arr[start]>value){ //判断最左不存在条件
return -1;
}else if (arr[end]<value){ //判断最右不存在条件
return -1;
} else {
if (arr[mid] > value){ //如果中间值大于value,则往左边缩小范围
end = mid-1;
}else {
start=mid+1; //如果中间值小于value,则往右边缩小范围
}
}
}
}
}