**Set接口**
Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。我们在前面通过List学习的方法,在Set中仍然适用。因此,学习Set的使用将没有任何难度。
Set容器特点:无序、不可重复。无序指Set中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。更确切地讲,新元素如果和Set中某个元素通过equals()方法对比为true,则不能加入;甚至,Set中也只能放入一个null元素,不能多个。
Set常用的实现类有:HashSet、TreeSet等,我们一般使用HashSet。
package cn.sxt.mycollection;
import java.util.HashSet;
import java.util.Set;
/**
- set没有顺序,不可重复,list有顺序可重复
- 测试HashSet的基本方法
- @author lenovo
*
*/
public class TestHashSet {
public static void main(String[] args) {
Set set1=new HashSet<>();
set1.add(“aa”);
set1.add(“bb”);
set1.add(“aa”);
System.out.println(set1);
set1.remove(“bb”);
System.out.println(set1);
Set set2=new HashSet<>();
set2.add(“mb”);
set2.addAll(set1);
System.out.println(set2);
}
}
package cn.sxt.mycollection;
import java.util.HashMap;
/**
-
手动实践一个HashSet,更深理解HashSet的底层原理
-
@author 骚彬
*
*/
public class SxtHashSet {
HashMap map;
private static final Object PRESENT=new Object();
public SxtHashSet() {
map=new HashMap();
}
public int size() {
return map.size();
}
public void add(Object o) {
map.put(o, PRESENT);
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("[");for(Object key:map.keySet()) { sb.append(key+","); } sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
public static void main(String[] args) {
SxtHashSet set=new SxtHashSet();
set.add(“aaa”);
set.add(“bbb”);
set.add(“ccc”);
System.out.println(set);
}
}