通过反射修改已有数组的大小

import java.lang.reflect.Array;

public class ChangeArrayDemo {
    public static void main(String[] args) {
        int temp[] = { 1, 2, 3 };
        int newTemp[] = (int[]) arrayInc(temp, 5);
        print(newTemp);
        System.out.println("\n=============================");
        String t[] = { "von", "mldn", "java" };
        String nt[] = (String[]) arrayInc(t, 8);
        print(nt);
    }

    public static Object arrayInc(Object obj, int len) {
        Class<?> c = obj.getClass();
        Class<?> arr = c.getComponentType();
        Object newO = Array.newInstance(arr, len);
        int co = Array.getLength(obj);
        System.arraycopy(obj, 0, newO, 0, co);
        return newO;
    }

    public static void print(Object obj) {
        Class<?> c = obj.getClass();
        if (!c.isArray()) {
            return;
        }
        Class<?> arr = c.getComponentType();
        System.out.println(arr.getName() + "Array‘s length is:"
                + Array.getLength(obj));
        for (int i = 0; i < Array.getLength(obj); i++) {
            System.out.print(Array.get(obj, i) + ",");
        }
    }
}

时间: 2024-08-14 11:39:25

通过反射修改已有数组的大小的相关文章

一道 Java 方法传值面试题——Java方法传值的值传递概念和效果 + Integer 缓存机制 + 反射修改 private final 域

原题代码如下: 1 public void test1() { 2 int a = 1, b = 2; 3 System.out.println("before: a=" + a + ", b=" + b); 4 swap1(a, b); 5 System.out.println("after: a=" + a + ", b=" + b); 6 } 7 8 private void swap1(int i1, int i2)

VC++中出现stack overflow错误时修改VC++的默认堆栈大小

VC++中,在栈空间上申请存储的结构体或者类对象的数组空间时,如果数组长度过大,造成申请的栈空间超过或者逼近1MB时,程序可以编译通过,但是不能够执行起来.打到调试模式时会弹出如下图所示的栈空间越界错误对话框. 如下面的类定义: class Character { public: Character() { x0 = 0; y0 = 0; x1 = 0; y1 = 0; offsetX = 0; offsetY = 0; } unsigned int x0:10; unsigned int y0

算法学习(3)----求数组中大小最接近的两个元素的差

<算法设计与分析基础>习题1.2 第 9 题如下: 考虑下面这个算法,它求的是数值数组中大小最接近的两个元素的差. 算法: MinDistance(A[0..n-1]) //输入:数字数组 A[0..n-1] //输出:数组中两个大小相差最少的元素的差值 dmin <- ∞ for i <- 0 to n-1 do for j <- 0 to n-1 do if i≠j and |A[[i]-A[j]| < dmin dmin <- |A[i]-A[j]| ret

LeetCode第[88]题(Java):Merge Sorted Array(合并已排序数组)

题目:合并已排序数组 难度:Easy 题目内容: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. 翻译: 给定两个排序的整数数组nums1和nums2,将nums2合并到nums1中作为一个排序数组. 注意: nums1和nums2中初始化的元素数量分别为m和n. nums1有足够的空间(大小大于或等于m+n)来容纳nums2中的额外元素. 我的思路:此处和归

java 利用反射修改对象中的list类型字段中的值。

这两天没事学习下了反射.通过反射我们可以修改对象中的字段的值. 就如下面这段代码 Grade grade=new Grade(); Field f=Grade.class.getDeclaredField("name"); f.setAccessible(true); f.set(grade, "三年级一班"); 这是so easy的,这时我想到了要是list类型的字段该怎么通过反射修改呢. 于是我就尝试了下,最终做了出来. 先准备两个类. public class

C++面试题5:建议在函数里面不要用sizeof算数组的大小

C++面试题5:建议在函数里面不要用sizeof算数组的大小 #include <iostream>using namespace::std; void foo(const int[]); int main() { int arr[3] = {1,2,3}; cout<<"in main array size: "<<sizeof(arr)/sizeof(int)<<endl; foo(arr); } void foo(const int

leetcode 题解:Search in Rotated Sorted Array II (旋转已排序数组查找2)

题目: Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. 说明: 1)和1比只是有重复的数字,整体仍采用二分查找 2)方法二 : 实现:  

linux查看修改线程默认栈空间大小(ulimit -s)

linux查看修改线程默认栈空间大小 ulimit -s 1.通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M 2.通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M 3.可以在/etc/rc.local 内 加入 ulimit -s 102400 则可以开机就设置栈空间大小 4.在/etc/security/limits.conf 中也可以改变栈空间大小: #<domain> &l

js对数组元素大小排序实例代码

js对数组元素大小排序实例代码:在实际应用中,有时候需要对数组中的元素按照大小来进行排序,当然是先排序的方法有多种,比如使用数组对象自带的sort()方法,本章节再来分享一种其他的方式,先看代码实例: var org=[5,4,3,2,1,6,7,9,8,10]; var tempArr=new Array(); for(var i=0;i<org.length;i++) { if(i==0) { tempArr[0]=org[0]; //把第一个元素放到新序列 } else { for(var