您当前的位置: 首页 >  Java

Charge8

暂无认证

  • 2浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java Array类和实现System.arraycopy()数组拷贝

Charge8 发布时间:2019-08-18 20:33:20 ,浏览量:2

1、Array类与Arrays类?

      Array类提供提供静态方法来动态创建和访问 Java数组的方法。

      Arrays类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。

2、Array类的方法

    • static Objectget(Object array, int index)

      返回指定数组对象中的索引组件的值。

      static voidset(Object array, int index, Object value)

      将指定数组对象的索引组件的值设置为指定的新值。

      static ObjectnewInstance(类 componentType, int... dimensions)

      创建具有指定组件类型和尺寸的新数组。

      static ObjectnewInstance(类 componentType, int length)

      创建具有指定组件类型和长度的新数组。

      static booleangetBoolean(Object array, int index)

      返回指定数组对象中的索引组件的值,如 boolean

           getXXX八大基本类型

      static voidsetBoolean(Object array, int index, boolean z)

      将指定数组对象的索引组件的值设置为指定的 boolean值。

           setXXX八大基本类型

             数组是引用数据类型,数组其实是对象。所以可以在 Array类中吧数组作为对象处理数组中的元素。

            

3、通过 反射和 Array类中的方法实现 System.arraycopy() 数组拷贝

      

       

实现Demo

public class ArrayDemo {
    public static void main(String[] args) {
        int[] src = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int[] dest = new int[10];
        System.out.println(Arrays.toString(dest)); //[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        arraycopy(src, 4, dest, 3, 5);
        System.out.println(Arrays.toString(dest)); //[0, 0, 0, 5, 6, 7, 8, 9, 0, 0]
    }

    /**
     *  实现 System类中,数组拷贝的arraycopy方法
     * @param src - 源数组
     * @param srcPos - 源数组中的起始位置。
     * @param dest - 目标数组。
     * @param destPos - 目的地数据中的起始位置。
     * @param length - 要复制的数组元素的数量。
     */
    public static void arraycopy(Object src, int srcPos, Object dest,int destPos, int length) {
        if (src == null || dest == null) {
            throw new NullPointerException("源数组和目标数组不能为空");
        }
        if (!src.getClass().isArray() || !dest.getClass().isArray()) {
            throw new ArrayStoreException("源和目标必须都是数组");
        }
        if (srcPos < 0 || destPos < 0 || srcPos + length > Array.getLength(src)
                || destPos + length > Array.getLength(dest)) {
            throw new IndexOutOfBoundsException("索引越界");
        }
        if (src.getClass().getComponentType() != dest.getClass()
                .getComponentType()) {
            throw new ArrayStoreException("源数组和目标数组类型要一致");
        }
        for (int index = srcPos ; index            
关注
打赏
1664721914
查看更多评论
0.0372s