Java自定义数组列表的实现操作

主要目的:

解决ArrayList 类不能改变大小的问题,主要实现数组列表动态调整大小。

1、数组类型如何选择?由于我们不清楚数组中具体存入什么类型的数据, 我们可以声明一个对象Object [ ] ,这样,数组列表就可以存储任何类型的数据了。

2、泛型<> :如果定义的一个类或接口有一个或多个类型变量,则可以使用泛型。

ArrayList<String>本身就是泛型,各种类型的变量都可以组装成对应的List,而不必针对每个类型分别实现一个构建ArrayList的类。

泛型字母所代表含义:

E表示集合的元素类型,

K 和 V分别表示表的关键字与值的类型 *

T(需要时还可以用临近的字母 U 和 S)表示“任意类型”

3、实现功能:我们主要实现arraylist的基本的增,删,改,等功能。

核心思路:主要根据所需求大小进行调整,需要创建一个新的数组,将老数组值赋予新数组再进行详细的变动。

package com.customArray0905;
public class CustomArraryList<E> {
 Object[] data;
 int Size;

 public int getSize() {
  return Size;
 }

 //返回数组下标为index的元素的值
 public E get(int index) {
  if(index<0 || index>=Size) {
   throw new IndexOutOfBoundsException();
   //否则return null
  }
  return (E) data[index];
 }

 //自定义更改下标为index的元素值的方法
 public void set(int index, E e) {
  if(index<0 || index>=Size) {
   throw new IndexOutOfBoundsException();
   //否则return null
  }
  data[index] = e;
 }

 public void add(E e) {
  ///创建新对象 容量扩大一个
  Object[] newdata = new Object[Size + 1];
  //将array中的元素重新存入更新容量后的newArray数组中去
  for (int i = 0; i < Size; i++) {
   newdata[i] = data[i];
  }
  data = newdata;
  data[Size++] = e;
 }
 //自定义移除下标为index的元素的方法
 public void remove(int index) {
  ///创建新对象 容量减少一个
  Object[] newdata = new Object[Size - 1];
  int j = 0;

  //判断index大小是否合适存在数组中
  if(index<0 || index>=Size) {
   throw new IndexOutOfBoundsException();
   //否则return null
  }
   //得到老对象里下标之前的所有元素并存入新对象
   for (int i = 0; i < index; i++) {
    newdata[j] = data[i];
    j++;
   }
   //得到老对象里下标之后的所有元素并存入新对象
   for (int i = index + 1; i < Size; i++) {
    newdata[j] = data[i];
    j++;
   }
   data = newdata;
   Size--;
 }
 //清除array中所有的元素
 public void clear() {
  for(int i = 0;i<Size;i++) {
   data[i] = null;
  }
  Size = 0;
 }

 public static void main(String[] args) {
  CustomArraryList<String> myList = new CustomArraryList<>();
  //Add
  System.out.println("测试1,ADD方法");
  myList.add("1");
  myList.add("2");
  myList.add("3");
  myList.add("4");
  myList.add("5");
  for (int i = 0; i < myList.getSize(); i++) {
   System.out.println(myList.get(i));
  }

  //Remove,Set
  myList.remove(2);
  myList.set(3, "7");
  System.out.println("测试2,移除index=2的数据,并设置index=3的数据值为7,");
  for (int i = 0; i < myList.getSize(); i++) {
   System.out.println(myList.get(i));
  }

  //Clear
  myList.clear();
  myList.add("1");
  for (int i = 0; i < myList.getSize(); i++) {
   System.out.println("测试3,clear方法,仅剩下新添加数据 "+myList.get(i));
  }
  //抛出错误
  System.out.println("测试4,抛出set错误");
  myList.set(2,"2");

 }
}

测试结果:

补充知识:java Arrays快速打印数组的数据元素列表

1、Arrays.toString

用来快速打印一维数组的数据元素列表

2、Arrays.deepToString 快速打印一个二维数组的数据元素列表

