您可能知道,无界通配符Set能够包容任何类型的元素,而原始类型Set也能够包容任何类型的元素。那它们之间有什么区别呢?
1.关于Set的两个现实
关于Set有两个现实:
Item1:?代表任何类型。Set能够包容任何类型的元素。_
Item2:因为咱们不知道?的类型,所以不能将任何元素放入Set。
因而Set能够包容任何类型的element(Item1),但咱们不能将任何元素放入其中(Item2)。这两个陈说是否彼此抵触?当然不是。以下两个示例能够清楚地阐明这一点:
**Item1表明以下状况:**
//合法代码publicstaticvoidmain(String[]args){
HashSets1=newHashSet(Arrays.asList(1,2,3));
printSet(s1);
HashSet<String>s2=newHashSet<String>(Arrays.asList(“a”,”b”,”c”));
printSet(s2);
}
publicstaticvoidprintSet(Sets){for(Objecto:s){
System.out.println(o);
}
}
由于Set能够包容任何类型的元素,因而咱们仅在循环中运用Object。
**Item3是指以下不合法状况:**
//不合法代码publicstaticvoidprintSet(Sets){
s.add(10);//thislineisillegalfor(Objecto:s){
System.out.println(o);
}
}
因为咱们不完全知道的类型,所以除了null之外,咱们无法添加其他任何内容。出于相同的原因,咱们无法运用Set初始化调集。以下是不合法的:
//不合法代码
Set>set=newHashSet>();
2.Set与Set
原始类型集和无界通配符集有什么区别?
此方法声明很好:
publicstaticvoidprintSet(Sets){
s.add(“2”);for(Objecto:s){
System.out.println(o);
}
}
因为原始类型没有约束。但是,这很容易损坏调集的不变性。
简而言之,通配符类型是安全的,而原始类型则不是。咱们不能将任何元素放入Set中。
3.Set什么时候有用?
假如要运用泛型类型,但不知道或不在乎该参数的实践类型,则能够运用。它只能运用方法的参数。
例如:
publicstaticvoidmain(String[]args){
HashSets1=newHashSet(Arrays.asList(1,2,3));
HashSets2=newHashSet(Arrays.asList(4,2,3));
System.out.println(getUnion(s1,s2));
}publicstaticintgetUnion(Sets1,Sets2){intcount=s1.size();for(Objecto:s2){if(!s1.contains(o)){
count++;
}
}returncount;
}
广州天河区珠江新城富力盈力大厦北塔2706
020-38013166(网站咨询专线)
400-001-5281 (售后服务热线)
品牌服务专线:400-001-5281
长沙市天心区芙蓉中路三段398号新时空大厦5楼
联系电话/ (+86 0731)88282200
品牌服务专线/ 400-966-8830
旗下运营网站:
Copyright © 2016 2024澳门原料网1688白老虎,保留所有权利。 粤ICP备09033321号