Java Set取值

1. 什么是Set
在Java中,Set是一种集合数据结构,它存储一组唯一的元素,不允许重复。Set接口继承自Collection接口,并在其基础上添加了对唯一性元素的限制。Set没有定义对元素的索引和位置,因此没有提供类似于List和Array的随机访问功能。
Set接口有多个实现类,常用的有HashSet、LinkedHashSet和TreeSet,它们都实现了Set接口并提供了不同的特性和性能。在使用Set时,可以根据实际需求选择适合的实现类。
2. HashSet
HashSet是基于哈希表实现的Set。它不保证元素的顺序,不允许重复元素,并允许使用null作为元素。
2.1 添加元素
使用add()方法向HashSet中添加元素,如果元素已存在,则不会添加,并返回false。示例代码如下:
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
System.out.println(set); // 输出:[Apple, Banana, Orange]
boolean result = set.add("Apple");
System.out.println(result); // 输出:false
}
}
运行结果:
[Apple, Banana, Orange]
false
从运行结果可以看出,添加重复元素”Apple”时,返回结果为false,并且HashSet中只保留一个”Apple”元素。
2.2 删除元素
HashSet提供了remove()方法来删除指定的元素,如果元素存在,则删除成功并返回true;如果元素不存在,则返回false。示例代码如下:
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
System.out.println(set); // 输出:[Apple, Banana, Orange]
boolean result = set.remove("Banana");
System.out.println(result); // 输出:true
System.out.println(set); // 输出:[Apple, Orange]
}
}
运行结果:
[Apple, Banana, Orange]
true
[Apple, Orange]
从运行结果可以看出,成功删除”Banana”元素后,HashSet中只剩下”Apple”和”Orange”两个元素。
2.3 遍历元素
HashSet不能直接使用下标来访问元素,但可以通过迭代器或增强for循环来遍历元素。示例代码如下:
import java.util.HashSet;
import java.util.Iterator;
public class HashSetExample {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
// 使用迭代器遍历元素
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
// 使用增强for循环遍历元素
for (String element : set) {
System.out.println(element);
}
}
}
运行结果:
Apple
Banana
Orange
Apple
Banana
Orange
从运行结果可以看出,HashSet的元素并没有固定顺序,使用迭代器和增强for循环遍历元素时,元素的顺序可能不同。
3. LinkedHashSet
LinkedHashSet是基于链表和哈希表实现的Set。它可以保留元素的顺序,不允许重复元素,并允许使用null作为元素。
3.1 添加元素
使用add()方法向LinkedHashSet中添加元素,如果元素已存在,则不会添加,并返回false。示例代码如下:
import java.util.LinkedHashSet;
public class LinkedHashSetExample {
public static void main(String[] args) {
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
System.out.println(set); // 输出:[Apple, Banana, Orange]
boolean result = set.add("Apple");
System.out.println(result); // 输出:false
}
}
运行结果:
[Apple, Banana, Orange]
false
从运行结果可以看出,添加重复元素”Apple”时,返回结果为false,并且LinkedHashSet中只保留一个”Apple”元素。
3.2 删除元素
LinkedHashSet提供了remove()方法来删除指定的元素,如果元素存在,则删除成功并返回true;如果元素不存在,则返回false。示例代码如下:
import java.util.LinkedHashSet;
public class LinkedHashSetExample {
public static void main(String[] args) {
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
System.out.println(set); // 输出:[Apple, Banana, Orange]
boolean result = set.remove("Banana");
System.out.println(result); // 输出:true
System.out.println(set); // 输出:[Apple, Orange]
}
}
运行结果:
[Apple, Banana, Orange]
true
[Apple, Orange]
从运行结果可以看出,成功删除”Banana”元素后,LinkedHashSet中只剩下”Apple”和”Orange”两个元素。
3.3 遍历元素
LinkedHashSet可以保留元素的顺序,可以通过迭代器或增强for循环来遍历元素。示例代码如下:
import java.util.LinkedHashSet;
import java.util.Iterator;
public class LinkedHashSetExample {
public static void main(String[] args) {
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
// 使用迭代器遍历元素
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
// 使用增强for循环遍历元素
for (String element : set) {
System.out.println(element);
}
}
}
运行结果:
Apple
Banana
Orange
Apple
Banana
Orange
从运行结果可以看出,LinkedHashSet可以保留元素的顺序,使用迭代器和增强for循环遍历元素时,元素的顺序与添加顺序相同。
4. TreeSet
TreeSet是基于红黑树实现的Set。它可以对元素进行排序,并且不允许重复元素。
4.1 添加元素
使用add()方法向TreeSet中添加元素,如果元素已存在,则不会添加,并返回false。示例代码如下:
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
System.out.println(set); // 输出:[Apple, Banana, Orange]
boolean result = set.add("Apple");
System.out.println(result); // 输出:false
}
}
运行结果:
[Apple, Banana, Orange]
false
从运行结果可以看出,添加重复元素”Apple”时,返回结果为false,并且TreeSet中只保留一个”Apple”元素。
4.2 删除元素
TreeSet提供了remove()方法来删除指定的元素,如果元素存在,则删除成功并返回true;如果元素不存在,则返回false。示例代码如下:
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
System.out.println(set); // 输出:[Apple, Banana, Orange]
boolean result = set.remove("Banana");
System.out.println(result); // 输出:true
System.out.println(set); // 输出:[Apple, Orange]
}
}
运行结果:
[Apple, Banana, Orange]
true
[Apple, Orange]
从运行结果可以看出,成功删除”Banana”元素后,TreeSet中只剩下”Apple”和”Orange”两个元素。
4.3 遍历元素
TreeSet可以对元素进行排序,可以通过迭代器或增强for循环来遍历元素。示例代码如下:
import java.util.TreeSet;
import java.util.Iterator;
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
// 使用迭代器遍历元素
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
// 使用增强for循环遍历元素
for (String element : set) {
System.out.println(element);
}
}
}
运行结果:
Apple
Banana
Orange
Apple
Banana
Orange
从运行结果可以看出,TreeSet对元素进行了排序,默认按照自然顺序进行排序。使用迭代器和增强for循环遍历元素时,元素按照排序顺序输出。
5. 总结
Set是一种存储唯一元素的集合数据结构,Java提供了多个实现类来满足不同需求。HashSet基于哈希表实现,不保证元素顺序;LinkedHashSet基于链表和哈希表实现,保留元素顺序;TreeSet基于红黑树实现,对元素进行排序。通过了解和使用这些Set的实现类,可以在实际开发中灵活应用,提高效率和代码质量。
极客教程