题目描述
给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。
输入描述:
每组输入数据分为三行,第一行有两个数字n,m(0 ≤ n,m ≤ 10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。
输出描述:
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。
示例1
输入
3 3 1 3 5 2 4 6
输出
1 2 3 4 5 6
整体来说这道题并不是很难,直接使用TreeSet存储数据即可,但是,最后的格式要求输出最后一个位置不能有空格。所以需要复制到String。我开始使用的是String,一直提示超出空间限制,因为String每次改变的时候,原来保存的内容不变,是开辟了新的空间,所以比较占内存。这才是重点呀,还是比较看重基础的。所以可以使用StringBulider或者StringBuffer。前者是线程不安全的,单线程的情况下效率高,后者是线程安全的,多在多线程下使用。
注意的重点:String每次改变是开辟了新的空间。占内存,操作数比较小的时候用String,单线程大数据用StringBuilder,多线程用StringBuffer。
下面是完整代码:
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
private static Scanner scanner= new Scanner(System.in);
public static void main(String[] args) {
int n = scanner.nextInt();
int m = scanner.nextInt();
TreeSet<Integer> A = new TreeSet<>();
for(int i = 0; i <= n + m - 1; i++){
int t = scanner.nextInt();
A.add(t);
}
StringBuilder string= new StringBuilder();
for (Integer integer : A) {
string.append(integer + " ");
}
String t = string.toString().substring(0, string.length()-1);
System.out.print(t);
}
}