【自定义有序数组】

  查找算法:

    线性查找算法:依次对比查询;

    二分查找算法:必须是有序;

  insert:要插入的value与数组中每个元素进行比较,当有值>value时,此处的index之后的元素整体后移,index位置赋新值;

package com.exiuge.mytest.array;

public class MyOrderArray {

    private long[] arr;
/**
* 实际数组元素大小
*/
private int elementsSize;
/**
* 初始容量50
*/
private static final int initSize=50; public MyOrderArray(){
arr=new long[initSize];
} /**
* insert
* @param value
*/
public void insert(long value){
if (elementsSize>=initSize){
throw new ArrayIndexOutOfBoundsException();
}
int i;
for (i=0;i<elementsSize;i++){
if (arr[i]>value){
break;
}
}
for (int j=elementsSize;j>i;j--){
arr[j]=arr[j-1];
}
arr[i]=value;
elementsSize++;
} /**
* 展示全部
*/
public void display(){
System.out.println("[");
for (int i=0;i<elementsSize;i++){
System.out.print(arr[i]+" ");
}
System.out.println("]");
} /**
* 根据value找下标索引
* @param value
* @return
*/
public int findByValue(long value){
int i;
for (i=0;i<elementsSize;i++){
if (arr[i]==value){
break;
}
}
if (i==elementsSize){
return -1;
}else {
return i;
}
} /**
* 根据value找index(二分查找算法)
* @param value
* @return
*/
public int findByValueSec(long value){
int middle=0,start=0,end=elementsSize;
while (true){
middle=(start+end)/2;
if (arr[middle]==value){
return middle;
}else if (start>end){
return -1;
}else {
if (arr[middle]>value){
end=middle-1;
}else if (arr[middle]<value){
start=middle+1;
}
}
}
} /**
* 根据下标索引找value
* @param index
* @return
*/
public long findByIndex(int index){
if (index>=elementsSize || index<0){
throw new ArrayIndexOutOfBoundsException();
}else {
return arr[index];
}
} /**
* 根据下标索引删除value
* @param index
*/
public void deleteByIndex(int index){
if (index>=elementsSize || index<0){
throw new ArrayIndexOutOfBoundsException();
}else {
for (int i=index;i<elementsSize;i++){
arr[index]=arr[index+1];
}
elementsSize--;
}
} /**
* 根据下标索引进行修改value
* @param index
* @param newValue
*/
public void updateByIndex(int index,long newValue){
if (index>=elementsSize || index<0){
throw new ArrayIndexOutOfBoundsException();
}else {
arr[index]=newValue;
}
} }

最新文章

  1. 配置rsync服务,数据同步。
  2. Python之路第一课Day7--随堂笔记(面向对象编程进阶...未完待续 )
  3. 你必须知道的Javascript 系列
  4. Java Socket长连接示例代码
  5. [Android Pro] Android libdvm.so 与 libart.so
  6. hdu 2034人见人爱A-B
  7. demo工程的清单文件及activity中api代码简单示例
  8. 转:10条建议让你创建更好的jQuery插件
  9. Ubuntu上安装mono并进行C#代码测试
  10. 如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法
  11. C# 编写短信发送Window服务
  12. vim 常用快捷键 二[转]
  13. laravel中间件源码分析
  14. HDU1150 Machine Schedule(二分图最大匹配、最小点覆盖)
  15. javamelody 使用
  16. JAVA进阶--ThreadPoolExecutor机制
  17. python全栈学习--day4
  18. FtpWebRequest.UsePassive属性:设置FTP工作模式
  19. Hdoj 1374.Knight Moves 题解
  20. Apache rewrite地址重写

热门文章

  1. loj10100 网络
  2. 对 BFC 的理解
  3. C++新标准:列表初始化
  4. 解决批处理命令执行完毕后自动关闭cmd窗口方法
  5. 自己写的Log记录组件
  6. C/C++使用心得:enum与int的相互转换
  7. How can I list colors in WPF with XAML?
  8. 基于ef core 2.0的数据库增删改审计系统
  9. Ground Truth
  10. VB6加载MSCOMCTL.OCX出现“不能加载&#39;&#39;”错误的处理方法汇总