public class LearnSet {
/*Set接口:存储无序的,不可重复的数据 --->高中集合
没有额外定义新的方法,使用都是Collection中声明过的方法
要求:想Set中添加的数据,其所在类一定要重写hashCode()和equals()
重写的hashCode()和equals()要保持一致性(相等的对象拥有相等的散列码)
HashSet,LinkedHashSet和TreeSet的异同
不同:HashSet:是Set的主要实现类,线程不安全,可以存储null值,底层为数组+链表的结构(JDK7),JDK8为HashMap
LinkedHashSet:是HashSet的子类,遍历内部数据时,可以按照添加的顺序遍历
对于频繁的遍历操作,linkedHashSet比HashSet效率高
TreeSet:可以按照添加对象的指定属性进行排序,向TreeSet中添加的数据,要求是相同类的对象
*/
public static void main(String[] args) {
//以Hashset为例
//1.无序性:不等于随机性。存储的数据在底层数组中不是按照索引添加,而是根据数据的Hash值决定位置
//2.不可重复性:保证添加的元素按照equals()判断时,不能返回TRUE
/*添加元素的过程:
我们向HashSet中添加元素a,首先调用元素a所在的hashCode()方法计算元素a的Hash值,
此Hash值通过某种算法计算出HashSet底层数组中存放的位置(索引位置),
判断数组在此位置上是否已经有元素了
如果没有元素,则元素a添加成功
如果有其他元素b(或以链表的形式存在的多个元素),则比较元素a和b的Hash值
如果Hash值不相同,则添加成功
如果Hash值相同,则调用元素a所在类的equals()方法
返回true,元素a添加失败
返回false,元素a添加成功
添加成功情况:
jdk7:元素a放到数组中,指向原来元素
jdk8:原来元素在数组中,指向元素a
总结:七上八下
*/
Set set = new HashSet();
set.add(123);
set.add(123);
set.add(123);
set.add("abc");
set.add(456);
set.add("efg");
Iterator iterator1 = set.iterator();
while (iterator1.hasNext()){
System.out.println(iterator1.next());
}
System.out.println("================>");
/*
linkedHashSet作为HashSet子类,在添加数据的同时还维护了一对链表(指针域)
优点:对于频繁的遍历操作,linkedHashSet比HashSet效率高
*/
Set linkedHashSet = new LinkedHashSet();
linkedHashSet.add(123);
linkedHashSet.add(123);
linkedHashSet.add(123);
linkedHashSet.add("abc");
linkedHashSet.add(456);
linkedHashSet.add("efg");
Iterator iterator2 = linkedHashSet.iterator();
while (iterator2.hasNext()){
System.out.println(iterator2.next());
}
}
}
JAVA:集合Collection(五)-Set学习
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- ArrayList系列集合的使用 LinkedList系列集合: 为什么无序不重复,上篇推文已介绍,这里就不赘述了...
- Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样...
- 集合体系有两个根接口,分别为Collection和Map,Set是集合Collection的一个接口,HashSe...
- 1.收获 今天是不一样的昨天,以前总是以为自己的解决办法是最适合自己的,但是我今天发先我错了,也许把别人的优秀方法...
- 初识ForkJoinPool java中的Executor相比大家都很熟悉,它是一种执行器。日常工作中比较容易见到...