Java的可變參數(shù)與Collections類的功能示例解析
1. 可變參數(shù)
在JDK1.5之后,如果我們定義一個方法需要接受多個參數(shù),并且多個參數(shù)類型一致,我們可以對其簡化.
格式:
修飾符 返回值類型 方法名(參數(shù)類型... 形參名){ }
底層:
? 其實就是一個數(shù)組
好處:
? 在傳遞數(shù)據(jù)的時候,省的我們自己創(chuàng)建數(shù)組并添加元素了,JDK底層幫我們自動創(chuàng)建數(shù)組并添加元素了
代碼演示:
public class ChangeArgs {
public static void main(String[] args) {
int sum = getSum(6, 7, 2, 12, 2121);
System.out.println(sum);
}
public static int getSum(int... arr) {
int sum = 0;
for (int a : arr) {
sum += a;
}
return sum;
}
}注意:
? 1.一個方法只能有一個可變參數(shù)
? 2.如果方法中有多個參數(shù),可變參數(shù)要放到最后。
應(yīng)用場景: Collections
? 在Collections中也提供了添加一些元素方法:
? public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。
代碼演示:
public class CollectionsDemo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
//原來寫法
//list.add(12);
//list.add(14);
//list.add(15);
//list.add(1000);
//采用工具類 完成 往集合中添加元素
Collections.addAll(list, 5, 222, 1,2);
System.out.println(list);
}2. Collections類
2.1 Collections常用功能
java.utils.Collections是集合工具類,用來對集合進(jìn)行操作。常用方法如下:
public static void shuffle(List<?> list):打亂集合順序。public static <T> void sort(List<T> list):將集合中元素按照默認(rèn)規(guī)則排序。public static <T> void sort(List<T> list,Comparator<? super T> ):將集合中元素按照指定規(guī)則排序。
代碼演示:
public class CollectionsDemo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(100);
list.add(300);
list.add(200);
list.add(50);
//排序方法
Collections.sort(list);
System.out.println(list);
}
}
結(jié)果:
[50,100, 200, 300]我們的集合按照默認(rèn)的自然順序進(jìn)行了排列,如果想要指定順序那該怎么辦呢?
2.2 Comparator比較器
創(chuàng)建一個學(xué)生類,存儲到ArrayList集合中完成指定排序操作。
Student 類
public class Student{
private String name;
private int age;
//構(gòu)造方法
//get/set
//toString
}測試類:
public class Demo {
public static void main(String[] args) {
// 創(chuàng)建四個學(xué)生對象 存儲到集合中
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("rose",18));
list.add(new Student("jack",16));
list.add(new Student("abc",20));
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();//以學(xué)生的年齡升序
}
});
for (Student student : list) {
System.out.println(student);
}
}
}
Student{name='jack', age=16}
Student{name='rose', age=18}
Student{name='abc', age=20}3. 綜合練習(xí)
練習(xí)1:隨機(jī)點(diǎn)名器
需求:班級里有N個學(xué)生,實現(xiàn)隨機(jī)點(diǎn)名器
代碼實現(xiàn):
public class Test1 {
public static void main(String[] args) {
/* 班級里有N個學(xué)生,學(xué)生屬性:姓名,年齡,性別。
實現(xiàn)隨機(jī)點(diǎn)名器。*/
//1.定義集合
ArrayList<String> list = new ArrayList<>();
//2.添加數(shù)據(jù)
Collections.addAll(list,"范閑","范建","范統(tǒng)","杜子騰","杜琦燕","宋合泛","侯籠藤","朱益群","朱穆朗瑪峰","袁明媛");
//3.隨機(jī)點(diǎn)名
/* Random r = new Random();
int index = r.nextInt(list.size());
String name = list.get(index);
System.out.println(name);*/
//打亂
Collections.shuffle(list);
String name = list.get(0);
System.out.println(name);
}
}練習(xí)2:帶概率的隨機(jī)
需求:
? 班級里有N個學(xué)生
? 要求在隨機(jī)的時候,70%的概率隨機(jī)到男生,30%的概率隨機(jī)到女生
代碼實現(xiàn):
public class Test2 {
public static void main(String[] args) {
/* 班級里有N個學(xué)生
要求:
70%的概率隨機(jī)到男生
30%的概率隨機(jī)到女生
"范閑","范建","范統(tǒng)","杜子騰","宋合泛","侯籠藤","朱益群","朱穆朗瑪峰",
"杜琦燕","袁明媛","李猜","田蜜蜜",
*/
//1.創(chuàng)建集合
ArrayList<Integer> list = new ArrayList<>();
//2.添加數(shù)據(jù)
Collections.addAll(list,1,1,1,1,1,1,1);
Collections.addAll(list,0,0,0);
//3.打亂集合中的數(shù)據(jù)
Collections.shuffle(list);
//4.從list集合中隨機(jī)抽取0或者1
Random r = new Random();
int index = r.nextInt(list.size());
int number = list.get(index);
System.out.println(number);
//5.創(chuàng)建兩個集合分別存儲男生和女生的名字
ArrayList<String> boyList = new ArrayList<>();
ArrayList<String> girlList = new ArrayList<>();
Collections.addAll(boyList,"范閑","范建","范統(tǒng)","杜子騰","宋合泛","侯籠藤","朱益群","朱穆朗瑪峰");
Collections.addAll(girlList,"杜琦燕","袁明媛","李猜","田蜜蜜");
//6.判斷此時是從boyList里面抽取還是從girlList里面抽取
if(number == 1){
//boyList
int boyIndex = r.nextInt(boyList.size());
String name = boyList.get(boyIndex);
System.out.println(name);
}else{
//girlList
int girlIndex = r.nextInt(girlList.size());
String name = girlList.get(girlIndex);
System.out.println(name);
}
}
}練習(xí)3:隨機(jī)不重復(fù)
需求:
? 班級里有N個學(xué)生,被點(diǎn)到的學(xué)生不會再被點(diǎn)到。但是如果班級中所有的學(xué)生都點(diǎn)完了, 需要重新開啟第二輪點(diǎn)名。
代碼實現(xiàn):
public class Test3 {
public static void main(String[] args) {
/* 班級里有5個學(xué)生
要求:
被點(diǎn)到的學(xué)生不會再被點(diǎn)到。
但是如果班級中所有的學(xué)生都點(diǎn)完了,需要重新開啟第二輪點(diǎn)名。*/
//1.定義集合
ArrayList<String> list1 = new ArrayList<>();
//2.添加數(shù)據(jù)
Collections.addAll(list1, "范閑", "范建", "范統(tǒng)", "杜子騰", "杜琦燕", "宋合泛", "侯籠藤", "朱益群", "朱穆朗瑪峰", "袁明媛");
//創(chuàng)建一個臨時的集合,用來存已經(jīng)被點(diǎn)到學(xué)生的名字
ArrayList<String> list2 = new ArrayList<>();
//外循環(huán):表示輪數(shù)
for (int i = 1; i <= 10; i++) {
System.out.println("=========第" + i + "輪點(diǎn)名開始了======================");
//3.獲取集合的長度
int count = list1.size();
//4.隨機(jī)點(diǎn)名
Random r = new Random();
//內(nèi)循環(huán):每一輪中隨機(jī)循環(huán)抽取的過程
for (int j = 0; j < count; j++) {
int index = r.nextInt(list1.size());
String name = list1.remove(index);
list2.add(name);
System.out.println(name);
}
//此時表示一輪點(diǎn)名結(jié)束
//list1 空了 list2 10個學(xué)生的名字
list1.addAll(list2);
list2.clear();
}
}
}練習(xí)4:集合的嵌套
需求:
? 定義一個Map集合,鍵用表示省份名稱province,值表示市city,但是市會有多個。
添加完畢后,遍歷結(jié)果格式如下:
? 江蘇省 = 南京市,揚(yáng)州市,蘇州市,無錫市,常州市
湖北省 = 武漢市,孝感市,十堰市,宜昌市,鄂州市
河北省 = 石家莊市,唐山市,邢臺市,保定市,張家口市
代碼實現(xiàn):
public class Test4 {
public static void main(String[] args) {
/* 需求
定義一個Map集合,鍵用表示省份名稱province,值表示市city,但是市會有多個。
添加完畢后,遍歷結(jié)果格式如下:
江蘇省 = 南京市,揚(yáng)州市,蘇州市,無錫市,常州市
湖北省 = 武漢市,孝感市,十堰市,宜昌市,鄂州市
河北省 = 石家莊市,唐山市,邢臺市,保定市,張家口市*/
//1.創(chuàng)建Map集合
HashMap<String, ArrayList<String>> hm = new HashMap<>();
//2.創(chuàng)建單列集合存儲市
ArrayList<String> city1 = new ArrayList<>();
city1.add("南京市");
city1.add("揚(yáng)州市");
city1.add("蘇州市");
city1.add("無錫市");
city1.add("常州市");
ArrayList<String> city2 = new ArrayList<>();
city2.add("武漢市");
city2.add("孝感市");
city2.add("十堰市");
city2.add("宜昌市");以上就是Java的可變參數(shù)與Collections類的功能示例解析的詳細(xì)內(nèi)容,更多關(guān)于Java可變參數(shù)Collections類的資料請關(guān)注腳本之家其它相關(guān)文章!
- java.util.Collections類—emptyList()方法的使用
- 淺談Java中Collections.sort對List排序的兩種方法
- Java使用Collections.sort()排序的方法
- java安全之CommonsCollections4詳解
- Java中的Collections類的使用示例詳解
- Java中Collections.sort的使用
- Java中Collection與Collections的區(qū)別詳解
- Java Collection和Collections的區(qū)別
- Java中的集合工具類Collections詳解
- Java中Collections.sort()排序方法舉例詳解
- Java中Collection和Collections的區(qū)別
相關(guān)文章
基于SpringBoot服務(wù)端表單數(shù)據(jù)校驗的實現(xiàn)方式
這篇文章主要介紹了基于SpringBoot服務(wù)端表單數(shù)據(jù)校驗的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
springboot springmvc拋出全局異常的解決方法
這篇文章主要為大家詳細(xì)介紹了springboot springmvc拋出全局異常的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
Java自學(xué)書籍推薦 程序員到架構(gòu)師必看的書
這篇文章主要為大家推薦了Java程序員到架構(gòu)師自學(xué)書籍,幫助大家不斷提高自己的專業(yè)水平,感興趣的小伙伴們可以參考一下2016-09-09
springboot 接收List 入?yún)⒌膸追N方法
本文主要介紹了springboot 接收List 入?yún)⒌膸追N方法,本文主要介紹了7種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
Java對象池pool2分析PooledObjectFactory過程
文章介紹了Java中對象池化技術(shù)的背景,以Apache的Pool2庫為例,詳細(xì)講解了GenericObjectPool的構(gòu)造函數(shù)參數(shù)和PooledObjectFactory接口的實現(xiàn),通過商場里的共享充電寶的比喻,說明了池化思維的應(yīng)用2025-02-02

