今天是2019-5-7.从现在开始的话,我会发一些源码的一些解刨,里面的那些内容讲解全部都写在代码里面,是以初学者的角度写的,因为我自身就是一个初学者。这些东西的话,我是准备放到博客里,让我自己以后再来进行参考学习的,算是我记忆的一部分吧!(这些放上来的代码中,有或多或少的代码是重复的,自己综合性的看吧!)
数组的一些简单操作
package ch01;
public class MyArray {
/**
* 上一个/下一个光标的位置:Alt+Left/Right
* 选中闭合元素:Alt+Shift+Up/Down/Left/Right
* 上一个/下一个成员(成员对象或成员函数):Ctrl+Shift+Up/Down
* 删除行:Ctrl+D
* 在当前行上插入一行:Ctrl+Shift+Enter
* 在当前行下插入一行: Shift+Enter
* 上下移动选中的行:Alt+Up/Down
*/
private long[] arr;
//表示有效的数据长度
private int elements;
public MyArray() {
// TODO Auto-generated constructor stub
arr = new long[50];
}
public MyArray(int maxsize) {
// TODO Auto-generated constructor stub
arr = new long[maxsize];
}
/**
* 添加数据
*/
public void insert(long value){
arr[elements] = value;
elements++;
}
//显示数据
public void display(){
System.out.print("[");
for(int i=0; i<elements; i++){
System.out.print(arr[i]+ " ");
}
System.out.print("]");
}
/**
* 根据值查找数据,如果数据存在返回下标
*/
public int search(long value){
int i;
for(i=0; i<elements; i++){
if (value==arr[i]) {
break;
}
}
if (i== elements) {
return -1;
}else{
return i;
}
}
/**
* 根据索引查找数据,返回值
*/
public long get(int index){
if (index>=elements || index<0) {
throw new ArrayIndexOutOfBoundsException();
}else{
return arr[index];
}
}
/**
* 根据index下标删除数据,后一个值覆盖前一个值,这样就删除掉了
*/
public void delete(int index){
if (index>=elements || index<0) {
throw new ArrayIndexOutOfBoundsException();
}else{
for(int i=0; i<elements;i++){
arr[index] = arr[index+1];
}
elements--;
}
}
/**
* 更新数据
*/
public void update(int index,long value){
if (index>=elements || index<0) {
throw new ArrayIndexOutOfBoundsException();
}else{
arr[index] = value;
}
}
}
下面这个示例:里面多了一个顺序插入和二分插入法
package ch01;
public class MyOrderArray {
/**
* 上一个/下一个光标的位置:Alt+Left/Right
* 选中闭合元素:Alt+Shift+Up/Down/Left/Right
* 上一个/下一个成员(成员对象或成员函数):Ctrl+Shift+Up/Down
* 删除行:Ctrl+D
* 在当前行上插入一行:Ctrl+Shift+Enter
* 在当前行下插入一行: Shift+Enter
* 上下移动选中的行:Alt+Up/Down
*/
private long[] arr;
//表示有效的数据长度
private int elements;
public MyOrderArray() {
// TODO Auto-generated constructor stub
arr = new long[50];
}
public MyOrderArray(int maxsize) {
// TODO Auto-generated constructor stub
arr = new long[maxsize];
}
/**
* 顺序添加数据
*/
public void insert(long value){
/*arr[elements] = value;
elements++;*/
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(){
System.out.print("[");
for(int i=0; i<elements; i++){
System.out.print(arr[i]+ " ");
}
System.out.print("]");
}
/**
* 根据值查找数据,如果数据存在返回下标
*/
public int search(long value){
int i;
for(i=0; i<elements; i++){
if (value==arr[i]) {
break;
}
}
if (i== elements) {
return -1;
}else{
return i;
}
}
/**
* 二分法查找数据,返回查找查找值的下标
*/
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) {//如果查找的数据不存在且一直小,pow只会一直变小;如果查找的数据不存在且一直大,low只会一直变大。所以最后结果只会是low>pow
return -1;
}else {
if (arr[middle] > value) {//要查找的值,如果比中间值小的话,右边下标pow则变成middle-1.反之
pow = middle -1;
}else{
low = middle +1;
}
}
}
}
/**
* 根据索引查找数据,返回值
*/
public long get(int index){
if (index>=elements || index<0) {
throw new ArrayIndexOutOfBoundsException();
}else{
return arr[index];
}
}
/**
* 根据index下标删除数据,后一个值覆盖前一个值,这样就删除掉了
*/
public void delete(int index){
if (index>=elements || index<0) {
throw new ArrayIndexOutOfBoundsException();
}else{
for(int i=0; i<elements;i++){
arr[index] = arr[index+1];
}
elements--;
}
}
/**
* 更新数据
*/
public void update(int index,long value){
if (index>=elements || index<0) {
throw new ArrayIndexOutOfBoundsException();
}else{
arr[index] = value;
}
}
}
测试类
package ch01;
import javax.xml.ws.soap.MTOM;
public class TestMyArray {
public static void main(String[] args) {
/*MyArray myArray = new MyArray();
myArray.insert(11);
myArray.insert(12);
myArray.insert(13);
myArray.display();
System.out.println(myArray.search(12));
System.out.println(myArray.get(1));
myArray.delete(1);
myArray.display();
myArray.update(0, 99);
myArray.display();*/
MyOrderArray myArray = new MyOrderArray();
myArray.insert(15);
myArray.insert(14);
myArray.insert(5);
myArray.insert(13);
myArray.insert(2);
myArray.insert(8);
myArray.display();
System.out.println(myArray.binarySearch(5));
}
}