java数据结构—-数组

在这里概念性的东西讲也是没有意义的,直接上代码:

  1. 面向对象的数组(一些常见的方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import java.util.Arrays;

import javax.management.RuntimeErrorException;

public class MyArray {
// 用于存储数据的数组
private int[] elements;

public MyArray() {
elements = new int[0];
}

// 获取数组长度
public int size() {
return elements.length;
}

// 在数组末尾加一个元素
public void add(int a) {
int[] newArr = new int[elements.length + 1];
// 复制数组
for (int i = 0; i < elements.length; i++) {
newArr[i] = elements[i];
}
newArr[elements.length] = a;
// 新数组替换原数组
elements = newArr;

}

// 输出数组
public void show() {
System.out.println(Arrays.toString(elements));
}
//删除数组中的元素
public void delete(int index){
if(index<0||index>elements.length-1){
throw new RuntimeException("下标越界");
}
//创建一个新的数组长度为原数组减一
int [] newarr=new int [elements.length-1];
for(int i=0;i<newarr.length;i++){
if(i<index){
newarr[i]=elements[i];

}else{
newarr[i]=elements[i+1];
}
}
elements=newarr;
}
//获取某个下标的元素
public int get(int index){
if(index<0||index>elements.length-1){
throw new RuntimeException("下标越界");
}
return elements[index];
}
//插入一个元素到指定位置
public void insert(int index,int element){
if(index<0||index>elements.length-1){
throw new RuntimeException("下标越界");
}
int []newArr=new int [elements.length+1];
for(int i=0;i<elements.length;i++){
if(i<index){
newArr[i]=elements[i];
}else{
newArr[i+1]=elements[i];
}
}
newArr[index]=element;
elements=newArr;


}
//替换指定位置的函数
public void set(int index,int element){
if(index<0||index>elements.length-1){
throw new RuntimeException("下标越界");
}
elements[index]=element;
}

public static void main(String[] args) {
MyArray a = new MyArray();
System.out.println("当前数组长度:"+a.size());
a.add(1);
System.out.println("当前数组长度:"+a.size());
a.show();
a.add(7);
a.show();
a.delete(1);
a.show();
System.out.println(a.get(0));
a.insert(1, 4);
a.show();
a.set(1, 2);
a.show();

}

}
  1. 数组的查找

    1. 线性查找(过于简单)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19

      public class testSearch {
      public static void main(String[] args) {
      //目标数组
      int []arr=new int[]{1,2,3,4,5,6,7,8,9};
      //目标元素
      int a=6;
      int index=-1;
      for(int i=0;i<arr.length;i++){
      if(arr[i]==a){
      index=i;
      break;
      }
      }
      //打印目标元素的下标
      System.out.println(index);
      }

      }
  1. 二分查找

    假如中间位置与目标元素大小相同那么直接跳出循环,不同则判断中间位置与目标元素的大小,改变首位位置,如果大于目标元素,end=mid-1,小于则begin=mid+1。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public class testBinarySearch {
    public static void main(String[] args) {
    // 目标数组
    int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    // 目标元素
    int a = 9;
    //记录开始和结束位置
    int begin=0;
    int end=arr.length-1;
    int mid=(begin+end)/2;
    //记录位置
    int index=-1;
    while(true){
    if(arr[mid]==a){
    index=a;
    break;
    //中间元素不是要查找的元素
    }else{
    //比目标元素大
    if(arr[mid]>a){
    //
    end=mid-1;


    }else{
    begin=mid+1;

    }
    mid=(begin+end)/2;
    }

    }
    System.out.println(index);
    }

    }
-------------本文结束感谢您的阅读-------------
0%