java基础--如何用java实现数组呢

java数据结构的练习一:如何用Java来实现数组;

说起来数据结构大家肯定会想到,数组,队列,堆栈,链表,图,树等其他的,接下来会每天逐一对其进行学习和使用,以及个人所理解的情况给展示出来

什么是数组呢?

1.数组是相同数据类型的元素的集合。

2.数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。

3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。

这里主要说明一下一位数组如何构造呢:接下来看代码:
其中要说明以下几点吧:

1.需要提前定义数组,和定义有效的长度,

对于数组的添加:其实是对每一个下标来赋值,同时把有效长度递增

对弈数组的查看:通过值来返回所在的位置,本质是,通过循环遍历每一个下标所对应的值如果相同暂停,这时所对应的下标就是循环遍历的i所以返回i就可以了

数组的查找:通过下标查找,直接返回所对应的下标的值

删除数据:通过循环遍历,删除哪一个下标则把后面的数据赋值给前面的,同时对其进行有效长度自减1,

数据的更新:通过指定下标和值就可以实现更新,

有序添加:先循环遍历判断其值是否与添加的值的大小,这里是添加的值小的情况下终止,执行把添加后面的元素往前推移

这里是最后一个元素赋值给前一个元素,同时把新加入的元素给赋值到下标i;元素总量+1;

二分查找:二分查找必须是有序的数组,通过输入要查找的值,返回对应的位置,主要是设置变量,每次必须是把数组给分割成两块,把中间的值与出入的值相比较,如果相等,则返回数据,如不等判断大小,如果大于所查找的值最大下标为中间下标-1,否则最小下标为中间的值+1,这然后把所有的分割的范围

package com.kaysanshi.testArray;
/***
 * 构造一个属于自己的数组
 * @author leoill
 *@date 2019年4月23日
 */
public class TestArray {
	
	private long[] arry;//定义一个数组
	
	private int elements;//定义数据有效长度
	
	public TestArray(){
		arry=new long[50];//设置50长度
	}
	
	public TestArray(int maxsize){
		arry=new long[maxsize];
	}
	/**
	 * 数组的数据的添加
	 */
	public void insert(long value){
		arry[elements]=value;
		elements++;	
	}
	/**
	 * 显示数据
	 */
	public void display(){
		System.out.println("[");
		for(int i=0;i<arry.length;i++){
			System.out.println(arry[i]+ " ");
		}
		System.out.println("]");
	}
	/**
	 * 根据值来返value
	 */
	public int search(long value){
		int i;
		for(i=0;i<elements;i++){
			if (value==arry[i]) {
				break;
			}
		}
		if (i==elements) {
			return -1;
		}else{
			return i;
		}
	}
	/**
	 * 线性查找
	 * 查找数据根据索引查
	 */
	public long get(int index){
		if (index >=elements || index <0) {
			throw new ArrayIndexOutOfBoundsException();
		}else{
			return arry[index];
		}
	}
	/**
	 * 删除数据
	 */
	public void delete(int index ){
		if (index >=elements || index <0) {
			throw new ArrayIndexOutOfBoundsException();
		}else{
			for(int i=0;i<elements;i++)
			arry[index]=arry[index+1];
			elements--;
		}
	}
	/**
	 * 更新
	 * @param index
	 * @param newvalue
	 */
	public void update(int index, long newvalue){
		if (index >=elements || index <0) {
			throw new ArrayIndexOutOfBoundsException();
		}else{
			arry[index]=newvalue;
		}
	}
	///
	// 以下是有序数组的操作                ///
	//                      //
	//                     ///
	//
	/**
	 * 有序添加
	 * @param value
	 */
	public void sortinsert(long value){
		int i;
		for(i=0;i<elements;i++){
			if (arry[i]>value) {
				break;
			}
		}
		for(int j=elements;j>i;j--){
			arry[j]=arry[j-1];
		}
		arry[i]=value;
		elements++;
	}
	/**
	 * 二分查找:前提是必须是有序的数组
	 * @return
	 */
	public int binarysearch(long value){
		int middle=0;
		int low=0;
		int pow=elements;//最大下标
		while(true){
			middle=(pow+low)/2;
			if (arry[middle] == value) {
				return middle;
				
			}else if (low >pow) {
				return -1;
			}else {
				if (arry[middle]>value) {
					pow =middle-1;
				}else{
					low =middle+1;
				}
			}
		}
	}
	
	
	/***
	 * 测试
	 * @param args
	 */
	public static void main(String[] args){
		
	} 
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石 [Alay Kay]

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值