递归调用,数组强制类型转换

题目,给出一个数组,将这个数组按最大、最小、次大、次小、这样依次打印出来。

 

 

 

	public static void printVector(Integer[] lists){//若写成int[] lists则转化成Integer[]的调用编译不通过
		if(lists.length==0){
			return;
		}
		
		int max=lists[0];
		int min=lists[0];
		
		for(int i=0;i<lists.length;i++){
			if(lists[i]>max)max=lists[i];
			if(lists[i]<min)min = lists[i];
		}
		
		if(max==min){
			System.out.println(max);
		}else{
			System.out.println(max);
			System.out.println(min);
		}
		
		List ll = new ArrayList();
		for(int i=0;i<lists.length;i++){
			if(lists[i]==max||lists[i]==min){
				continue;
			}
			ll.add(lists[i]);
		}
		printVector((Integer[])ll.toArray(new Integer[0]));//注意new Integer[0]用法
	}

 ArrayList类扩展AbstractList并执行List接口。ArrayList支持可随需要而增长的动态数组。

    ArrayList有如下的构造函数:
  
        ArrayList( )
        ArrayList(Collection c)
        ArrayList(int capacity)

如果调用new ArrayList()构造时,其默认的capacity(初始容量)为10。

参见ArrayList源码,其中是这样定义的:

    public ArrayList() {
  this(10);
     }

默认初始化内部数组大小为10。为什么是10?不知道。可能SUN觉得这样比较爽吧。

程序编译后执行ArrayList.toArray(),把ArrayList转化为数组时,该数组大小仍为capacity(为10)。

当装入的数据和capacity值不等时(小于capacity),比如只装入了5个数据,数组中后面的(capacity - size)个对象将置为null,此时当数组强制类型转换时,容易出现一些问题,如java.lang.ClassCastException异常等。

解决办法是:在用ArrayList转化为数组装数据后,使用trimToSize()重新设置数组的真实大小。

 

如果这个数组a足够大,就会把数据全放进去,返回的数组也是指向这个数组,(数组多余的空间存储的是null对象);要是不够大,就申请一个跟参数同样类型的数组,把值放进去,然后返回。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值