Set接口基础知识
基础概念
Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。
Set容器特点:无序、不可重复。无序指Set中的元素没有索引我们只能遍历查询;不可重复是指不允许加入重复元素。
Set常用的实现类有:HashSet、TreeSet等,一般使用HashSet。HashSet底层实现是HashMap。
测试Set中的常用方法
代码
import java.util.HashSet;
import java.util.Set;
/**
* 测试Set接口
* @author dxt
*
*/
public class TestSet {
public static void main(String[] args){
//1. 建立set容器
Set<String> set1 = new HashSet<String>();
//2. 向容器中添加对象
set1.add("aa");
set1.add("bb");
set1.add("cc");
System.out.println(set1);
//3. 测试不可重复性
set1.add("aa");
System.out.println(set1);
//4. remove()
set1.remove("aa");
System.out.println(set1.contains("aa"));
//5. addAll()
Set<String> set2 = new HashSet<String>();
set2.add("AA");
set1.addAll(set2);
System.out.println(set1);
}
}
结果
自定义实现HashSet
代码
import java.util.HashMap;
/**
* 自定义实现HashSet
* @author dxt
*
*/
public class MyHashSet<E> {
private HashMap map; //HashSet底层实现是HashMap
private static final Object PRESENT = new Object();
public MyHashSet(){
map = new HashMap();
}
/**
* 实现add()
* @param obj
*/
public void add(E obj){
map.put(obj, PRESENT);
}
/**
* 实现remove()
* @param obj
*/
public void remove(E obj){
map.remove(obj);
}
/**
* 实现size()
* @return
*/
public int size(){
return map.size();
}
/**
* 重写toString()方法
*/
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){
MyHashSet<String> set = new MyHashSet<String>();
set.add("aa");
set.add("bb");
set.add("cc");
System.out.println(set);
System.out.println(set.size());
set.remove("aa");
System.out.println(set);
}
}
结果