`
feiniao2029
  • 浏览: 22340 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

SUN 
阅读更多

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

 

 

 

	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对象);要是不够大,就申请一个跟参数同样类型的数组,把值放进去,然后返回。

 

 

分享到:
评论

相关推荐

    php简单对象与数组的转换函数代码(php多层数组和对象的转换)

    然而,需要注意的是,简单的 `(array)` 和 `(object)` 类型转换操作只能处理单层的数据结构。对于嵌套的数组和对象,它们就无法胜任。另外,虽然`json_decode(json_encode($object))` 可以实现对象到数组的转换,但...

    PHP数组与对象之间使用递归实现转换的方法

    如果元素是数组或对象,它会递归地调用`arrayToObject`函数,确保多层嵌套的数据也能正确转换。最后,整个数组会被转换成一个对象。 相反,将对象转换为数组,我们可以使用`objectToArray`函数: ```php function ...

    java代码-数组类转换

    这里我们使用了强制类型转换 `(Integer)` 来将Object转换为Integer,然后调用 `intValue()` 方法获取int值。 3. 使用`Arrays.copyOf()`方法: Java的`java.util.Arrays`类提供了一个便捷的方法`copyOf()`,可以用于...

    高通笔试题--嵌入式C开发人员的最好的0x10道笔试题详细解析.docx

    本节知识点详细解析高通笔试题中的10道笔试题,涵盖嵌入式C开发人员所需的各种知识点,包括volatile关键字、类型转换、递归调用、指针、多维数组、逗号表达式、指针数组、函数指针和自加操作等。 题目1:volatile...

    全国高等学校计算机水平考试Ⅱ级―《C++程序设计》考试大纲(试行).pdf

    * 掌握C++的自动类型转换和强制类型转换 主要考点包括数据类型的种类、各种数据类型的定义方法、运算符的种类、运算符优先级和结合性、不同类型数据间的转换与运算等。 2. 基本语句 * 了解C语句的概念及种类 * ...

    Java程序练习100题

    * 使用强制类型转换来转换数据类型 * 使用 `float` 类型来表示浮点数 * 使用 `String` 类型来表示字符串 ### 5. 输入输出操作 * 使用 `System.out.println()` 来输出结果 * 使用 `System.in.read()` 来读取用户...

    继续教育本科c语言程序设计.doc

    15. 强制类型转换:强制类型转换运算的优先级高于算术运算,如第25题。 16. 调试:C源程序的调试包括查错和排错,如第28题。 17. 递归调用:函数可以调用自身,这是递归调用,如第29题的B选项。 18. 常量:在...

    第六章异常处理、递归和单体程序设计

    常见的运行时异常包括数组下标越界、类型转换错误、空指针异常、除以零等。 在递归方法设计中,一个方法直接或间接调用自身来解决问题。递归方法需要一个明确的终止条件,以避免无限递归导致的栈溢出错误。设计递归...

    c++试题 绝对经典c++试题 绝对经典

    在第二个程序中,我们可以看到强制类型转换的使用。变量b和c都是浮点型变量,而变量a1和a2都是整型变量。程序使用强制类型转换将浮点型变量转换为整型变量。 知识点: * 强制类型转换 * 类型转换的规则 3. 赋值...

    新大纲_《C++程序设计》考试大纲及样题

    * 掌握C++的自动类型转换和强制类型转换 * 主要考点:数据类型的种类、各种数据类型的定义方法、运算符的种类、运算符优先级和结合性、不同类型数据间的转换与运算 ㈡ 基本语句 * 了解C语句的概念及种类 * 掌握...

    上海市高等学校计算机等级考试二级C程序设计考试大纲.pdf

    3. 运算符与表达式:理解运算符的种类、功能、优先级和结合性,掌握不同类型的数据混合运算规则,理解隐式类型转换和强制类型转换。 4. 语句结构:熟练使用定义、表达式、空、复合、选择、循环、转移语句,理解它们...

    广东计算机水平考试二级《C++程序设计》考试大纲及样题

    * 掌握C++的自动类型转换和强制类型转换 主要考点: * 数据类型的种类 * 各种数据类型的定义方法 * 运算符的种类 * 运算符优先级和结合性 * 不同类型数据间的转换与运算 ㈡ 基本语句 * 了解C语句的概念及种类...

    2022年武汉理工大学继续教育本科语言程序设计资料.doc

    25. **类型转换和运算符优先级**:强制类型转换优先级高于算术运算。 26. **表达式**:`a=a+1`是正确的赋值表达式,等价于`a = a + 1;`。 27. **表达式**:`a=b=c=5;`可以一次完成多个赋值。 28. **源程序调试**...

    华南理工大学《C++》期末考试复习试卷资料.pdf

    6. 数据类型转换:包括隐式类型转换和显式类型转换(强制类型转换)的操作,例如将浮点型数值赋值给整型变量时可能发生的转换。 7. 数组操作:理解一维和二维数组的声明、初始化以及访问数组元素的方法。包括使用...

Global site tag (gtag.js) - Google Analytics