C语言是通过动态分配内存解决动态数组的。但是java中我们初始化数组必须要指定数组长度或者是指定数组的值。
这个时候有一种做法就是给数组分配一个很大的长度的数组空间,显然这样做是类似于C的解决之道。其实还有更优解。
java中的集合框架啊,其中的List集合更是解决这个问题的不二法门,我们可以先new一个ArrayList,我们把我们最不擅长的动态分配内存这个点交给框架去做就是。再说List转数组List集合的API是有提供的,即toArray()方法。这样做我们就不必关心一组输入值的长度而去考虑给它分配多大的数组空间了。
附携程水题代码:
问题描述:
第一行:n
第二行:n 个整数
第三行:m
第四行:m 个整数
输出:整合n,m个数后的数组的中位数。
/**
* Copyright: Copyright (c) 2017 Asiainfo
*
* @ClassName: BTest.java
* @Description: 试题测试
*
* @version: v1.0.0
* @author: wantu
* @date: 2017年9月21日 下午8:17:21
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2017年9月21日 wantu v1.0.0 修改原因
*/
package com.briup.test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
/**
* Copyright: Copyright (c) 2017 Asiainfo
*
* @ClassName: BTest.java
* @Description: 求合并数组的中位数
*
* @version: v1.0.0
* @author: wantu
* @date: 2017年9月21日 下午8:17:21
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2017年9月21日 wantu v1.0.0 修改原因
*/
public class BTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入N");
int n = scanner.nextInt();
//过多无用的内存了,造成大量的内存没有使用
/*String[] a = new String[999];
String[] b = new String[999];*/
List<String> a = new ArrayList<>();
List<String> b = new ArrayList<>();
String[] result = null;
for(int i=0; i < n;i++){
a.add(scanner.nextInt()+"");
}
System.out.println("输入M:");
int m = scanner.nextInt();
for(int i=0; i < m;i++){
b.add(scanner.nextInt()+"");
}
result =union(a, b);
System.out.println("合并数组长度:"+result.length+"值为:");
for(int i =0;i<result.length;i++){
System.out.println(result[i]);
}
int index = (result.length)/2;
int index2 = result.length;
int mid = (index2-1)/2;
if(result.length%2==0){
System.out.println((Integer.parseInt(result[mid])+Integer.parseInt(result[mid+1]))*1.0/2);
}else{
System.out.println(Integer.parseInt(result[(index2-1)/2]));
}
}
public static String[] union(List<String> arr1, List<String> arr2) {
Set<String> set = new HashSet<String>();
for (String str : arr1) {
set.add(str);
}
for (String str : arr2) {
set.add(str);
}
String[] result = {};
return set.toArray(result);
}
}