Java实现自定义数组及其方法

自定义数组

主要功能有增、删(根据索引,根据值)、改、查扩容等功能

  1 package array;
  2
  3 public class CustomArray {
  4     private int[] array = null;
  5     //数组有效长度
  6     public int length = 0;
  7
  8     //空参构造函数,默认数组大小为10
  9     public CustomArray() {
 10         this.array = new int[10];
 11     }
 12
 13     public CustomArray(int size) {
 14         this.array = new int[size];
 15     }
 16
 17     //给自定义数组添加元素
 18     public void insert(int number) {
 19         //判断数组是否满
 20         //满了,扩容,扩容需要新建一个数组,将旧的数据复制过去,再插入
 21         //没满,直接插入
 22         //插入之后length+1
 23         if (length == array.length) {
 24             expand(this.array);
 25             array[length] = number;
 26         } else {
 27             this.array[length] = number;
 28         }
 29         length++;
 30
 31     }
 32
 33     //根据索引删除元素
 34     public void deleteByIndex(int index) throws Exception {
 35         //判断索引是否越界,即超过了有效长度
 36         //超过了,抛出异常提示
 37         //没超过就删除
 38             //首先需要将该索引之后的所有元素前移一个位置。
 39             //最后length-1
 40         if (index > length - 1 || index < 0) {
 41             throw new Exception("删除时索引越界");
 42         } else {
 43             for (int i = index; i < length; i++) {
 44                 array[i] = array[i + 1];
 45             }
 46             length--;
 47         }
 48     }
 49
 50     //根据值删除元素,删除多个
 51     public void deleteByValue(int value) throws Exception {
 52         //首先看数组中有没有这个值,没有抛异常提示
 53         boolean flag = false;
 54         for (int i = 0; i < length; i++) {
 55             if (array[i] == value) {
 56                 flag = true;
 57                 deleteByIndex(i);
 58             }
 59         }
 60         if (!flag)
 61             throw new Exception("该元素不存在");
 62         deleteOne(value);
 63
 64     }
 65
 66     //删除一个元素
 67     public void deleteOne(int value) throws Exception {
 68         boolean flag = false;
 69         for (int i = 0; i < length; i++) {
 70             if (array[i] == value) {
 71                 flag = true;
 72                 deleteByIndex(i);
 73                 break;
 74             }
 75         }
 76         if (!flag)
 77             throw new Exception("该元素不存在");
 78
 79     }
 80
 81
 82     //修改某索引对应元素的值
 83     public void update(int index, int value) throws Exception {
 84         if (index > length - 1 || index < 0) {
 85             throw new Exception("修改时索引越界");
 86         } else {
 87             array[index] = value;
 88         }
 89     }
 90
 91     //(遍历)数组的元素
 92     public void travel() {
 93         System.out.print("[");
 94         for (int i = 0; i < length; i++) {
 95             System.out.print(array[i]);
 96             if (i < length - 1)
 97                 System.out.print(",");
 98         }
 99         System.out.println("]");
100     }
101
102     //根据值查找元素,返回索引
103     public int search(int value) throws Exception {
104         int i = 0;
105         for (i = 0; i < length; i++) {
106             if (value == array[i])
107                 break;
108         }
109         if (i == length)
110             return -1;
111         return i;
112     }
113     //根据索引元素,返回值
114     public int searchByIndex(int index) throws Exception {
115         if(index<0||index>=length){
116             throw new Exception("索引越界");
117         }
118         return array[index];
119
120     }
121
122     //每次扩容后比之前大一倍
123     public void expand(int[] arr) {
124         int expandSize = arr.length * 2;
125         this.array = new int[expandSize];
126
127         for (int i = 0; i < arr.length; i++) {
128             this.array[i] = arr[i];
129         }
130     }
131
132
133 }

测试类如下:

 1 package array;
 2
 3 public class ArrayTest {
 4
 5     public static void main(String[] args) throws Exception {
 6
 7         CustomArray array=new CustomArray();
 8         array.insert(10);
 9         array.insert(9);
10         array.insert(8);
11         array.insert(4);
12         array.insert(5);
13         array.insert(6);
14         array.deleteByIndex(0);
15
16         array.travel();
17
18     }
19 }

自定义有序数组

主要功能有插入、二分查找递归版、二分查找非递归

 1 package array;
 2
 3 public class OrderArray {
 4     private int[] array = null;
 5     //数组有效长度
 6     public int length = 0;
 7
 8     public OrderArray() {
 9         this.array = new int[50];
10     }
11
12     public OrderArray(int size) {
13         this.array = new int[size];
14     }
15
16     //此处有许多细节
17     public void insert(int value) {
18
19         int i;
20         for (i = 0; i < length; i++) {
21             if (value < array[i])
22                 break;
23         }
24         for (int j = length - 1; j >=i; j--) {
25             array[j+1] = array[j];
26         }
27         array[i] = value;
28
29         length++;
30
31     }
32
33     public void travel() {
34         System.out.print("[");
35         for (int i = 0; i < length; i++) {
36             System.out.print(array[i]);
37             if (i < length - 1)
38                 System.out.print(",");
39         }
40         System.out.println("]");
41     }
42     //二分查找,返回索引
43     public int binarySearch(int value){
44         int left=0,right=length-1;
45         int mid;
46
47         while(left<=right){
48             mid=(left+right)/2;
49
50             if(value==array[mid])
51                 return mid;
52             if(value<array[mid]){
53                 right=mid-1;
54             }else{
55                 left=mid+1;
56             }
57         }
58         return -1;
59     }
60     public int binarySearchByRecursion(int value,int begin,int end){
61         int mid=(begin+end)/2;
62
63         if(array[mid]==value)
64             return mid;
65         if(begin>end)
66             return -1;
67         if(value<array[mid]){
68             end=mid-1;
69             return binarySearchByRecursion(value,begin,end);
70         }else{
71             begin=mid+1;
72             return binarySearchByRecursion(value,begin,end);
73         }
74     }
75
76
77 }

