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(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
随机推荐
- 小白学 Python 数据分析(13):Pandas (十二)数据表拼接
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- Ubuntu16.04如何安装bazel?
官方文档:https://docs.bazel.build/versions/master/install-ubuntu.html 我没有使用二进制的安装方法,以下是二进制的安装方法: Install ...
- python基本数据类型的操作
1 列表和元组 1.列表基本操作 1. 列表赋值 a = [1,2,3,4,5,6,7,8] a[0] = 100 #the result : [100, 2, 3, 4, 5, 6, 7, 8] 2 ...
- php+apache 环境配置(window环境)
最近,小主从事PHP开发.特将最近如何搭建php7的过程记录在此!希望有需要,可以借鉴!( 电脑必须win7 sp1以上, .netframework4 ) Windows7安装php7,Win7+p ...
- DIY 作品 及 维修 不定时更新
手机电池DIY充电宝 2块,优质手机电池加一个升压ic ,焊上一个 usb 母头.比买的强多了. 还能调压,最高调到24V 可以带白光焊台. 更换手机 SIM/SD 卡二合一 贴上高温胶带,吹下来. ...
- 等宽字体的妙用-loading 点点点动画
原理 ch等宽字体 + text-indent 动画负缩进 显示效果如 loading . loading .. loading ... loading . loading .. loading .. ...
- go学习第四天、条件和循环
循环 Go语言仅支持循环关键字 for for i := 0; i<5; i++ 示例 while 条件循环 while(n<5) n := 0 for n < 5 { n++ fm ...
- C语言程序设计(七) 函数
第七章 函数 分而治之: 把较大的任务分解成若干较小.较简单的任务,并提炼出公用任务的方法 函数是C语言中模块化程序设计的最小单位,既可以把每个函数都看作一个模块,也可以将若干相关的函数合并成一个模块 ...
- 智慧树刷网课python脚本
0x00 写在前面 疫情期间肯定有很多小伙伴需要上网课,但是有些网课我们感觉十分的鸡肋,自己不感兴趣,又必须要学 所以我写了这个刷网课的小程序,一方面是锻炼自己的爬虫技术,另一方面也给同学们节约宝贵的 ...
- css中:overflow:hidden清除浮动的原理
要想彻底清除浮动的影响,适合的属性不是 clear 而是 overflow. 一般使用 overflow:hidden,利用 BFC 的“结界”特性彻底解决浮动对外部或兄弟元素的影响. 1. 前言: ...