package 数据结构;
/**
* @Author:ZengXiao
* @Description: 数组类
* @Date: Create in 11:30 2018/6/1
* @Modified By:
*/
public class MyArray {
private long[] arr;
// 表示有效数据的长度
private int elements;
public MyArray() {
// 默认构造器 初始数组长度50
arr = new long[50];
}
public MyArray(int maxsize) {
// 指定数组长度
arr = new long[maxsize];
}
/**
* 添加数据
* @param value
*/
public void insert(long value){
// elements为int类型的成员变量,默认初始为0
arr[elements] = value;
// 有效数据递增
elements++;
}
/**
* 添加数据(有序,从小到大)
* @param value
*/
public void insertOrder(long value){
int i;
for(i = 0; i < elements; i++) {
if(arr[i] > value) {
// 如果数组中存在i这个下标的值大于要插入的值
break;
}
}
// 将i这个下标的值及后面的元素依次向后面移动
for(int j = elements; j > i; j--) {
arr[j] = arr[j-1];
}
arr[i] = value;
elements++;
}
/**
* 添加数据(有序,从大到小)
* @param value
*/
public void insertOrder1(long value){
int i;
for(i = 0; i < elements; i++) {
if(arr[i] < value) {
// 如果数组中存在i这个下标的值小于要插入的值
break;
}
}
// 将i这个下标的值及后面的元素依次向后面移动
for(int j = elements; j > i; j--) {
arr[j] = arr[j-1];
}
arr[i] = value;
elements++;
}
/**
* 显示全部数据
*/
public void display() {
System.out.print("[");
for(int i = 0; i < elements; i++) {
System.out.print(arr[i] +" ");
}
System.out.print("]");
}
/**
* 根据value值查找下标
*/
public int search(long value) {
int i;
for(i = 0; i < elements; i++) {
if(value == arr[i]) {
break;
}
}
if(i == elements) {
// 没查找到value
return -1;
} else {
return i;
}
}
/**
* 根据索引查找数据
*/
public long get(int index) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
}
return arr[index];
}
/**
* 二分法查找
*/
public int binarySearch(long value) {
int middle = 0; // 中间下标
int low = 0; // 左边下标
int pow = elements; // 右边下标
while(true) {
middle = (pow + low) / 2;
if(arr[middle] == value) {
return middle;
} else if(low > pow) {
return -1;
} else {
if(arr[middle] > value) {
pow = middle - 1;
} else {
low = middle + 1;
}
}
}
}
/**
* 根据索引删除数据
*/
public void delete(int index){
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
}
for(int i = index; i < elements-1; i++) {
// 相当于依次数组后面一个值覆盖前面一个值
arr[i] = arr[i + 1];
}
// 有效数值减一
elements--;
}
/**
* 更新数据
* @param index 要替换的下标
* @param newValue
*/
public void change(int index, int newValue) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
}else {
arr[index] = newValue;
}
}
/**
* 测试
* @param args
*/
public static void main(String[] args){
MyArray arr = new MyArray();
arr.insertOrder1(2);
arr.insertOrder1(8);
arr.insertOrder1(4);
arr.insertOrder1(5);
arr.insertOrder1(1);
arr.insertOrder1(3);
arr.display();
}
}
java数组
最新推荐文章于 2024-04-27 17:37:34 发布