public static strictfp void main(String[] args) {

 String[][] arr = {{"aaa","bbb"},{"ccc"}};
 for(int x=0;x<arr.length;x++){
  for(int y=0;y<arr[x].length;y++){
  System.out.println(arr[x][y]);
  }
 }

 //Arrays.deepToString 快速打印一个二维数组的数据元素列表
 System.out.println(Arrays.deepToString(arr));
 }

以上这篇Java自定义数组列表的实现操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java任意长度byte数组转换为int数组的方法

    前言 嗯.最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了.撒花. Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些.这里简单说明一下byte数组和int的转换吧. 总所周知,int类型数据在Java中占据32 bit,byte占据8 bit,这样的话,正常情况下4个byte可以转换成一个int类型数据. 当然,不正常情况下,3个byte或者2个byte甚至1个byte都可以转换为int数据,只需要高位补上就行.

  • java8新特性 stream流的方式遍历集合和数组操作

    前言: 在没有接触java8的时候,我们遍历一个集合都是用循环的方式,从第一条数据遍历到最后一条数据,现在思考一个问题,为什么要使用循环,因为要进行遍历,但是遍历不是唯一的方式,遍历是指每一个元素逐一进行处理(目的),而并不是从第一个到最后一个顺次处理的循环,前者是目的,后者是方式. 所以为了让遍历的方式更加优雅,出现了流(stream)! 1.流的目的在于强掉做什么 假设一个案例:将集合A根据条件1过滤为子集B,然后根据条件2过滤为子集C 在没有引入流之前我们的做法可能为: public cl

  • java实现列表、集合与数组之间转化的方法

    本文实例讲述了java实现列表.集合与数组之间转化的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package test;  import java.util.ArrayList;  import java.util.Arrays;  import java.util.HashSet;  import java.util.List;  import java.util.Set;  public class Test2 {      public static void

  • JAVA对象和字节数组互转操作

    0x01 创建要转换的类和主函数 注意这里一定要实现序列化 package day1; import java.io.Serializable; public class Test360 implements Serializable { @Override public String toString() { return "Test360{" + "name='" + name + '\'' + '}'; } String name="test&quo

  • Java数组的声明与创建示例详解

    今天在刷Java题的时候,写惯了C++发现忘记了Java数组的操作,遂把以前写的文章发出来温习一下. 首先,数组有几种创建方式? Java程序中的数组必须先进行初始化才可以使用,所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值,而在Java中,数组是静态的,数组一旦初始化,长度便已经确定,不能再随意更改. 声明数组变量 首先必须声明数组变量,才能在程序中使用数组.下面是声明数组变量的语法: dataType[] arrayRefVar; // 首选的方法 或 dataTy

  • Java自定义数组列表的实现操作

    主要目的: 解决ArrayList 类不能改变大小的问题,主要实现数组列表动态调整大小. 1.数组类型如何选择?由于我们不清楚数组中具体存入什么类型的数据, 我们可以声明一个对象Object [ ] ,这样,数组列表就可以存储任何类型的数据了. 2.泛型<> :如果定义的一个类或接口有一个或多个类型变量,则可以使用泛型. ArrayList<String>本身就是泛型,各种类型的变量都可以组装成对应的List,而不必针对每个类型分别实现一个构建ArrayList的类. 泛型字母所代

  • 数组实现Java 自定义Queue队列及应用操作

    数组实现Java 自定义Queue队列及应用 Java 自定义队列Queue: 队列的抽象数据类型就是一个容器,其中的对象排成一个序列,我们只能访问和取出排在最前端( Front)的对象,只能在队列的尾部( Rear)插入新对象. 正是按照这一规则,才能保证最先被插入的对象首先被删除( FIFO). java本身是有自带Queue类包,为了达到学习目的已经更好深入了解Queue队列,自己动手自建java Queue类是个很好的学习开始: 基于数组的实现 „ 顺序数组 借助一个定长数组 Q 来存放

  • Java实现的数组去重与排序操作详解

    本文实例讲述了Java实现的数组去重与排序操作.分享给大家供大家参考,具体如下: 这里演示Java实现数组去重.排序操作 文中的示例源码编写基于Jdk1.6+.junit4.8.2 java.util.Arrays.sort() 支持对int[],long[],short[],char[],byte[],float[],double[],Object[]进行排序 参考示例代码片段如下 // 声明int 数组,并初始化 int[] intArry = {5,4,7,8,2,0,1,9,3,6,10

  • Java自定义长度可变数组的操作

    我们都知道数组是线性的.类型固定.内存地址连续.定长的,主要是数组一旦被定义,那么它的长度也就定下来了,只能添加有限的数据.而长度可变的数组是要将这个长度打破,实现数组数据无限增加 那么定义长度可变的数组就可以用两个数组来实现数组长度的变化.为了避免每次增加数据或删除数据时都要重新开辟空间,我先设定原数组为固定长,在当数组放满时,一次增加一定的长度,这样 节省了开辟空间的时间 因为数组里的数据类型是不确定的,所以用泛型比较好 public class MyList<E> { private i

  • Java封装数组实现在数组中查询元素和修改元素操作示例

    本文实例讲述了Java封装数组实现在数组中查询元素和修改元素操作.分享给大家供大家参考,具体如下: 前言:在上一小节中,我们已经对如何往数组中添加一个元素的方法进行了编写,此节中我们就如何查询出数组中元素与修改元素的方法进行编写. 在数组中,数据是存储在私有变量data中的,若我们想知道打印输出一些关于data中数据相关信息,我们可以使用toString()方法,在java中,该方法需要每个类自定义重写实现,针对该类,自定义如下: @Override public String toString

  • Java封装数组实现包含、搜索和删除元素操作详解

    本文实例讲述了Java封装数组实现包含.搜索和删除元素操作.分享给大家供大家参考,具体如下: 前言:在上一小节中我们已经会了如何获取和如何修改数组中的元素,在本小节中我们将继续学习如何判断某个元素是否在数组中存在.查询出某个元素在数组中的位置.以及删除数组中元素等方法的编写. 1.查找数组中是否包含元素e,返回true或false //查找数组中是否包含元素e public boolean contains(int e) { for (int i = 0; i < size; i++) { if

  • Java封装数组之改进为泛型数组操作详解

    本文实例讲述了Java封装数组之改进为泛型数组操作.分享给大家供大家参考,具体如下: 前言:通过上一节我们对我们需要封装的数组,进行了基本的增删改查的封装,但只局限于int类型的操作,为了能提供多种类型数组的操作,我们可以将其进一步封装为泛型数组. 1.定义泛型数组相关概念 (1)泛型数组让我们可以存放任何数据类型 (2)存放的类型不可以是基本数据类型,只能是类对象 基本类型: boolean.byte.char.short.int.long.float.double (3)每个基本数据类型都有

  • Java动态数组Arraylist存放自定义数据类型方式

    目录 Java动态数组Arraylist存放自定义数据类型 自定义一个动态数组ArrayList,加深对动态数组的理解 Java动态数组Arraylist存放自定义数据类型 class Point { int x; int y; public Point(int x,int y) { this.x=x; this.y=y; } } public class Test { public static void main(String[] args) { // TODO Auto-generated

  • java数组的初始化及操作详解

    数组的基本概念 如果说现在要求你定义100个整型变量,那么如果按照之前的做法,可能现在定义的的结构如下: int i1, i2, i3, ... i100; 但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你要编写System.out.println()语句100次. 其实所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作.数组本身属于引用数据类型,那么既然是引

  • Java滚动数组计算编辑距离操作示例

    本文实例讲述了Java滚动数组计算编辑距离操作.分享给大家供大家参考,具体如下: 编辑距离(Edit Distance),也称Levenshtein距离,是指由一个字符串转换为另一个字符串所需的最少编辑次数. 下面的代码摘自org.apache.commons.lang.StringUtils 用法示例: StringUtils.getLevenshteinDistance(null, *) = IllegalArgumentException StringUtils.getLevenshtei

随机推荐