测试类:

 1 package array;
 2
 3 public class ArrayTest {
 4
 5
 6     public static void main(String[] args) throws Exception {
 7
 8         OrderArray orderArray=new OrderArray();
 9
10         orderArray.insert(9);
11         orderArray.insert(8);
12         orderArray.insert(7);
13         orderArray.insert(6);
14         orderArray.insert(5);
15         orderArray.travel();
16         System.out.println(orderArray.binarySearch(6));
17         System.out.println(orderArray.binarySearchByRecursion(6,0,orderArray.length-1));
18
19     }
20
21 }

通过以上练习可以很好的巩固基础编码能力

冰冻三尺非一日之寒,脚踏实地埋头干

原文地址:https://www.cnblogs.com/treasury/p/12594103.html

时间: 2024-10-14 06:07:37

Java实现自定义数组及其方法的相关文章

Java中的数组和方法

3.1 数组的定义和使用 数组(Array)是用来存储一组相同数据类型数据的集合.数组中的每个数据称为一个元素(element),数组可以分为一维数组,二维数组和多维数组.我们 主要讲解一维数组和二维数组. 3.1.1一维数组的声明数组变量 Java中的数组必须先声明然后再使用,Java中声明数组的方式如下: datatype[] arrayRefVar; 或者 datatype arrayRefVar[]; 例如: double[] array; 或者 double array[]; 说明:我

Java的操作数组的方法Arrays

一.toString()将数组的内容转化为字符串 1.Arrays.toString(a) 二.equals()比较两个数组的内容是否相等 2.Arrays.equals(a,b) 三.fill()将数组进行填充 //将数组的1到3(不包括3)的元素填充为5 3.Arrays.fill(a,1,3,5) 四.将数组进行排序 Arrays.sort(a) //将数组1,3(不包括3)进行排序 Arrays.sort(arr,1,3); 五.用二分法查找指定元素的index(下标) Arrays.b

Java:自定义实现equals()方法

Java:自定义实现equals()方法 以常见的自定义Date类型为例,没有经验的朋友可能会觉得直接比较年月日即可,从而写出以下的实现 public class MyDate implements Comparable<MyDate> { private final int year; private final int month; private final int day; public MyDate(int year, int month, int day) { this.year

JAVA遍历二位数组的方法

//使用方法对于二维数组进行遍历 package com; import java.util.Arrays; public class CompoundInterest { public static void main(String[] args) { // TODO Auto-generated method stub double[][] balances= new double[3][3]; for(int j = 0; j < balances[0].length; j++){ bal

Java中的自定义数组队列

在Java中,作为所有数据结构中存储和获取速度最快的一种,数组凭借其这种简单易用的优势在各个方面都能大显神威.但是数组也有自身的局限性.数组的长度必须是固定的一旦定义之后就无法动态的更改,这就会造成这样的问题,如果数组已满,就无法继续添加数据(当然你可以定义一个"足够大的数组",但问题是多大才是足够大呢?太小不够,太大浪费内存空间).如果删除一个数据,它的内存空间空着没有被使用.另外数组只能存储同一类型的数据,如果把它设置成Object类型的话,是可以存不同类型的数据了,但是设想这样一

java第五天(方法和数组)

1.方法: (1)方法调用图解 (2)代码分析 代码分析一: 1 /* 2 方法:完成特定功能的代码块. 3 4 注意:在很多语言里面有函数的定义,而在Java中函数被称为方法. 5 6 方法格式: 7 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { 8 方法体语句; 9 return 返回值; 10 } 11 详细解释: 12 修饰符:目前就用 public static.后面我们再详细的讲解其他的修饰符. 13 返回值类型:就是功能结果的数据类型. 14 方法

【Java】用JDK1.5之后的新型数组遍历方法遍历HashMap、HashMap不应该存储多元组

在JDK1.5就多了一种for循环的遍历写法,现在应该没有人用JDK1.4了吧?我见那些2005年出的JAVA书,谭浩强系列的JAVA书都是使用JDK1.5了,当然JDK1.7已经使用的,据说JDK1.7是兼容JDK1.2~JDK1.7,现在的JAVA编程都是基于JDK1.5的.然而由于考试不要求或者其它什么原因,它并不受程序猿的青睐,而在平常实践用,旧式的循环中用多了,老程序猿依旧作为开发主力的情况,也就没有人敢于尝试这种新型的数组遍历方法了,其实这种方法在遍历HashMap的时候尤其有用,能

java创建自定义类的数组

今天在学图论的最小生成树,开始一直在想是用邻接矩阵还是关联矩阵来表示图,但是发现这样都会有好多空间浪费.于是我就自定义一个边的类,里面包含了权值,关联的端点1,端点2,和图的表示字母.发现我想创建11条边,Bian[] = new Bian[11]时; 然后调用Bian[0].v一直报空指针异常,还百度了,发现有些小伙伴和我遇到一样的问题.于是仔细想了想,发现在java中,数组存放的是这个类型的对象,万物皆对象.我定义Bian[] 时里面应该要存放Bian[]类型先.例如以下程序 import

java 二维数组 方法知识整理

二维数组定义格式: 第一种:int[][] arr = new int[3][4]; 第二种:int[][] arr = new int[3][]; 第三种:int[][] arr = {{1,2},{3,4,5,6},{7,8,9}}; 二维数组元素遍历: class demo01 { public static void main(String[] args) { int[][] arr={{11,12},{21,22,23},{31,32,33,34}}; for(int i=0;i<ar