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(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
随机推荐
- Sentinel基于Apollo的持久化改造
Sentinel基于Apollo的持久化改造 sentinel默认是将用户在dashboard中编辑过的流控信息保存在内存中,所以在重启后,所有之前配置过的流控规则也就不见了.但是sentinel给用 ...
- 前端Bug解决方案
没错!我正在写bug呢!不管你是小白还是大牛,写bug无可避免,遇到bug怎么办?别慌!毛主席教导我们"战略上藐视BUG,战术上重视BUG"!前端遇到的bug无非就三个方面结构层( ...
- 提高 Web开发性能的 10 个方法
随着网络的高速发展,网络性能的持续提高成为能否在芸芸App中脱颖而出的关键.高度联结的世界意味着用户对网络体验提出了更严苛的要求.假如你的网站不能做到快速响应,又或你的App存在延迟,用户很快就会移情 ...
- 前端每日实战:132# 视频演示如何用纯 CSS 创作一只思考的手
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/WgdVyx/ 可交互视频 此视频是 ...
- 自定义checkbox, radio样式总结
任务目的 深入了解html label标签 了解CSS边框.背景.伪元素.伪类(注意和伪元素区分)等属性的设置 了解CSS中常见的雪碧图,并能自己制作使用雪碧图 任务描述 参考 样例(点击查看),实现 ...
- JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器
5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...
- Linux中软连接和硬连接的区别
首先,我们要清楚符号链接的目的,在不改变原目录/文件的前提下,起一个方便的别名(在这起个别名,让我想到前阶段学C里typedef也是起别名的). 1.软连接就相当于windows的快捷方式.例如:ln ...
- LoadRunner初入门(安装)
在经过了两天网上找软件-真机上装软件-完了发现真机不能用(不能用的原因就是IE不能打开 试了很多方法现在真机上的ie变成了ie8英文版),果断用上了虚拟机 虚拟机刚开始要装镜像 一开始下的是64位的发 ...
- Python 小技巧:如何实现操作系统兼容性打包?
有一个这样的问题:现要用 setuptools 把一个项目打包成 whl 文件,然后 pip install 在 Windows/Linux 两种操作系统上,但是该项目中有一些依赖库只有 Window ...
- javaScript 基础知识汇总 (十三)
1.Class 在JavaScript中 calss即类是一种函数 基本语法 class Myclass{ constructor(){} method1(){} method2(){} method ...