java实现有序数组

来源:互联网 发布:java web start 1.4.2 编辑:程序博客网 时间:2024/05/16 09:45

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--;        }    }}