Java Set集合及其子类HashSet与LinkedHashSet详解
Java中的Set是一种集合类,它不能包含重复元素。Java的Set集合有两个主要的实现类:HashSet和LinkedHashSet。
HashSet
HashSet是基于哈希表实现的Set集合。当我们向HashSet中添加元素时,HashSet首先使用元素的hashCode生成对应的哈希值,然后将这个值对应的桶上添加元素。当我们需要从HashSet中查找元素时,HashSet会根据要查找元素的哈希码值,找到对应的桶,然后在这个桶上线性查找要查找的元素。
示例1:HashSet的使用
import java.util.*;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.add("banana"); // 重复元素不会被添加
System.out.println(set);
System.out.println(set.contains("apple"));
System.out.println(set.contains("grape"));
set.remove("orange");
System.out.println(set);
}
}
输出结果:
[banana, orange, apple]
true
false
[banana, apple]
LinkedHashSet
LinkedHashSet是基于哈希表实现的Set集合,除了具有HashSet的特点外,还可以按照元素的插入顺序进行迭代。它通过使用双向链表维护元素之间的插入顺序,所以LinkedHashSet可以记录添加元素的顺序,从而支持按照插入顺序进行迭代。
示例2:LinkedHashSet的使用
import java.util.*;
public class LinkedHashSetExample {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.add("banana");
System.out.println(set);
System.out.println(set.contains("apple"));
System.out.println(set.contains("grape"));
set.remove("orange");
System.out.println(set);
}
}
输出结果:
[apple, banana, orange]
true
false
[apple, banana]
总结
HashSet和LinkedHashSet的区别在于,LinkedHashSet是可以按照插入顺序迭代的,并且它的添加、删除、查找操作的时间复杂度在平均意义下都是常数级别的,即O(1)。而其它的Set集合类,如TreeSet,是按照元素的比较结果进行排序的,添加、删除、查找操作的时间复杂度是O(log n),其中n是元素的个数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Set集合及其子类HashSet与LinkedHashSet详解 - Python技术站