java数组的封装以及二分查找
2018-01-29 20:17
441 查看
数组类的分装:
package shuzu;
public class MyArray {
private long[] arr;
private int elements;
//创建一个长50的数组
public MyArray() {
arr = new long[50];
}
public int getElements() {
return elements;
}
//自定义数组长度
public MyArray(int maxsize) {
arr = new long[maxsize];
}
/*
* 添加数据,有序添加
*/
public void insert(long value) {
int i;
/**
* 找到加入位置
*/
for(i = 0; i < elements; i++) {
if(arr[i] > value) {
break;
}
}
for(int j = elements; j > i; j--) {
arr[j] = arr[j-1];
}
arr[i] = value;
elements++;
}
/*显示数据*/
public void display() {
if(elements>0)
for(int i=0; i<elements; i++)
System.out.println(arr[i]);
}
/*查找数据*/
public int search(long value) {
for(int i=0; i<elements; i++) {
if(value == arr[i])
return i;
}
return -1;
}
/*查找数据,根据索引来查找*/
public long get(int index) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
}
else
{
return arr[index];
}
}
/*删除数据*/
public void delete(int index) {
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
} else {
for(int i=index; i<elements;)
arr[i] = arr[i++];
}
elements--;
}
/*更新数据*/
public void change(int index, long newvalue) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index] = newvalue;
}
}
/**
* 二分法查找,数组需要是有续的
*/
public int binarySearch(long value) {
int middle = 0;
int left = 0;
int right = elements;
while(true) {
middle = (left+right) / 2;
if(arr[middle] == value) {
return middle;
} else if(left>right) {
return -1;
}else if( value > arr[middle]) {
left = middle+1;
} else {
right = middle-1;
}
}
}
}数组测试类:
package shuzu;
import java.lang.*;
public class TestArray1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyArray arr = new MyArray();
arr.insert(30);
arr.insert(1);
arr.insert(0);
arr.insert(55);
System.out.println(arr.search(55));
System.out.println(arr.get(1));
for(int i=0; i<arr.getElements(); i++) {
System.out.println(arr.get(i));
}
System.out.println(arr.binarySearch(100));
}
}
package shuzu;
public class MyArray {
private long[] arr;
private int elements;
//创建一个长50的数组
public MyArray() {
arr = new long[50];
}
public int getElements() {
return elements;
}
//自定义数组长度
public MyArray(int maxsize) {
arr = new long[maxsize];
}
/*
* 添加数据,有序添加
*/
public void insert(long value) {
int i;
/**
* 找到加入位置
*/
for(i = 0; i < elements; i++) {
if(arr[i] > value) {
break;
}
}
for(int j = elements; j > i; j--) {
arr[j] = arr[j-1];
}
arr[i] = value;
elements++;
}
/*显示数据*/
public void display() {
if(elements>0)
for(int i=0; i<elements; i++)
System.out.println(arr[i]);
}
/*查找数据*/
public int search(long value) {
for(int i=0; i<elements; i++) {
if(value == arr[i])
return i;
}
return -1;
}
/*查找数据,根据索引来查找*/
public long get(int index) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
}
else
{
return arr[index];
}
}
/*删除数据*/
public void delete(int index) {
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
} else {
for(int i=index; i<elements;)
arr[i] = arr[i++];
}
elements--;
}
/*更新数据*/
public void change(int index, long newvalue) {
if(index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index] = newvalue;
}
}
/**
* 二分法查找,数组需要是有续的
*/
public int binarySearch(long value) {
int middle = 0;
int left = 0;
int right = elements;
while(true) {
middle = (left+right) / 2;
if(arr[middle] == value) {
return middle;
} else if(left>right) {
return -1;
}else if( value > arr[middle]) {
left = middle+1;
} else {
right = middle-1;
}
}
}
}数组测试类:
package shuzu;
import java.lang.*;
public class TestArray1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyArray arr = new MyArray();
arr.insert(30);
arr.insert(1);
arr.insert(0);
arr.insert(55);
System.out.println(arr.search(55));
System.out.println(arr.get(1));
for(int i=0; i<arr.getElements(); i++) {
System.out.println(arr.get(i));
}
System.out.println(arr.binarySearch(100));
}
}
相关文章推荐
- JAVA基础复习十三-StringBuffer、数组排序、二分查找、自动拆装箱
- java面试题9--数组高级-二分查找
- Java实现数组二分查找及递归二分查找
- java基础复习--数组的二分查找
- 【Java版本】二分查找&数字在排序数组中出现的次数
- Java数组与二分查找
- 数组封装应用及有序数组、二分查找源码实现
- Java数组遍历、求最大值、选择排序、冒泡排序、二分查找
- Java数组二分查找
- javaseday34补充2(数组 函数 匿名函数 数组排序 封装的力量 二分查找复习 数组小练习 查找 反转 )
- 有序表查询之一:java实现整型数组二分查找
- JAVA数组排序——二分(折半)查找
- java小程序——给数组随机赋值,查找输入的值以及冒泡和选择排序数组并输出
- java基础知识4--数组,排序,二分查找
- 【二分查找】在排序数组中,找出给定数字的出现次数 以及二分其他应用
- java数组中二分查找Demo范例
- 【Java】数组二分查找元素
- 重学java之随即数组二分查找
- 符号表以及在有序数组中的二分查找
- 二分查找,数组去重Java