- 由上表可知,Collection接口下有Set,Set的实现类中有TreeSet和HashSet,下面我们先来总结Hashset常用方法:
1.add(Object obj):向Set集合中添加元素,添加成功返回true,否则返回false,下面我们可以先来看一段代码:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Jim");
set.add("Tom");
System.out.println(set.add("ABC"));
}
}
- 此时代码的执行结果为true
- 在上面这段代码中的HashSet<String> set = new HashSet<String>();实质上是调用HashSet无参构造方法,进而创建HashMap对象并把创建的该对象传给了map全局变量
- 向HashSet集合中添加元素,HashSet add方法在实质上是map全局变量调用了put方法,将数据存到了key中。因为HashMap 的 key 不允许重复,所以HashSet添加的元素也不允许重复;同时需要注意的是,在HashSet中不会按照保存的顺序存储数据,故此,该集合在遍历时是不能保证下次结果和上次相同的。
在HashSet中添加的元素不允许重复可以由下面一段代码证明:
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Jim");
set.add("Tom");
set.add("ABC");
System.out.println(set.add("ABC"));
}
}
此时的运行结果为false,则就证明了HashSet中添加的元素不允许重复
HashSet add方法在实质上是map全局变量调用了put方法:
HashSet add方法源码如下:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
2.size() :返回Set集合中的元素个数
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Jim");
set.add("Tom");
set.add("ABC");
System.out.println(set.size());
}
}
此时执行结果为3
3.isEmpty() :如果Set不包含元素,则返回 true ,否则返回false
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Jim");
set.add("Tom");
set.add("ABC");
System.out.println(set.isEmpty());
}
}
此时返回false
4.clear() : 清除此Set中的所有元素
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Jim");
set.add("Tom");
set.add("ABC");
set.clear();
System.out.println(set.size());
System.out.println(set.isEmpty());
}
}
此时的运行结果为:
5.contains(Object o):如果Set包含指定的元素,则返回 true,否则返回false
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Jim");
set.add("Tom");
set.add("ABC");
boolean str=set.contains("ABC");
System.out.println(str);
str=set.contains("Lucy");
System.out.println(str);
}
}
可以得出此时的运行结果为:
6.remove(Object obj) : 删除Set集合中的元素,删除成功返回true,否则返回false。
package set;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Jim");
set.add("Tom");
set.add("ABC");
boolean flag=set.remove("Lucy");
System.out.println(flag);
}
}
此时的返回值为false
7.iterator() :返回在此Set中的元素上进行迭代的迭代器
像数组中的遍历,此时在HashSet集合中也可以输出各元素的值,但是由于HashSet是无序的,由此可以用for-each循环或Iterator进行迭代
package set;
import java.util.HashSet;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
HashSet<String> set=new HashSet<String>();
set.add("Jim");
set.add("Tom");
set.add("ABC");
for (String name : set) {
System.out.println(name);
}
Iterator<String> iterator=set.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
此时该代码的运行结果为: