package ;
import java.util.ArrayList;
import java.util.Scanner;
public class demo1 {
public static void main(String[] args) {
ArrayList<Integer> list1 = creatList();
sort(list1);
System.out.println("排序后的数字为:"+list1);
double sum = sum(list1);
System.out.println("输入数字总和为:"+sum);
removeDuplicate(list1);
ArrayList<Integer> list2 = creatList();
ArrayList<Integer> unionlist = union(list1, list2);
System.out.print("合并后的数组为:");
for(int num : unionlist){
System.out.print(num + " ");
}
}
public static ArrayList<Integer>creatList(){
//创建List
Scanner input = new Scanner(System.in);
int count = 0;
ArrayList<Integer> list = new ArrayList<>();
System.out.println("请输入5个数字:");
while(count<5){//可以输入五个整型数字
list.add(input.nextInt());
count++;
}
//input.close() //加上这个会报错 原因是关闭了标准输入流会影响到所有的标准输入流
return list;
}
public static void sort(ArrayList<Integer> list){
//对ArrayList排序
// 法一:调用自带函数 java.util.Collections.sort(list);
//法二:利用循环遍历List排序
for (int i=0; i < list.size(); i++){
Integer min = list.get(i);//依次取出一个数字
int minIndex = i;
for(int j = i+1; j< list.size(); j++){
//找出最小的数字的下标
if(min>list.get(j)){
min = list.get(j);
minIndex = j;
}//min为每次查着过程中最小的数字
}//minIndex为每次查找过程中最小数字的下标
if (minIndex != i){
//使用set(index:int,O:E)使用E替换列表index位置原有的对象
list.set(minIndex,list.get(i));
list.set(i,min);
}
}
}
public static double sum(ArrayList<Integer> list){
//对ArrayList求和
double sum = 0;
for (int i = 0; i < list.size(); i++){
sum += list.get(i);
}
return sum;
}
public static void removeDuplicate(ArrayList<Integer> list){
//去掉重复数字
ArrayList<Integer> newList = new ArrayList<>();
for (int i = 0; i < list.size(); i++){
if (!newList.contains(list.get(i))){
newList.add(list.get(i));
}
}
System.out.print("新数组是:");
for(int i = 0; i < newList.size(); i++){
System.out.print(" "+newList.get(i));
}
System.out.println();
}
public static ArrayList<Integer> union (ArrayList<Integer> list1, ArrayList<Integer> list2){
//合并两个列表
ArrayList <Integer> result = new ArrayList<>();
for (int i = 0; i < list1.size(); i++){
result.add(list1.get(i));
}
for (int i = 0; i < list2.size(); i++){
if (!result.contains(list2.get(i)))
result.add(list2.get(i));
}
return result;
}
}
其中creatlist方法中不要写上 input.close()
//input.close(); //加上这个会报错 原因是关闭了标准输入流会影响到所有的标准输入流,它关闭的是system.in 这个是程序运行自己打开的
removeDuplication也可以通过set容器中的TreeSet类实现
TreeSet的特点:
1.不能写入空数据(null)
2.写入的数据是有序的
3.不写入重复数据
TreeSet正好可以满足题目要求。
代码如下:
public static ArrayList<Integer> sortandremovelist(ArrayList<Integer> list){
//利用set的特性去除重复数字和排序
Set<Integer> tset = new TreeSet<>();
int i = 0;
while(i < list.size()){
if(tset.add(list.get(i))){//如果set中已经有这个数字 会返回false
i++;
}
else{
list.remove(i);
}
}
list.clear();//清空list然后将tset添加到list中
list.addAll(tset);//不加这两行代码返回的是没有排序只去除重复数字后的list
return list;
}