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(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
随机推荐
- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'mvc:resources'.
新的错误出现 spring-mvc.xml文件 <mvc:resources mapping="/static/**" location="/static/&qu ...
- 使用cookie
概述 虽说在现代Web开发过程中讨论Cookie有些不合时宜,但是这是开发人员如今可以使用的最古老.最稳定的客户端存储形式.当然,我们并不推荐使用Cookie,只是说它是一种选择. Cookie于19 ...
- 小程序自定义switch组件
如上图,小程序api中的switch组件只能自定义颜色,不能自定义宽高,所以就开始了自己写switch组件. 自定义组件样式 switch组件样式大致如图,样式思路:未选中时为一个长方形有圆角按钮,和 ...
- webapck之多页面打包(常见)
webpack多入口打包 let path = require('path'); elt HtmlWebpackPlugin = require('html-webpack-plugin'); mod ...
- 阿里云上docker部署nginx实现反向代理
简介 需要从镜像仓库找到所需要的nginx版本pull下来.(地址:https://hub.docker.com/) 1.docker pull nginx 1.挂载目录 1.1 获取nginx. ...
- Oracle 11g rac开启归档
Oracle 11g rac开启归档 查看目前归档状态 #节点1 ykws1 SQL> archive log list; Database log mode No Archive Mode A ...
- 阿里AI芯片:12nm工艺、709平方毫米大核心
含光出自<列子·汤问>篇有“上古三剑”一章,寓意含而不露,光而不耀,象征含光 800 无形却强劲的算力. 含光 800 是一款 AI 芯片,偏重推理.据介绍,1 颗含光 800 的算力相当 ...
- 关于SDL的一些坑:找不到WinMain,不显示控制台,添加链接库等
目录: 用CMake构建SDL时报错 Gcc添加链接库 Gcc找不到入口(WinMain) 让SDL启动时不带控制台窗口 用CMake构建SDL时报错 root@ubuntu:~/SDL# cmake ...
- Vue2.0 【第二季】第7节 Component 组件 props 属性设置
目录 Vue2.0 [第二季]第7节 Component 组件 props 属性设置 第7节 Component 组件 props 属性设置 一.定义属性并获取属性值 二.属性中带' - '的处理方式 ...
- ES6: let 与 const
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const. let 声明的变量只在 let 命令所在的代码块内有效. const 声明一个只读的常量,一旦声明 ...