上一篇博客讲述的ArrayList中,提及到Collection集合有两个分支,List和Set。上节讲了List分支,接下来讲Set分支。
Set下也有一个抽象类AbstractSet,抽象类下又有两个接口实现类:TreeSet和HashSet,HashSet下也有一个实现类LinkedHashSet,HashSet与LinkedHashSet直接实现了Set接口。接下来总结HashSet常用方法
1.add()用于向HashSet集合中添加元素,代码如下
package blogset;
import java.util.HashSet;
public class Set {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();//调用HashSet无参构造方法,创建HashMap对象并赋给map全局变量
set.add("Tom");//向HashSet集合中添加元素
set.add("ABC");
set.add("Jim");//与list不同,set不会按照保存的顺序存储数据;且遍历时不能保证下次结果和上次相同
for (String name : set) {//因为无序,所以不能用传统遍历方法,即i++那种方式
System.out.println(name);
}
}
}
输出:ABC Tom Jim,从而证明了HashSet不会按照保存的顺序存储数据;且遍历时不能保证下次结果和上次相同
注意:add()所添元素不能重复
HashSet add方法实质是map全局变量调用了put方法,将数据存到了key(下篇博客会讲到Map,及其中的map.put(key,values)方法),代码如下:(按住ctrl键同时鼠标点击HashSet)
public HashSet() {
map = new HashMap<>();
}
因为HashMap 的 key 不允许重复,所以HashSet添加的元素也不允许重复,HashSet add方法源码如下(按住ctrl键同时鼠标点击add)
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
2.iterator() 进行迭代,将HashSet中数据转存至iterator
除了上面for-each遍历外,还可以用iterator()方法进行迭代,代码如下
package blogset;
import java.util.HashSet;
import java.util.Iterator;
public class Set {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("ABC");
set.add("Jim");
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
输出:ABC Tom Jim,无序
3.size() 获取集合容器中有多少个元素,代码如下
package blogset;
import java.util.HashSet;
import java.util.Iterator;
public class Set {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("Tom");
System.out.println(set.size());//输出2
}
}
输出2也能说明add添加的元素不能重复
4.isEmpty() 判断集合是否为空,若是则true,否则false。代码如下
package blogset;
import java.util.HashSet;
import java.util.Iterator;
public class Set {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.isEmpty());//输出false
}
}
5. clear(); 用于清空集合容器中元素。如
package blogset;
import java.util.HashSet;
import java.util.Iterator;
public class Set {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.isEmpty());//输出false
set.clear();
System.out.println(set.isEmpty());//输出true
}
}
6.contains() 用于判断元素中是否包含参数指定对象(怎么判断参照list中contains()),如
package blogset;
import java.util.HashSet;
import java.util.Iterator;
public class Set {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.contains("Tom"));//输出true
}
}
7.remove() 删除集合中元素,成功则返回true,否则false,如
package blogset;
import java.util.HashSet;
import java.util.Iterator;
public class Set {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.remove("Tom"));//输出true
System.out.println(set.size());//输出1
}
}