A.    测试 johnnico23 的代码:

  • java 接口 public interface Set<E>extends Collection<E>,它是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。
  • 从测试结果看,重复添加的元素,都被删除,即集合Set 中不包含重复元素。
  • 通过流来进行转换的做法,保留了每个元素原来类型定义的全部信息,在 运行过程 中 得以调用了每个类的  toString() 方法,将每个类都 "字符串化" 了。
  • Java 8 新特性: Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。这里,用 java 8 或更新版本("1.8.0_162")测试
  • johnnico23 的答案,符合楼主的要求,应当采纳。
  • 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); 评论 ( 2 )