java实现有序数组
最近看到一篇文章,大概就是说程序员如果想要提升,就应该写博客。受到了一定启发,所以来此创建账号,准备写点什么。
- 注意:本文章只适合初学者阅读。其中很多代码参考源码所写,仅供自娱自乐
package demo;
import java.util.Arrays;
import java.util.Iterator;
//升序数组
public class OrderArray implements Iterable<Long>{
private long[] array;//内置数组
private int size;//当前数组内元素数量
public OrderArray(int maxSize){
array=new long[maxSize];
size=0;
}
public int size(){
return size;
}
public void delete(int index){
for(int i=index;i<size;i++){
array[i]=array[i+1];
}
size--;
}
/**
* 按从小到大的顺序将值插入相应位置
* @param value
*/
public void insert(long value){
if(size == 0){
array[size++]=value;
return;
}
int i=select(value);
i=i>=0?i:-i;
for(int j=size;j>i;j--){
array[j]=array[j-1];
}
array[i] = value;
size++;
}
public int select(long searchVlaue){
int low=0;
int high=size-1;
while(low<=high){
int mid=(low+high) >>> 1;
long midValue=array[mid];
if(midValue>searchVlaue){
high=mid - 1;
}else if(midValue<searchVlaue){
low=mid + 1;
}else{
return mid;
}
}
return -(low);
}
@Override
public String toString() {
if(size()==0){
return "[]";
}
StringBuilder sb=new StringBuilder();
sb.append("[");
for(int i=0;;i++){
sb.append(array[i]);
if(i==size-1){
return sb.append("]").toString();
}
sb.append(",");
}
}
@Override
public Iterator<Long> iterator() {
return new itr();
}
private class itr implements Iterator<Long>{
int next=0;
int del=-1;
@Override
public boolean hasNext() {
return next!=size();
}
@Override
public Long next() {
long value=array[next];
del=next;
next++;
return value;
}
@Override
public void remove() {
delete(del);
next--;
}
}
}