題目描述
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的随機整數(N≤1000),對于其中重複的數字,隻保留一個,把其餘相同的數去掉,不同的數對應着不同的學生的學号。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 “去重”與“排序” 的工作(同一個測試用例裡可能會有多組資料,希望大家能正确處理)。
Input Param
n 輸入随機數的個數
inputArray n個随機整數組成的數組
Return Value
OutputArray 輸出處理後的随機整數
注:測試用例保證輸入參數的正确性,答題者無需驗證。測試用例不止一組。
樣例輸入解釋:
樣例有兩組測試
第一組是3個數字,分别是:2,2,1。
第二組是11個數字,分别是:10,20,40,32,67,40,20,89,300,400,15。
輸入描述:
輸入多行,先輸入随機整數的個數,再輸入相應個數的整數
輸出描述:
傳回多行,處理後的結果
示例1
3
2
2
1
11
10
20
40
32
67
40
20
89
300
400
15
輸出:
1
2
10
15
20
32
40
67
89
300
400
參考代碼
去重:選擇Set(無序、不重複)
排序:對Set的數組進行排序,最友善的使用集合TreeSet(不重複、有序),将集合中的元素放到數組中,利用Java提供的排序函數 Arrays.sort() 進行排序。
import java.util.*;
public class Main {
public static void main(String []args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
int n = scanner.nextInt();
Set<Integer> set = new TreeSet<>();
while (n != 0){
int i = scanner.nextInt();
set.add(i);
n--;
}
Integer[] arr = {};
arr = set.toArray(arr);
Arrays.sort(arr);
for (Integer integer : arr){
System.out.println(integer);
}
}
}
}
擴充:
Set 集合的特點:
- Set不允許包含相同的元素,如果試圖把兩個相同元素加入同一個集合中,add方法傳回false。
- Set判斷兩個對象相同不是使用==運算符,而是根據equals方法。也就是說,隻要兩個對象用equals方法比較傳回true,Set就不會同時接受這兩個對象。
Set集合的分類
Set集合主要分為3種:
|——SortedSet接口——TreeSet實作類
Set接口——|——HashSet實作類
|——LinkedHashSet實作類
-
HashSet(無序,可null)
HashSet的特點是不能保證元素的排列順序,順序有可能發生變化,集合元素可以是null,但隻能放入一個null。因為在HashSet中存入一個元素的時候,會調用該對象的hashCode()方法來得到該對象的hashCode值,然後根據 hashCode值來決定該對象在HashSet中存儲位置,是以儲存位置是随機的。HashSet就好像是HashMap的key。
-
TreeSet(有元素順序的)
TreeSet是SortedSet接口的唯一實作類,TreeSet可以確定集合元素處于排序狀态。TreeSet支援兩種排序方式,自然排序 和定制排序,其中自然排序為預設的排序方式。一般的Set排序都會使用到TreeSet。
-
LinkedHashSet(記錄插入順序)
LinkedHashSet集合同樣是根據元素的hashCode值來決定元素的存儲位置,但是它同時使用連結清單維護元素的次序。這樣使得元素看起 來像是以插入順 序儲存的,也就是說,當周遊該集合時候,LinkedHashSet将會以元素的添加順序通路集合的元素。一般的,如果讓你設計一個緩存算法,LinkedHashSet就是基本的基礎,利用LRU,篩選出應該淘汰的元素。
由于TreeSet是有元素順序的,是以我們在排序的過程中都會使用TreeSet。
小結:
前提:結合中元素不重複
- 如果我們需要将不重複的元素排序, 那麼使用TreeSet
- 如果我們不需要排序, 使用HashSet, HashSet比TreeSet效率高
- 如果我們需要保留存儲順序,又要過濾重複元素,那麼使用LinkedHashSet
注:BigDecimal類的排序方法和使用方法如下:
https://blog.csdn.net/qq_42145871/article/details/89460888
必看:TreeSet的兩種排序方法:自然排序和自定義排序