255 可变参数
package e255;
public class ArgsDemo01 {
public static void main(String[] args) {
System.out.println(sum(1,2));
System.out.println(sum(1,2,3));
System.out.println(sum(1,2,3,4));
}
public static int sum(int a,int b){
return a + b;
}
public static int sum(int a,int b,int c){
return a + b + c;
}
public static int sum(int a,int b,int c,int d){
return a + b + c + d;
}
}
--------------------------------------------------------------
如上代码,没有可变参数,则需要加和几个参数,就要创建几个参数的方法
可变参数又称-参数个数可变,用作方法的形参,则方法的参数个数可变
【格式】
修饰符 返回值 方法名(数据类型…变量名){}
例如,public static int sum(int…a){}
--------------------------------------------------------------
package e255;
public class ArgsDemo01 {
public static void main(String[] args) {
System.out.println(sum2(1,2));
System.out.println(sum2(1,2,3,4));
}
public static int sum2(int...n){
return 0;
}
}
/*
[I@119d7047
0
[I@776ec8df
0
由此可见,(可变参数的基本原理)n是一个数组
*/
--------------------------------------------------------------
package e255;
public class ArgsDemo01 {
public static void main(String[] args) {
System.out.println(sum2(1,2)); //3
System.out.println(sum2(1,2,3,4)); //10
}
public static int sum2(int...n){
int sum = 0;
for (int i:n){
sum += i;
}
return sum;
}
}
--------------------------------------------------------------
如果是多个参数,包含一般参数、可变参数,则先写一般参数,后写可变参数,如下
package e255;
public class ArgsDemo01 {
public static void main(String[] args) {
System.out.println(sum2(1,2));//2,这是sum(2)的结果,
System.out.println(sum2(1,2,3,4));//9,这是sum(2+3+4)的结果,1是int a,所以计算时不算1
}
public static int sum2(int a,int...n){
int sum = 0;
for (int i:n){
sum += i;
}
return sum;
}
}
256 可变参数的使用
(帮助文档)
class List
static <E> List<E> of(E e1,E e2) 返回一个包含两个数量元素的不可变列表
static <E> List<E> of(E…elements) 返回包含任意数量元素的不可变列表
·
class Set
static <E> Set<E> of(E e1,E e2) 返回一个包含两个数量元素的不可变集合
static <E> Set<E> of(E…elements) 返回包含任意数量元素的不可变集合
·
【可变参数的使用】
Arrays工具类中有一个静态方法
- public static <T> List<T> asList(T…a),返回由指定数组支持的固定大小的列表
- 返回的集合不能做增删操作(add、remove),可以修改(set)
List接口中有一个静态方法
- public static <E> List<E> of(E…elements),返回包含任意数量元素的不可变列表
- 返回的集合不能做增删操作(add、remove),可以修改(set)
Set接口中有一个静态方法
- public static <E> Set<E> of (E…elements),返回一个包含任意数量元素的不可变集合
- 返回的集合不能做增删改操作(add、remove、set),不能给重复的元素
--------------------------------------------------------------
package e256;
import java.util.Arrays;
import java.util.List;
public class ArgsDemo01 {
public static void main(String[] args) {
// 知识点:public static <T> List<T> asList(T...a);
List<String> l = Arrays.asList("HELLO","TRACY","GOOD MORNING");
// l.add("HOW DO YOU DO");UnsupportedOperationException
// l.remove(2);UnsupportedOperationException
l.set(1,"BEN");
//---由此可知,通过Arrays的asList方法得到的List集合,不可使用add和remove方法,可以使用set方法
//---add方法、remove方法会改变集合元素数量,set方法不会
System.out.println(l);//[HELLO, BEN, GOOD MORNING]
}
}
--------------------------------------------------------------
package e256;
import java.util.List;
public class ArgsDemo02 {
public static void main(String[] args) {
List<String> l = List.of("hello", "RAT", "morning","morning");
// l.add("it's friday");UnsupportedOperationException
// l.remove(0);UnsupportedOperationException
// l.set(0,"hi");UnsupportedOperationException
//---由此可知,通过List的of方法得到的List不可使用add、remove、set方法
System.out.println(l);
}
}
--------------------------------------------------------------
package e256;
import java.util.Set;
public class ArgsDemo03 {
public static void main(String[] args) {
// Set<String> s = Set.of("hello", "MOLE", "goodnight","goodnight");IllegalArgumentException,Set集合不可以有重复元素
Set<String> s = Set.of("hello", "MOLE", "goodnight");
// s.add("SEE YOU TOMORROW");UnsupportedOperationException
// s.remove(0);UnsupportedOperationException
// s.set编译时报错,set集合没有带索引的方法,因此set集合不能做增删操作
System.out.println(s);
}
}