引
1、分支
HashSet属于Collection集合的set分支下的子类(Collection集合分支图可参考博客:ArrayList常用方法总结)
2、创建HashSet对象
语法格式:
HashSet<数据类型> 变量名 = new HashSet<数据类型>();
思考:如何实现创建HashSet类型对象?
我们可以从源码角度出发,Ctrl+“单击HashSet”打开Hashset无参构造方法所在的HashSet.class类,找到相应源码如下:
public HashSet() {
map = new HashMap<>();
}
我们可以发现,其底层原理是创建了HashMap对象并赋给全局变量map。
关于HashMap的详细分析可参考博客:HashMap常用方法总结
3、引包
在使用HashSet的方法前需要引入import java.util.HashSet包。
HashSet常用方法
1、add(Object obj):向Set集合中添加元素,添加成功返回true,否则返回false
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
}
}
但要注意,HashSet集合中存储的数据没有顺序!
思考:使用add方法向HashSet集合中添加元素怎么实现?
我们可以从源码角度出发,Ctrl+“单击add”打开add方法所在的HashSet.class类,找到相应源码如下:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
其中add方法中的参数“e”代表“Tom”或者“Jim”;常量PRESENT的值赋为“null”。
可以看出add方法实质上是map全局变量调用了HashMap的put方法,将数据“Tom”存到了map的key中。
(由于HashMap的key值不允许重复,所以HashSet添加的元素也不允许重复。)
↓↓↓
详细分析add()方法底层实现可参考:分析HashMap实现类中add()方法的底层代码
注意:由于HashSet集合的元素无序,因此不能用常规for循环来遍历,此时需要使用for-each循环。
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
for (String name : set) {
System.out.println(name);
}
}
}
2、iterator() :返回在此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("Tom");
set.add("Jim");
Iterator<String> iterator = set.iterator();//创建Iterator<>对象
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
3、size() :返回Set集合中的元素个数
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.size());//打印set集合中元素个数
}
}
4、isEmpty() :如果Set不包含元素,则返回 true ,否则返回false
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
System.out.println(set.isEmpty());//显示set集合是否为空
}
}
5、clear() : 移除此Set中的所有元素
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.clear();//清除集合set中所有元素
System.out.println(set.size());//显示清除所有元素后集合元素个数是否为0
}
}
6、contains(Object o):如果Set包含指定的元素,则返回 true,否则返回false
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
boolean flag = set.contains("Tom");//将contains()判断结果赋给flag
System.out.println(flag);//显示集合是否含有“Tom”元素,有的话输出true
}
}
7、remove(Object obj) : 删除Set集合中的元素,删除成功返回true,否则返回false
由于HashSet集合中元素无需,因此不能Hashset的方法中不包含remove(int index),因为无法返回被除去的值。
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Tom");
set.add("Jim");
boolean flag = set.remove("Tom");//将set集合中“Tom”元素除去并将是否成功的布尔值赋给flag
System.out.println(flag);//显示是否去除成功
System.out.println(set.size());//检验是否成功
}
}