目录
一、引言
二、HashSet中的常用方法
1.add(Object obj)方法(详述):
2.size() 方法:
3.remove(Object obj)方法 :
4.isEmpty()方法 :
5.clear() 方法:
6.iterator() 迭代器:
7.contains(Object o)方法:
三、结语
在我之前的博客ArrayList的常用方法中我讲到了集合的概念,这里不再赘述,本篇讲的HashSet是Set类的一个子类。
add(Object obj)方法用于向Set集合中添加元素,添加成功返回true,否则返回false
先看一段代码:
package runtime;
import java.util.HashSet;//引包
public class Cattle {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Tom"); //向set集合中添加元素
set.add("ABC");
set.add("Jerry");
set.add("Tom");
for (String name : set) { //输出set集合中的元素
System.out.println(name);
}
}
}
运行结果:
那么,如果我们加入了一个重复的元素呢?
改写代码:
package runtime;
import java.util.HashSet;//引包
public class Cattle {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Tom"); //向set集合中添加元素
set.add("ABC");
set.add("Jerry");
set.add("Tom");
for (String name : set) { //输出set集合中的元素
System.out.println(name);
}
}
}
观察结果 :
我们不难发现,重复的元素没有被加入到集合中,这就引出了HashSet类的第一个特点:
HashSet集合不允许有重复的元素
这是为什么?
在这里,我简单描述,在之后的博客HashMap 详细讲。
查看add()方法的底层代码:
发现一个全局变量map,及一个常量PRESENT,能够判断出来map调用了一个put方法对我们传入的元素和常量PRESENT进行了操作,查看map,可知map是定义在HashSet类中的一个全局变量,而在HashSet的构造方法中,可以看出是,HashMap创建了一个新对象并赋给了全局变量map,所以在add方法中,实际上是HashMap对象在调用put方法,而在put方法中其实把我们在add方法中传入的元素赋给了HashMap对象中的key,而对于HashMap对象key不能重复(在我下一篇博客会讲到),因此add方法无法添加重复的对象。
返回Set集合中的元素个数
package runtime;
import java.util.HashSet;//引包
public class Cattle {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Tom"); //向set集合中添加元素
set.add("ABC");
set.add("Jerry");
System.out.println(set.size());
}
}
输出结果:
删除Set集合中的元素,删除成功返回true,否则返回false。
package runtime;
import java.util.HashSet;//引包
public class Cattle {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Tom"); //向set集合中添加元素
set.add("ABC");
set.add("Jerry");
set.remove("Tom"); //删除“Tom”
System.out.println(set.size()); //检验是否已被删除
}
}
输出结果:
如果Set不包含元素,则返回 true ,否则返回false
package runtime;
import java.util.HashSet;//引包
public class Cattle {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Tom"); //向set集合中添加元素
set.add("ABC");
set.add("Jerry");
System.out.println(set.isEmpty());
}
}
输出结果:
移除此Set中的所有元素
package runtime;
import java.util.HashSet;//引包
public class Cattle {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Tom"); //向set集合中添加元素
set.add("ABC");
set.add("Jerry");
set.clear();
System.out.println(set.isEmpty());
}
}
输出结果:
返回在此Set中的元素上进行迭代的迭代器
package runtime;
import java.util.HashSet;//引包
import java.util.Iterator;
public class Cattle {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Tom"); // 向set集合中添加元素
set.add("ABC");
set.add("Jerry");
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
观察结果:
这里体现了HashSet对象的另一个特点:“它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变”
如果Set包含指定的元素,则返回 true,否则返回false
package runtime;
import java.util.HashSet;//引包
public class Cattle {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("Tom"); // 向set集合中添加元素
set.add("ABC");
set.add("Jerry");
boolean flag = set.contains("Tom");
System.out.println(flag);
}
}
输出结果:
HashSet的大部分常用方法与ArrayList类似,所以本篇中一些示例不再用文字赘述。