Contents
17.2. Set集合¶
Set集合中的元素是无序的、不能重复的。
List集合中的元素是有序的、可重复的,而Set集合中的元素是无序的、不能重复的。List集 合强调的是有序,Set集合强调的是不重复。当不考虑顺序,且没有重复元素时,Set集合和List集 合可以互相替换的。
17.2.1. 常用方法¶
常用方法 Set接口也继承自Collection接口,Set接口中大部分都是继承自Collection接口,这些方法如下。
- 操作元素
add(Object element):在Set集合的尾部添加指定的元素。该方法是从Collection集合继承过来的。
remove(Object element):如果Set集合中存在指定元素,则从Set集合中移除该元素。该方法是从Collection集合继承过来的。
clear():从Set集合中移除所有元素。该方法是从Collection集合继承过来的。
- 判断元素
isEmpty():判断Set集合中是否有元素,没有返回true,有返回false。该方法是从
Collection集合继承过来的。
contains(Object element):判断Set集合中是否包含指定元素,包含返回true,不包含返回false。该方法是从Collection集合继承过来的。
- 其他
iterator():返回迭代器(Iterator)对象,迭代器对象用于遍历集合。该方法是从Collection集合继承过来的。
size():返回Set集合中的元素数,返回值是int类型。该方法是从Collection集合继承过来的。
HelloWorld2.java
package com.a51cto;
import java.util.HashSet;
import java.util.Set;
public class HelloWorld2 {
public static void main(String[] args) {
Set set = new HashSet();
String b = "B";
// 向集合中添加元素
set.add("A");
set.add(b);
set.add("C");
set.add(b);
set.add("D");
set.add("E");
// 打印集合元素个数
System.out.println("集合size =" + set.size());
// 打印集合
System.out.println(set);
// 删除结合中第一个“B”元素
set.remove(b);
// 判断集合中是否包含“B”元素
System.out.println("是否包含\"B\":" + set.contains(b));
// 判断是否为空集合
System.out.println("set集合是空的:" + set.isEmpty());
// 清空集合
set.clear();
System.out.println(set);
}
}
/*
* 集合size =5
* [A, B, C, D, E]
* 是否包含"B":false
* set集合是空的:false
* []
*/
17.2.2. 创建HashSet类¶
无序,且不能重复
HashSetDemo.java
package com.a51cto;
// 导入HashSet包
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args) {
boolean r;
// 创建一个存放String对象的HashSet集合对象s
HashSet<String> s = new HashSet<String>();
// 然后向其中添加4个字符串
r=s.add("Hello");
System.out.println("添加单词Hello,返回值 "+ r);
r=s.add("hujianli1");
System.out.println("添加单词hujianli1,返回值 "+ r);
r=s.add("hujianli2");
System.out.println("添加单词hujianli2,返回值 "+ r);
r=s.add("Hello");
System.out.println("添加单词Hello,返回值 "+ r);
System.out.println("遍历集合中的元素");
for(String em:s)
System.out.println(em);
}
}
/**
添加单词Hello,返回值 true
添加单词hujianli1,返回值 true
添加单词hujianli2,返回值 true
添加单词Hello,返回值 false
遍历集合中的元素
Hello
hujianli1
hujianli2
*/
17.2.3. 创建TreeSetDemo类¶
有序,且不能重复
TreeSetDemo.java
package com.a51cto;
import java.util.TreeSet;
// 导入HashSet包
public class TreeSetDemo {
public static void main(String[] args) {
boolean r;
// 创建一个存放String对象的TreeSet集合对象s
TreeSet<String>s = new TreeSet<String>();
// 然后向其中添加4个字符串
r=s.add("Hello");
System.out.println("添加单词Hello,返回值 "+ r);
r=s.add("hujianli1");
System.out.println("添加单词hujianli1,返回值 "+ r);
r=s.add("hujianli2");
System.out.println("添加单词hujianli2,返回值 "+ r);
r=s.add("Hello");
System.out.println("添加单词Hello,返回值 "+ r);
System.out.println("遍历集合中的元素");
for(String em:s)
System.out.println(em);
}
}
/**
*
添加单词Hello,返回值 true
添加单词hujianli1,返回值 true
添加单词hujianli2,返回值 true
添加单词Hello,返回值 false
遍历集合中的元素
Hello
hujianli1
hujianli2
*/
17.2.4. Set集合的遍历¶
HelloWorld4.java
package com.a51cto;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HelloWorld4 {
public static void main(String[] args) {
Map map = new HashMap();
// 向集合中添加元素
map.put(102, "张三");
map.put(105, "李四");
map.put(106, "王五");
map.put(107, "董6");
map.put(112, "李四");
// 使用for-each循环遍历
System.out.println("-----1.使用for-each循环遍历------");
Set keys = map.keySet();
for (Object key : keys) {
int ikey = (Integer) key; // 自动拆箱
String value = (String) map.get(ikey); // 自动装箱
System.out.printf("key=%d -value=%s \n", ikey, value);
}
// 2.使用迭代器遍历
System.out.println("-----2.使用迭代器遍历-------");
// 获得值集合
Collection values = map.values();
// 遍历值集合
Iterator it = values.iterator();
while (it.hasNext()) {
Object item = it.next();
String s = (String) item;
System.out.println("值集合元素: " + s);
}
}
}
/*-----1.使用for-each循环遍历------
key=112 -value=李四
key=102 -value=张三
key=105 -value=李四
key=106 -value=王五
key=107 -value=董6
-----2.使用迭代器遍历-------
值集合元素: 李四
值集合元素: 张三
值集合元素: 李四
值集合元素: 王五
值集合元素: 董6*/