精华内容
下载资源
问答
  • JAVA创建可变长度数组
    万次阅读
    2019-02-26 14:35:10

    Java经典编程300例 中的一个例子,感觉有点意思记录一下。

    /**
     * 可变长度数组
     */
    public class UsefulArray {
        public static Object increaseArray(Object array) {
            Class<?> clazz = array.getClass();// 获得代表数组的Class对象
            if (clazz.isArray()) {//如果输入是一个数组
                Class<?> componentType = clazz.getComponentType();//获得数组元素的类型
                int length = Array.getLength(array);//获得输入的数组的长度
                Object newArray = Array.newInstance(componentType, length + 5);//新建数组
                System.arraycopy(array, 0, newArray, 0, length);//复制原来数组中的所有数据
                return newArray;//返回新建数组
            }
            return null;//如果输入的不是数组就返回空
        }
        public static void main(String[] args) {
            int[] intArray = new int[10];
            System.out.println("整型数组原始长度是:" + intArray.length);
            Arrays.fill(intArray, 8);//将数组中的元素全部赋值为8
            System.out.println("整型数组的内容:");
            System.out.println(Arrays.toString(intArray));
            int[] newIntArray = (int[]) increaseArray(intArray);//增加数组的长度
            System.out.println("整型数组扩展后长度是:" + newIntArray.length);
            System.out.println("整型数组的内容:");
            System.out.println(Arrays.toString(newIntArray));
        }
    }
    更多相关内容
  • Java可变长度数组

    2021-04-23 17:49:24
    本篇文章帮大家学习java可变长度数组,包含了Java可变长度数组使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。Java数组声明后其长度就固定了,不能增加长度。 要创建一个可扩展的...

    本篇文章帮大家学习java可变长度数组,包含了Java可变长度数组使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。

    Java数组声明后其长度就固定了,不能增加长度。 要创建一个可扩展的数组可以使用ArrayList或Vector。ArrayList和Vector类的工作方式都是相同的,只是Vector类中的方法是同步的,而ArrayList中的方法不同步。ArrayList类仅适用于对象,不适用于原始数据类型。

    ArrayList类是一个通用类,它将其元素的类型作为类型参数。要使用原始值,请声明一个包装类 - ArrayList。 例如,使用ArrayList 来处理int类型的元素。

    示例

    以下代码片段说明了ArrayList类的使用:

    import java.util.ArrayList;

    public class Main {

    public static void main(String[] args) {

    ArrayList ids = new ArrayList<>();

    int total = ids.size(); // total will be zero

    System.out.println("ArrayList size is " + total);

    System.out.println("ArrayList elements are " + ids);

    ids.add(new Integer(10)); // Adding an Integer object.

    ids.add(20); // Autoboxing

    ids.add(30); // Autoboxing

    total = ids.size(); // total will be 3

    System.out.println("ArrayList size is " + total);

    System.out.println("ArrayList elements are " + ids);

    ids.clear();

    total = ids.size(); // total will be 0

    System.out.println("ArrayList size is " + total);

    System.out.println("ArrayList elements are " + ids);

    }

    }

    上面的代码生成以下结果。

    ArrayList size is 0

    ArrayList elements are []

    ArrayList size is 3

    ArrayList elements are [10, 20, 30]

    ArrayList size is 0

    ArrayList elements are []

    实例-2

    像数组一样,ArrayList使用基于0的索引。ArrayList的第一个元素的索引为0。以下代码说明了如何使用for循环来遍历ArrayList中的每个元素。

    import java.util.ArrayList;

    public class Main {

    public static void main(String[] args) {

    ArrayList namelist = new ArrayList();

    // Add some names

    namelist.add("A");

    namelist.add("B");

    namelist.add("C");

    // Get the count of names in the list

    int count = namelist.size();

    for (int i = 0; i < count; i++) {

    String name = namelist.get(i);

    System.out.println(name);

    }

    namelist.remove("A");

    count = namelist.size();

    for (int i = 0; i < count; i++) {

    String name = namelist.get(i);

    System.out.println(name);

    }

    }

    }

    上面的代码生成以下结果。

    A

    B

    C

    B

    C

    将ArrayList/Vector转换为数组

    ArrayList类有一个名为toArray()的重载方法:

    Object[] toArray( )

    T[] toArray(T[ ] a)

    第一个方法返回ArrayList的元素作为Object的数组。第二种方法将任何类型的数组作为参数。

    以下代码显示了如何将ArrayList转换为数组。

    import java.util.ArrayList;

    import java.util.Arrays;

    public class Main {

    public static void main(String[] args) {

    ArrayList al = new ArrayList();

    al.add("Java");

    al.add("SQL");

    al.add("Data");

    System.out.println("ArrayList:" + al);

    String[] s1 = new String[al.size()];

    String[] s2 = al.toArray(s1);

    System.out.println("s1 == s2:" + (s1 == s2));

    System.out.println("s1:" + Arrays.toString(s1));

    System.out.println("s2:" + Arrays.toString(s2));

    s1 = new String[1];

    s1[0] = "hello"; // Store hello in first element

    s2 = al.toArray(s1);

    System.out.println("s1 == s2:" + (s1 == s2));

    System.out.println("s1:" + Arrays.toString(s1));

    System.out.println("s2:" + Arrays.toString(s2));

    }

    }

    上面的代码生成以下结果。

    ArrayList:[Java, SQL, Data]

    s1 == s2:true

    s1:[Java, SQL, Data]

    s2:[Java, SQL, Data]

    s1 == s2:false

    s1:[hello]

    s2:[Java, SQL, Data]

    展开全文
  • Java可变数组概述

    2022-02-28 13:36:00
    有时我们希望将把数据保存在单个连续的数组中,以便快速、便捷地访问数据,但这需要调整数组大小或者对其扩展。Java 数组不能调整大小,只用数组不足以达成目标。可变长原始类型数组需要自己实现。

     有时我们希望将把数据保存在单个连续的数组中,以便快速、便捷地访问数据,但这需要调整数组大小或者对其扩展。Java 数组不能调整大小,只用数组不足以达成目标。可变长原始类型数组需要自己实现。本文将展示如何实现 Java 可变长数组。

      为什么不用 ArrayList?

      要满足文章开头的需求,为什么不使用 Java ArrayList?如果满足下面条件之一,可以使用 ArrayList:

      在数组中存储某种对象类型;

      在数组中存储原始类型,没有特别的性能或内存要求。

      Java ArrayList 类只适用于对象,不适合原始类型(byte、int、long等)。使用 ArrayList 存储原始类型数据,插入 ArrayList 时会自动装箱为对象中,从中取出时会进行拆箱转为原始类型。装箱和拆箱在插入元素和访问元素时会带来额外开销,在尝试针对性能进行优化时,应该避免这些开销(本文是 Java 性能跟踪的一部分)。

      不仅如此,这种方式无法确定自动装箱对象在内存中的存储位置。很可能分散存储在堆中各个位置。因此,与原始类型数组相比访问速度要慢得多,前者在内存中连续存储。

      另外,原始类型装箱会带来额外的内存开销,例如 long 会存到 Long 对象。

    感兴趣的小伙伴可以观看学习下方视频进行学习。Java开发扫雷游戏项目_1小时做出java扫雷小游戏_java小游戏_Java游戏开发_Java练手项目_java项目实战_java初级项目icon-default.png?t=M1L8https://www.bilibili.com/video/BV1uZ4y1C7R1/

      本文源代码

      本文实现的 Java 变长数组源代码可以在 GitHub 下载:

      github.com/jjenkov/java-resizable-array

      代码包含三个 Java 类和两个单元测试。

      可变长数组用例

      假设有一台服务器接收大小不同的邮件。其中有些邮件很小(小于4KB),另一些很大(1MB 甚至更大)。

      如果服务器同时从多个(10万多个)连接接收消息,那么需要为每个消息限制预分配内存。每个缓冲区不能只按最大值(1MB或16MB)分配内存。当连接和消息数量增加时,这种方式会快速耗尽服务器内存!100_000 x 1MB = 100GB(这是估计值,帮助问题理解)。

      假设大多数消息比较小,一开始可以使用较小的缓冲区。如果消息超出缓存大小,则分配一个更大的新数组,并把数据拷贝到该数组中。如果消息超出分配的新数组,接着分配一个比之前更大的数组,并把消息复制到该数组。

      使用这种策略,大多数消息通常只会存入小数组。这意味着服务器内存得到了更有效的利用。100_000 x 4KB (小缓冲) = 400MB大多数服务器应该能够正常处理。即使是 4GB (1_000_000 x 4KB),现在的服务器也能满足要求。

      可变长数组设计

      可变长数组包含两个组件:

      ResizableArray

      ResizableArrayBuffer

      ResizableArrayBuffer 包含一个大数组。该数组被划分为三个部分。一段用作小数组,一段用作中数组,一段用作大数组。ResizableArray类表示一个可变长数组,底层数据存储在ResizableArrayBuffer中。

      通过为小、中、大不同类型数据预留空间,ResizableArrayBuffer 能够确保不会被某种大小的数据塞满。例如,小数据不会占用数组的所有内存,进而阻断中型和大数据存储。同样,接收大数据也不会占用所有内存,进而阻断小数据和中型数据存储。

      由于底层存储以小数据开始,如果小数组存储空间耗尽,那么无论中数组或大数组是否还有空间,都无法分配新的数组。可以让使小数组足够大,减小发生这种情况的可能性。

      即使小数组已经全部用完,仍然可以把小数据变成中型和大型数据。

      优化方案

      一种优化方案:只用一个存储块。需要的时候在待扩展的块后面直接分配新块。这样不需要把数据从旧数组拷贝到新数组,可以直接“扩展”存储块容纳旧数据和新数据,新数据直接写入新增的第二个扩展块即可。这样避免了拷贝所有数组数据的情况。

      上述优化的缺点在于,如果无法扩展下一个内存块仍然需要拷贝数据。因此需要加入“可扩展”检查,这个操作开销不大。此外,如果存储块大小设置过小,在小数据、中等数据和大数据都存在的情况下会出现频繁扩展。

    最后推荐正在学习java的小伙伴观看下方视频进行学习

    飞机大战2.0加强版_Java飞机大战小游戏_java游戏开发实战_Java练手项目_java小游戏_java初级练手项目 icon-default.png?t=M1L8https://www.bilibili.com/video/BV1DF411E7Jd/

    展开全文
  • 用法和普通的数组一模一样,只是传参不一样而已。

    用法和普通的数组一模一样,只是传参不一样而已。

    展开全文
  • Java可变数组,看这篇就对了!

    千次阅读 2020-03-13 09:28:23
    本文将展示如何实现 Java 可变数组。 为什么不用 ArrayList? 要满足文章开头的需求,为什么不使用 Java ArrayList?如果满足下面条件之一,可以使用 ArrayList: 在数组中存储某种对象类型; 在数组中存储原始...
  • 主要介绍了Java数组传递及可变参数操作,结合实例形式详细分析了java数组参数传递与可变参数相关使用技巧,需要的朋友可以参考下
  • 于是就出现了数组,虽然数组让操作存在了一定的通用性,方便程度也远远高于单一变量的操作,但是数组操作通常都是需要程序员自己定义完成一大堆方法,并且数据类型的单一性,数组容量的确定性,都限制了数组的便捷...
  • 主要介绍了Java可变长度参数代码详解,涉及了实参个数可变的定义方法,数组包裹实参等几个问题,具有一定参考价值,需要的朋友可以了解下。
  • 来自:ImportNew/覃佑桦 | 责编:乐乐 链接:tutorials.jenkov.com/java-performance/resizable-array.html 有时我们希望将把数据保存在单个连续的...可变长原始类型数组需要自己实现。本文将展示如何实现 Java 可...
  • // 解决数组长度可变的问题 // 因为数组在定义的时候已经给定了长度,所以如果有新的元素加入,数组的本身已经放不下了 // 这时候就需要重新将原数组的元素拿出来重新定义数组,将旧元素和新元素重新赋值给新的...
  • Java可变参数列表详解

    2020-08-30 13:05:18
    主要介绍了Java可变参数列表详解的相关资料,需要的朋友可以参考下
  • Java实现可变数组

    千次阅读 2020-07-25 11:13:04
    4,设置一个成员属性,记住当前空间已有的长度 代码如下: package test0724.demo1; import java.util.Arrays; import java.util.Scanner; /** * 变数组 * 1,默认初始化10个空间 * 2,每次插入数据,判定空间是否...
  • Java任意长度byte数组怎么转换为int数组发布时间:2020-07-27 14:00:33来源:亿速云阅读:87作者:小猪这篇文章主要讲解了Java任意长度byte数组怎么转换为int数组,内容清晰明了,对此有兴趣的小伙伴可以学习一下,...
  • 自定义byte数组可变长度,轻量高效,解决集合存储简单数据的包装问题,自增缓存减少运算,方便多次调用,非线程同步
  • java数组长度可变

    2021-03-16 00:26:24
    Java数组练习题(带答案)_IT... 2) 数组复制时,"......Java 数组练习题(带答案) 一 填空题 1) 数组的元素通过 下标 来访问,数组 Array 的长度为 Array、length 。 2) 数组复制时,=将一个数组的 引用 传递给另........
  • Java实现长度可变数组

    万次阅读 2018-05-13 10:29:58
    思路:既然数组长度可变,那么我们可以创建一个长度与原数组不同的新数组,让原数组变量指向新数组,从而实现长度可变(新数组如果没有使用,那么就会被java垃圾回收机制回收销毁,从而不浪费内存空间。...
  • Java 读取简单的数字阵列,比如212 33 5512 33 5551 23 5588 955 77981 23 5588 955 77980红色的是输入,黑色的为输出,各个数字之间用空格隔开,开头单独一行表示二维数组的行数,最后的0,表示结束。这个可以用来...
  • } 以下是相关的bytesToHex函数(重构为与任何byte[]输入一起使用,即开即用...) public static String bytesToHex(byte[] bytes) { String tempStr = ""; tempStr = DatatypeConverter.printHexBinary(bytes); ...
  • 我们知道二维数组,是在一维数组的基础上进行了维度的增加。那么在实际使用的过程中,有时候我们所需要的二维...声明二维数组的时候可以只指定第一维大小,空缺出第二维大小,之后再指定不同长度数组。但是注意,...
  • java 可变长度参数

    2021-02-28 08:53:54
    Java中的可变长度形式参数格式public static void add(int...a){}借助此例子介绍特点:(1)可以接收相应类型任意个数的实参,实参也可以是数组(2)当代码中有其他形参时,可变长度的形参要放在形参列表的末尾...
  • 如何在java中创建数组

    千次阅读 2019-04-22 16:58:42
    java中我们都知道创建简单数组较为简单,和C很相似。如下是创建1、2、3维数组的代码。 int [] array = new int[5]; int [][] array = new int[5][5]; int [][][] array = new int[5][5][5]; 但是作为传统数组都...
  • 如何自定义一个长度可变数组

    千次阅读 2021-03-08 03:22:13
    摘要:本文主要写了如何自定义一个长度可变数组数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式在定义之初,数组长度就被定义新建数组有很多方式 下面两个都可以 但...
  • 创建长度可变数组

    2019-09-29 07:19:34
     Java中对于数组的支持并不强大。程序员必须时刻注意数组中元素的个数,否则会出现数组下表越界异常。因此才在API中定义了ArrayList帮助开发,但这意味着需要学习新的方法。本实例将使用反射机制实现一个工具方法,...
  • 一.在介绍一个字符串缓冲区的小插曲。new了一个StringBuffer,就是相当于一个长度为16的数组,如果装入第个字17符怎么办呢?给大家介绍一下可变程度数组,说...多出来的字符就输入增加的后半段中,这就叫做可变长度...
  • java中的可变数组

    万次阅读 2017-09-13 10:21:24
    本文转自:... Java 可变长度数组 由 lala100 创建,最后一次修改 2017-01-09 ...Java数据类型教程 - Java可变长度数组 Java数组不能增长。为了创建一个可扩展的数组,我们可以使用ArrayList或V
  • 可变数组和字典树

    2018-09-27 08:43:09
    可变数组和字典树Java代码实现。比较容易复制和学习。
  • java中关于数组长度

    千次阅读 2020-07-07 15:51:18
    数组一旦创建,程序运行期间,长度改变 代码展示 public static void main(String[] args) { int[] arrayA=new int[3]; int[] arrayB={1,2,3,4,5,6,7,8,9,0,2,3,3,4,4,55}; int len=arrayB.length; System...
  • Java自定义长度可变数组的操作

    千次阅读 2021-02-26 19:38:36
    长度可变数组是要将这个长度打破,实现数组数据无限增加那么定义长度可变数组就可以用两个数组来实现数组长度的变化。为了避免每次增加数据或删除数据时都要重新开辟空间,我先设定原数组为固定长,在当数组放...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,939
精华内容 57,175
关键字:

java可变长度数组

java 订阅