【自定义有序数组】

  查找算法:

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

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

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

数据结构---Java---有序数组的更多相关文章

  1. java 有序数组合并

    有序数组合并,例如: 数组 A=[100, 89, 88, 67, 65, 34], B=[120, 110, 103, 79, 66, 35, 20] 合并后的结果 result=[120, 110 ...

  2. Java有序数组的实现

    package 有序数组; public class OrdArray { private long[]array; private int nElems; //初始化 public OrdArray ...

  3. java有序数组的有序交集

    public static void main(String[] args) throws ParseException { int[] a = {4,5,-1,-1}; int[] b = {-1, ...

  4. 《Java数据结构与算法》笔记-CH2有序数组

    /** * 上个例子是无序数组,并且没有考虑重复元素的情况. * 下面来设计一个有序数组,我们设定不允许重复,这样提高查找的速度,但是降低了插入操作的速度. * 1.线性查找 * 2.二分查找 * 有 ...

  5. Java数据结构和算法 - 数组

    Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new ...

  6. (二)Java数据结构和算法——数组

    一.数组的实现 上一篇博客我们介绍了一个数据结构必须具有以下基本功能: ①.如何插入一条新的数据项 ②.如何寻找某一特定的数据项 ③.如何删除某一特定的数据项 ④.如何迭代的访问各个数据项,以便进行显 ...

  7. Java的数组,集合,数据结构,算法(一)

    本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...

  8. java合并两个有序数组的算法(抛砖引玉)

    前几天看见一道面试题中要将两个有序数组合并成一个新的有序数组,首先使用了嵌套循环,之后想那样效率太低,又想出了以下思路,和大家分享下,如果有更好的方法,请留言指教: 思路: 1.新建一个数组大小为fi ...

  9. JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并

    一直到大四才开始写自己的第一篇博客,说来实在有点羞愧.今天写了关于排序的算法题,有插入排序,冒泡排序,选择排序,以下贴上用JAVA实现的代码: public class test5 { public ...

  10. 合并K个有序数组-Java

    package com.rao.algorithm; import java.util.Arrays; /** * @author Srao * @className MergeK * @date 2 ...

随机推荐

  1. bootstrap.js 文件使用指南

    介绍 使用 Bootstrap v3.3.7 时,需要引入三个脚本文件. https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.m ...

  2. .net 索引器

    索引器允许类或结构的实例就像数组一样进行索引. 索引器类似于属性,不同之处在于它们的访问器采用参数. 在下面的示例中,定义了一个泛型类,并为其提供了简单的 get 和 set 访问器方法(作为分配和检 ...

  3. ElementUI的表单和vee-validate结合使用时发生冲突的解决

    在Vue项目中使用ElementUI表单时,同时又引入了vee-validate进行使用的时候,在浏览器上会出现这样的报错: [Vue warn]: The computed property &qu ...

  4. 重建freescale 4.6.2 multilib toolchain

    patch和crosstool-ng 可以从下面的网址下载, https://community.freescale.com/thread/386450 不过估计你会失望的,改了脚本,编译了后发现不对 ...

  5. 解决“System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本”的问题

    以server2008为例: 首先确保使用sqlplus能访问数据库. 1.管理工具->计算机管理->本地用户和组->组->administrators属性,添加,高级,立即查 ...

  6. CF70D(动态凸包)

    CF70D(动态凸包) 给出q(<=1e5)个询问,每次在加上一个点,维护凸包,或者询问某个点是否在凸包内(在边上也算). 听说可以用cdq做--但是并不会.我等蒟蒻只会用平衡树做. 首先,假设 ...

  7. jq表单验证

    <body> <form method="post" action=""> <div class="int"& ...

  8. (Python OpenGL)【4】Uniform变量 PyOpenGL

    (Python OpenGL) 原文:http://ogldev.atspace.co.uk/www/tutorial05/tutorial05.html(英文) __author__ = " ...

  9. Windows自动化---模拟鼠标键盘

    1.PyUserInput(不推荐) python2可以使用PyUserInput库:(不推荐) 支持最基础的鼠标,键盘操作,可以剪贴. 安装的时候:pip install PyUserInput 需 ...

  10. java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...