您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法 - 数组

2017-11-28 00:00 323 查看
理解一下简单的算法,结果越来越像ArrayList实现了。

package com.jomster.数组拓展;

import java.util.Arrays;
import java.util.stream.Stream;

public class ArrayExpand<T extends Comparable<T>> {

private Object[] arrayExpand;

private int elements;

private int expandSpace = 50;

public ArrayExpand() {
this(50);
}

public ArrayExpand(int initialCapacity) {
this.arrayExpand = new Object[initialCapacity];
}

/**
* 线性添加数据
*
* @param t
*/
public void add(T t) {
if (elements + 1 == arrayExpand.length) {

} else {
arrayExpand[elements] = t;
elements++;
}
}

/**
* 获取该坐标的数据
*
* @param index
* @return
*/
public T get(int index) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException("你获取的坐标超限");
}
return (T) arrayExpand[index];
}

/**
* 打印数据
*/
public void print() {
Stream is = Arrays.stream(arrayExpand).filter(n -> n != null);
is.forEach(i -> System.out.println("arr value = " + i));
}

/**
* 查询数据坐标(线性查询)
*/
public int search(T t) {
for (int i = 0; i < elements; i++) {
if (t == (T) arrayExpand[0]) {
return i;
}
}
return -1;
}

/**
* 删除数据
*
* @param index
*/
public void delete(int index) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException("你获取的坐标超限");
}
for (int i = index; i < elements - 1; i++) {
arrayExpand[i] = arrayExpand[i + 1];
}
elements--;
arrayExpand[elements] = null;

}

/**
* 修改数据
*
* @param index
* @param t
*/
public void change(int index, T t) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException("你获取的坐标超限");
} else {
arrayExpand[index] = t;
}
}

/**
* 有序数组,从小到大
*
* @param t
*/
public void addSort(T t) {
if (elements + 1 == arrayExpand.length) {

} else {
if (elements == 0) {
arrayExpand[elements] = t;
elements++;
} else {
int i;
for (i = 0; i < elements; i++) {
if (t.compareTo((T) arrayExpand[i]) < 0) {
break;
}
}

for (int j = elements; j > i; j--) {
arrayExpand[j] = arrayExpand[j - 1];
}

arrayExpand[i] = t;
elements++;
}

}
}

/**
* 二分法查找
* @param t
* @return
*/
public int binarySearch(T t) {
int middle = 0;
int pow = elements - 1;
int low = 0;

while (true) {
middle = (pow + low) / 2;
if (t.compareTo((T) arrayExpand[middle]) == 0) {
return middle;
} else if (low > pow) {
return -1;
} else {
if (t.compareTo((T) arrayExpand[middle]) > 0) {
low = middle + 1;
} else {
pow = middle - 1;
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: