标签:Set iterator HashSet add set TreeSet
Set是Collection的子接口,HashSet是Set的实现类,SortedSet是Set的子接口,TreeSet是SortedSet的实现类。
这些集合共同的特点都是:无序、不可重复。
方法也与Collection相差无几。
1.Set
Set是一个接口,不能直接实例化对象,要借助其实现子类。
package com.dh.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Set01 {
public static void main(String[] args) {
//Set是接口,借助HashSet实现类
Set<String> set = new HashSet<>();
set.add("a");
set.add("a");//可以添加重复元素,但是只会存储一个
//遍历元素也只有两种方法
//1.for增强
System.out.println("for增强遍历:");
for (String s : set) {
System.out.println(s);
}
//2.迭代器
System.out.println("迭代器遍历:");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
结果:只输出了一个a
for增强遍历:
a
迭代器遍历:
a
2.HashSet
HashSet底层为哈希表。存储在HashSet中的元素实际存放到了HashMap集合的key上。
源码:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
所以将重点放在HashMap集合上,只要搞懂了HashMap,HashSet也就理解了。
下一篇文章将会介绍。
3.TreeSet
TreeSet的底层为二叉树。存储在TreeSet上的元素实际存储在HashMap的key上。
添加到TreeSet中的元素会自动按照从小到大的顺序排序。
这里要注意排序和元素有序的区别:排序是按照一定的排序规则组织元素的顺序,而有序的意思是元素可以通过下标来操作,以及输出元素顺序与添加元素顺序一致。
例:
package com.dh.set;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSet01 {
public static void main(String[] args) {
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(1);
treeSet.add(3);
treeSet.add(2);
for (Integer integer : treeSet) {
System.out.println(integer);
}
//字符串会按照字典顺序逐个字母进行比较
TreeSet<String> treeSet1 = new TreeSet<>();
treeSet1.add("world");
treeSet1.add("hello");
Iterator<String> iterator = treeSet1.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
结果:
1
2
3
hello
world
以上内容还涉及到:
-
哈希表和二叉树的结构;
-
这些集合如何判断新添加的元素是否是已经存在的元素;
-
如何自定义比较规则。
这些问题都会在相关的Map集合中详细的介绍。即下一篇文章~
标签:Set,iterator,HashSet,add,set,TreeSet 来源: https://www.cnblogs.com/denghui-study/p/14394423.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。