Set结构的使用与实现
程序员文章站
2022-04-15 14:37:30
...
Set
- Set是继承自Collection的一个接口类;
- Set中只存储了key,并且要求key一定要唯一;
- Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的;
- 因为Set里面的key是不能够重复的,所以Set最大的功能就是对集合中的元素进行去重;
- 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础上维护了一个双向链表,用这个链表来记录元素的插入次序;
- Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入;
- Set中插入的key不能为null;
- Set的常用方法:
- TreeSet和HashSet的区别:
- TreeSet的作用:去重+排序 ;HashSet的作用:去重;
- TreeSet和HashSet的代码实现:TreeSet和HashSet的遍历需要使用Iterator迭代器实现
public static void testTreeSet(){
Set<String> s = new TreeSet<>();
System.out.println(s.add("orange"));
System.out.println(s.add("peach"));
System.out.println(s.add("apple"));
System.out.println(s.size());
System.out.println(s);
System.out.println(s.add("apple"));
System.out.println(s);
if(s.contains("watermelon")){
System.out.println("Yes");
}else{
System.out.println("No");
}
//遍历
Iterator<String> it = s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println(s.remove("watermelon"));
System.out.println(s.remove("apple"));
s.clear();
}
public static void testHashSet(){
Set<String> s = new HashSet<>();
System.out.println(s.add("orange"));
System.out.println(s.add("peach"));
System.out.println(s.add("apple"));
System.out.println(s.size());
System.out.println(s);
System.out.println(s.add("apple"));
System.out.println(s);
if(s.contains("watermelon")){
System.out.println("Yes");
}else{
System.out.println("No");
}
//遍历
Iterator<String> it = s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println(s.remove("watermelon"));
System.out.println(s.remove("apple"));
s.clear();
}
执行结果:
/*TreeSet*/
true
true
true
3
[apple, orange, peach]
false
[apple, orange, peach]
No
apple
orange
peach
false
true
true
true
true
/*HashSet*/
3
[orange, apple, peach]
false
[orange, apple, peach]
No
orange
apple
peach
false
true