版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/86365386
嘤...嘤嘤,本菜鸡只会用C++的STL,通过前面的博文也可以看出来。我jio得非常有必要学习一下JAVA中的STL。好了,不瞎哔哔了。
我是站在C++的基础上来理解JAVA的Set用法的,如果不知道C++中set用法的小伙伴请戳链接:某大佬的博客链接—C++中set的用法。
JAVA中常用的Set方法:
函数和用法 |
---|
add( ) 向集合中添加元素 |
clear( ) 去掉集合中所有的元素 |
contains( ) 判断集合中是否包含某一个元素 |
isEmpty( ) 判断集合是否为空 |
iterator( ) 主要用于递归集合,返回一个Iterator()对象 |
remove( ) 从集合中去掉特定的对象 |
size( ) 返回集合的大小 |
JAVA中的set有三种:HashSet,TreeSet和LinkedHashSet。
①HashSet的输出顺序是不确定的,但是它的速度最快;
②TreeSet输出顺序是升序排列的,相当于C++中的set,个人比较喜欢这种;
③LinkedHashSet输出顺序是确定的,就是插入时的顺序。
Talk is cheap,show me the code!下面通过一段代码来比较三者的性能:
import java.util.*;
public class SetExample {
public static void Cmp(Set s) {
int[] a = {1,6,58,99,23,88};
long startTime = System.nanoTime();
//添加元素
for(int i = 0; i < a.length; i++) {
s.add(a[i]);
s.add(a[i]);
s.add(a[i]);
}
//输出元素
Iterator it = s.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
long endTime = System.nanoTime();
long duration = endTime - startTime; //持续时间
System.out.println("耗时(单位:纳秒):"+duration);
}
public static void main(String[] args) {
//声明三种Set
Set<Integer> set1 = new HashSet();
Set<Integer> set2 = new TreeSet();
Set<Integer> set3 = new LinkedHashSet();
//比较三种Set的性能
//HashSet输出顺序是不确定的,但是速度最快
System.out.print("HashSet的输出顺序:");
Cmp(set1);
//TreeSet输出顺序是升序排列的,相当于C++中的set
System.out.print("TreeSet的输出顺序:");
Cmp(set2);
//LinkedHashSet输出顺序是确定的,就是插入时的顺序
System.out.print("LinkedHashSet的输出顺序:");
Cmp(set3);
}
}
运行代码后结果如下:
HashSet的输出顺序:1 99 6 23 88 58 耗时(单位:纳秒):263293
TreeSet的输出顺序:1 6 23 58 88 99 耗时(单位:纳秒):554667
LinkedHashSet的输出顺序:1 6 58 99 23 88 耗时(单位:纳秒):615202
参考链接:https://www.programcreek.com/2013/03/hashset-vs-treeset-vs-linkedhashset/。