Java实现自定义数组及其方法
自定义数组
主要功能有增、删(根据索引,根据值)、改、查扩容等功能
package array; public class CustomArray {
private int[] array = null;
//数组有效长度
public int length = 0; //空参构造函数,默认数组大小为10
public CustomArray() {
this.array = new int[10];
} public CustomArray(int size) {
this.array = new int[size];
} //给自定义数组添加元素
public void insert(int number) {
//判断数组是否满
//满了,扩容,扩容需要新建一个数组,将旧的数据复制过去,再插入
//没满,直接插入
//插入之后length+1
if (length == array.length) {
expand(this.array);
array[length] = number;
} else {
this.array[length] = number;
}
length++; } //根据索引删除元素
public void deleteByIndex(int index) throws Exception {
//判断索引是否越界,即超过了有效长度
//超过了,抛出异常提示
//没超过就删除
//首先需要将该索引之后的所有元素前移一个位置。
//最后length-1
if (index > length - 1 || index < 0) {
throw new Exception("删除时索引越界");
} else {
for (int i = index; i < length; i++) {
array[i] = array[i + 1];
}
length--;
}
} //根据值删除元素,删除多个
public void deleteByValue(int value) throws Exception {
//首先看数组中有没有这个值,没有抛异常提示
boolean flag = false;
for (int i = 0; i < length; i++) {
if (array[i] == value) {
flag = true;
deleteByIndex(i);
}
}
if (!flag)
throw new Exception("该元素不存在");
deleteOne(value); } //删除一个元素
public void deleteOne(int value) throws Exception {
boolean flag = false;
for (int i = 0; i < length; i++) {
if (array[i] == value) {
flag = true;
deleteByIndex(i);
break;
}
}
if (!flag)
throw new Exception("该元素不存在"); } //修改某索引对应元素的值
public void update(int index, int value) throws Exception {
if (index > length - 1 || index < 0) {
throw new Exception("修改时索引越界");
} else {
array[index] = value;
}
} //(遍历)数组的元素
public void travel() {
System.out.print("[");
for (int i = 0; i < length; i++) {
System.out.print(array[i]);
if (i < length - 1)
System.out.print(",");
}
System.out.println("]");
} //根据值查找元素,返回索引
public int search(int value) throws Exception {
int i = 0;
for (i = 0; i < length; i++) {
if (value == array[i])
break;
}
if (i == length)
return -1;
return i;
}
//根据索引元素,返回值
public int searchByIndex(int index) throws Exception {
if(index<0||index>=length){
throw new Exception("索引越界");
}
return array[index]; } //每次扩容后比之前大一倍
public void expand(int[] arr) {
int expandSize = arr.length * 2;
this.array = new int[expandSize]; for (int i = 0; i < arr.length; i++) {
this.array[i] = arr[i];
}
} }
测试类如下:
package array; public class ArrayTest { public static void main(String[] args) throws Exception { CustomArray array=new CustomArray();
array.insert(10);
array.insert(9);
array.insert(8);
array.insert(4);
array.insert(5);
array.insert(6);
array.deleteByIndex(0); array.travel(); }
}
自定义有序数组
主要功能有插入、二分查找递归版、二分查找非递归
package array; public class OrderArray {
private int[] array = null;
//数组有效长度
public int length = 0; public OrderArray() {
this.array = new int[50];
} public OrderArray(int size) {
this.array = new int[size];
} //此处有许多细节
public void insert(int value) { int i;
for (i = 0; i < length; i++) {
if (value < array[i])
break;
}
for (int j = length - 1; j >=i; j--) {
array[j+1] = array[j];
}
array[i] = value; length++; } public void travel() {
System.out.print("[");
for (int i = 0; i < length; i++) {
System.out.print(array[i]);
if (i < length - 1)
System.out.print(",");
}
System.out.println("]");
}
//二分查找,返回索引
public int binarySearch(int value){
int left=0,right=length-1;
int mid; while(left<=right){
mid=(left+right)/2; if(value==array[mid])
return mid;
if(value<array[mid]){
right=mid-1;
}else{
left=mid+1;
}
}
return -1;
}
public int binarySearchByRecursion(int value,int begin,int end){
int mid=(begin+end)/2; if(array[mid]==value)
return mid;
if(begin>end)
return -1;
if(value<array[mid]){
end=mid-1;
return binarySearchByRecursion(value,begin,end);
}else{
begin=mid+1;
return binarySearchByRecursion(value,begin,end);
}
} }
测试类:
package array; public class ArrayTest { public static void main(String[] args) throws Exception { OrderArray orderArray=new OrderArray(); orderArray.insert(9);
orderArray.insert(8);
orderArray.insert(7);
orderArray.insert(6);
orderArray.insert(5);
orderArray.travel();
System.out.println(orderArray.binarySearch(6));
System.out.println(orderArray.binarySearchByRecursion(6,0,orderArray.length-1)); } }
通过以上练习可以很好的巩固基础编码能力
冰冻三尺非一日之寒,脚踏实地埋头干
Java实现自定义数组及其方法的更多相关文章
- Java中的数组和方法
3.1 数组的定义和使用 数组(Array)是用来存储一组相同数据类型数据的集合.数组中的每个数据称为一个元素(element),数组可以分为一维数组,二维数组和多维数组.我们 主要讲解一维数组和二维 ...
- java script删除数组的方法集合(转载)
一.清空数组 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即被清空了 二.删 ...
- java基础(6)--数组和方法
数组 1. 什么是数组? 数组是相同数据类型的元素组成的集合.这些元素按线性顺序排列.所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素:除最后一个元素外,每一个元素都有唯一的后继元素.(“ ...
- java 控制语句、数组、方法
一.控制语句 1.if 语句 if语句是指如果满足某种条件,就进行某种处理. 流程图: 2. if…else语句 语法格式: if (判断条件){ 执行语句1 …… }else{ 执行语句2 …… } ...
- Java 二维数组及方法概况
数组 数组是指一组数据的集合,数组中的每个数据被称作元素.在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致. 数组的定义 在Java中,可以使用以下格式来定义一个数组. 数据类型[ ...
- java基础学习04(数组与方法)
数组与方法 一.完成的目标 1. 掌握数组的定义.使用方法.引用传递 2. 掌握方法及其方法的重载 3. 使用方法接收和返回一个数组 4. java新特性对数组的操作支持 二.数组的定义和使用 数组是 ...
- Java中的自定义数组队列
在Java中,作为所有数据结构中存储和获取速度最快的一种,数组凭借其这种简单易用的优势在各个方面都能大显神威.但是数组也有自身的局限性.数组的长度必须是固定的一旦定义之后就无法动态的更改,这就会造成这 ...
- java创建自定义类的数组
今天在学图论的最小生成树,开始一直在想是用邻接矩阵还是关联矩阵来表示图,但是发现这样都会有好多空间浪费.于是我就自定义一个边的类,里面包含了权值,关联的端点1,端点2,和图的表示字母.发现我想创建11 ...
- java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象
1. java.util.Arrays 数组工具类 Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
随机推荐
- [React技术内幕] setState的秘密
对于大多数的React开发者,setState可能是最常用的API之一.React作为View层,通过改变data从而引发UI的更新.React不像Vue这种MVVM库,直接修改data并不能视图的改 ...
- Tomcat 之startup.bat启动失败案例
今天我在部署一个Tomcat环境时,各种变量都配置完了,最后启动Tomcat时,Tomcat一闪而过,当时我的内心是崩溃的~~ 然后我就开始百度.定位问题.进入cmd命令行窗口,cd进入到Tomcat ...
- Eureka停更了?试试Zookpper和Consul
在Spring Cloud Netflix中使用Eureak作为注册中心,但是Eureka2.0停止更新,Eureka1.0 进入了维护状态.就像win7一样,同样可以用,但是官方对于新出现的问题并不 ...
- Nodejs:md5入门介绍及crypto模块的应用
简介 MD5(Message-Digest Algorithm)是计算机安全领域广泛使用的散列函数(又称哈希算法.摘要算法),主要用来确保消息的完整和一致性.常见的应用场景有密码保护.下载文件校验等. ...
- Spark入门(五)--Spark的reduce和reduceByKey
reduce和reduceByKey的区别 reduce和reduceByKey是spark中使用地非常频繁的,在字数统计中,可以看到reduceByKey的经典使用.那么reduce和reduceB ...
- JVM 参数(转)
Herry灬凌夜 转自:https://www.cnblogs.com/wuyx/p/9627542.html 常用的JVM配置参数 一.Trace 跟踪参数 在Eclipse中,如何打开GC的监控 ...
- spring Boot登录验证之验证码 邮箱
一 验证码 登录login.jsp <%@ page contentType="text/html;charset=UTF-8" language="java&qu ...
- Python——项目-小游戏2-动画绘制
实现游戏循环还有事件的监听 在上一讲中 你需要完成这样的这样的效果, 如果你还没有完成,请不要继续往下阅读!!切记切记切记.,重要的事情说三遍 我们来看一下什么是游戏循环 所谓的游戏循环很好的理解 就 ...
- 爬虫如何使用phantomjs无头浏览器解决网页源代码经过渲染的问题(以scrapy框架为例)
一.浏览器的构成 许多开发商提供了商用的浏览器来解释和显示Web文档,而所有这些浏览器几乎都使用相同的体系架构.每一种浏览器(browser)通常由三部分构成:一个控制程序,客户协议和一些解释程序.控 ...
- ComplexBrowser: a tool for identification and quantification of protein complexes in large-scale proteomics datasets(大规模蛋白组学数据集中鉴定和定量蛋白复合物)
文献名:ComplexBrowser: a tool for identification and quantification of protein complexes in large-scale ...