代码永远都是通过接口类型(Set)来操作Collection的,而不是使用它的实现类型(Hash)。这是一个强烈建议遵循的编程准则,因为这让你可以灵活地只通过改变构造函数来修改具体实现。如果用来存储集合和用来传递参数所有变量中的任何一个被声明称Collection的实现类型,而不是它的接口类型,那么修改实现类型,所有这些变量和参数都必须被改变。

Set接口的批量操作:

  1. s1.containsAll(s2); //当s2是s1子集时,此操作返回true值。
  2. s1.addAll(s2); //让s1成为s1和s2的并集(两个所有元素不重复的集合)
  3. s1.rtianAll(s2); //把s1转变为s1与s2的交集(2个集合中都存在的所有元素的集合)
  4. s1.removeAll(s2); //把s1转变为s1与s2(非对称)的差集(s1存在,s2不存在的所有元素的集合)

为了不破坏集合,调用者必须在调用相应批量操作前复制集合。
HashSet是Java平台最好的set实现,然而,任何通用目的的set实现都是可替代的。