import java.util.*;
import java.util.stream.*;
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
public String toString(){
String s = name;
s += ", 年龄:" + age;
return s;
public class johnnico23{
public static void main(String args[]){
String name[]= {"johnnico23","Jason909","平头哥2019"};
Set<Object> set = new HashSet<>();
for (String s : name){
set.add(new Person(s,20));
set.add(new Person(name[0],20)); //重复
set.add(new Integer(100));
set.add(new Integer(100));//重复
set.add(new Double(2.2));
set.add("Earthquake");
Set<String> stringSet = set.stream().map(String::valueOf).collect(Collectors.toSet());
for( String s : stringSet)
System.out.println(s);
2 . 测试 Jason909 的代码报告
尽管通过了编译,但遍历最后获得的 Set<String> 型集合 s2 发现,由于编译结束时发生的泛型擦除 (generic erasure ),将源码中各个元素类型信息,除了类型名称之外都擦除了,所以未能将原来的类型转换成String类型,比如测试发现的异常:Exception in thread "main" java.lang.ClassCastException: Person cannot be cast to java.lang.String
at Jason909.main(Jason909.java:32)
而停止运行。
证明,这种途径不可以采纳。
import java.util.*;
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
public String toString(){
String s = name;
s += ", 年龄:" + age;
return s;
public class Jason909 {
public static void main(String args[]){
String name[]= {"johnnico23","Jason909","平头哥2019"};
Set<Object> set = new HashSet<>();
for (String s : name){
set.add(new Person(s,20));
set.add(new Person(name[0],20));//重复
set.add(new Integer(100));
set.add(new Integer(100));//重复
set.add(new Double(2.2));
set.add("Earthquake");
Set<?> s1 = set;
Set<String> s2 = (Set<String>)s1;
for( String s : s2)
System.out.println(s);
首先
Set<Object>
和
Set<String> 是不同的两个类。
1.循环
Set<Object>,加入Set<String>
2.如果你的jdk在1.8以上,你也可以使用stream
,像楼上大佬说的用
Set
<
String
> stringSet = set.stream().map(
String
::valueOf).collect(Collectors.toSet());