Set接口
Posted zhai113
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Set接口相关的知识,希望对你有一定的参考价值。
Set
定义
set中不允许放入重复的元素(元素相同时只取一个)。它使用equals()方法进行比较,如果返回true,两个对象的HashCode值也应该相等。
特点:
Set
接口是无序的
Set
是继承于Collection
的接口。它是一个不允许有重复元素的集合。
Set
可以存储null值,但是null不能重复
Set的实现类都是基于Map
来实现的(HashSet
是通过HashMap
实现的,TreeSet
是通过TreeMap
实现的)。
例:
1 public class Demo02 { 2 public static void main(String[] args) { 3 Set<String> set=new HashSet<String>(); 4 set.add("hello"); 5 set.add("java"); 6 set.add("hello"); 7 for(String s:set){ 8 System.out.println(s); 9 } 10 } 11 }
如图所示:
HashSet
是实现 Set
接口,由哈希表(实际上是一个 HashMap
实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null
元素。
特点
底层数据结构是 哈希表,HashSet的本质是一个"没有重复元素"的集合,它是通过HashMap
实现的。HashSet中含有一个"HashMap类型的成员变量"map,在HashSet中操作函数,实际上都是通过map实现的。
哈希表保证唯一 依赖hashcode和equals方法
存储到集合中是无序的
例:
1 //用Set对象调用add方法 2 public class Demo03 { 3 public static void main(String[] args) { 4 int str="abc".hashCode(); 5 int p=new Person("小黄",18).hashCode(); 6 System.out.println(p); 7 Set<Person> s=new HashSet<Person>();//重写equals和hashCode方法 8 s.add(new Person("小黑",18)); 9 s.add(new Person("小黑",18)); 10 s.add(new Person("lao黑",19)); 11 for(Person a:s){ 12 System.out.println(a);//没有重复元素 13 } 14 } 15 }
如图所示:
LinkeHashSet
底层数据结构是 链表和哈希表
链表保证元素有序
哈希表保证元素唯一
例:
1 public class Demo04 { 2 public static void main(String[] args) { 3 LinkedHashSet<String> set= 4 new LinkedHashSet<String>(); 5 6 set.add("hello"); 7 set.add("java"); 8 set.add("hello"); 9 set.add("java"); 10 //遍历 11 for(String s:set){ 12 System.out.println(s); 13 } 14 } 15 }
如图所示:
Set集合和List集合的区别?
Set: 不允许元素重复, 集合元素唯一(元素可以为null), 不能保证迭代顺序恒久不变, 无序(存储和取出不一致).
List: 允许元素重复, 并且元素有序(存储和取出一致).
以上是关于Set接口的主要内容,如果未能解决你的问题,请参考以下文章
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段