`

Java集合工具类之Set - HashSet

阅读更多

 

4.  Set

Set 是不包含重复元素的集合。可以更加正式地表达为,在 set 里面的元素 e1,e2, 不允许 e1.equals(e2), 而且最多有一个 null 元素。

Set 的主要方法如下,可以看出 List Set 在方法上的区别了, List 能够根据类似于 index ,来找到元素的方法,而 set 只管往集合里面放东西,并不管其插入的顺序, List 有比较严格的插入顺序。

//Set 是否为空

boolean isEmpty();

// 是否包含指定元素

boolean contains(Object o);

// 遍历 Set

Iterator<E> iterator();

// 转化成数组

Object[] toArray();

// 添加元素

boolean add(E e);

// 清空集合

void clear();

// 只保留包含指定集合的元素

boolean retainAll(Collection<?> c);


4.1 HashSet

1 HashSet 的数据结构和工作原理

HashSet 的基本数据结构是 HashMap HashMap 的基本数据结构是哈希表和链表,在构造函数上可以参见 HashMap 的工作原理,和 HashMap 一样,影响性能的因素包括: set 的初始化容量大小,容量因子,和 HashCode 的构造,其主要方法实现如下:

/**

* 添加元素,注意是将 elment 作为 key 存进 HashupMap

* 同时指定所有对应的 element value 都为同一个对象,

* 这样可以防止元素重复,同时可以看出 Hashset 允许

* 空元素

*/

public boolean add(E e) {

       return map.put(e, PRESENT)==null;

}

/**

* 移除元素

*/

public boolean remove(Object o) {

       return map.remove(o)==PRESENT;

}

/**

* 清空 set

*/

public void clear() {

       map.clear();

}

 

/**

*Clone Set

*/

public Object clone() {

       try {

              HashSet<E> newSet = (HashSet<E>) super.clone();

              newSet.map = (HashMap<E, Object>) map.clone();

              return newSet;

       } catch (CloneNotSupportedException e) {

              throw new InternalError();

       }

}

 

public boolean contains(Object o) {

       return map.containsKey(o);

}

 

public boolean isEmpty() {

       return map.isEmpty();

}

public int size() {

       return map.size();

}

 

public Iterator<E> iterator() {

       return map.keySet().iterator();

}

分享到:
评论

相关推荐

    Java期末复习-类集框架

    Java类集框架 最大单值操作父接口Collection及其子接口、子类: List接口、ArrayList类、Vector类、栈操作类Stack、链表操作类LinkList、队列操作...Collections工具类 Comparable接口、equals()方法、hashCode()方法

    Java面试题合集最新版2024.zip

    集合框架:熟悉Java集合框架中的List、Set、Map等接口及其实现类,如ArrayList、HashSet、HashMap等。 泛型:理解泛型的概念及其在Java中的应用,如泛型类和泛型方法。 并发编程:了解Java中的线程、同步、锁等机制...

    疯狂JAVA讲义

    7.8 操作集合的工具类:Collections 283 7.8.1 排序操作 283 7.8.2 查找,替换操作 287 7.8.3 同步控制 288 7.8.4 设置不可变集合 288 7.9 烦琐的接口:Enumeration 289 7.10 本章小结 290 本章练习 290 第8...

    java基础案例与开发详解案例源码全

    12.5.2 使用集合工具类同步化集合类对象324 12.5.3 使用JDK5.0后提供的并发集合类324 12.6 用Timer类调度任务325 12.7 本章练习326 第13章 13.1 java.io.File类328 13.1.1 文件和目录是什么?328 13.1.2 Java对文件...

    JAVA入门学习笔记(1)– Collection集合的基础知识

    集合类4.1 集合的实现类4.1.1 ArrayList 4.1.2 LinkedList 4.1.3 Vecotor4.1.4 HashSet 4.1.5 LinkedHashSet 4.2 Conllections工具类5. 集合的遍历5.1 迭代器5.2 增强for循环(jdk1.5+)* 附加知识点1.数据结构1.1 栈...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler)...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第13章 Java集合类  13.1 Set(集)  13.1.1 Set的一般用法  13.1.2 HashSet类  13.1.3 TreeSet类  13.1.4 向Set中加入持久化类的对象  13.2 List(列表)  13.3 Map(映射)  13.4 小结  13.5 思考题 第14...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler)...

    21天学通Java-由浅入深

    232 11.7 习题 232 第12章 内部类(精彩视频:71分钟) 234 12.1 非静态内部类 234 12.1.1 创建非静态内部类 234 12.1.2 在外部类中访问内部类 235 12.1.3 在外部类外访问内部类 236 12.1.4 在内部类中访问外部类 ...

    跟汤老师学Java(第13季):集合

    本课程从零开始,以通俗易懂的方式讲解Java技术,手把手教你掌握每一个知识点。 真正做到零基础入门学习,适合初学者的教程!...7.Collections工具类 教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    第13章 Java集合类  13.1 Set(集)  13.1.1 Set的一般用法  13.1.2 HashSet类  13.1.3 TreeSet类  13.1.4 向Set中加入持久化类的对象  13.2 List(列表)  13.3 Map(映射)  13.4 小结  13.5 思考题 第14...

    java面试考题

    接口:Connection、Map、List、Set、Comparable(集合比较)、Serializable(序列化)。 包:java.util、java.lang、java.io、java.sql、javax.net、 java.awt、javax.xml 、javax.sevlet。 1.面向对象的特征有哪些? 1...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

    第13章 Java集合类  13.1 Set(集)  13.1.1 Set的一般用法  13.1.2 HashSet类  13.1.3 TreeSet类  13.1.4 向Set中加入持久化类的对象  13.2 List(列表)  13.3 Map(映射)  13.4 小结  13.5 思考题 第14...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

    第13章 Java集合类  13.1 Set(集)  13.1.1 Set的一般用法  13.1.2 HashSet类  13.1.3 TreeSet类  13.1.4 向Set中加入持久化类的对象  13.2 List(列表)  13.3 Map(映射)  13.4 小结  13.5 思考题 第14...

    Java范例开发大全(全书源程序)

    第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 实例190 验证码 ...

    java范例开发大全源代码

     第11章 Java常用类(教学视频:66分钟) 315  11.1 数学Math类 315  实例186 求圆周率∏值 315  实例187 求对数值 316  实例188 使用取整函数 317  11.2 Random类的使用 318  实例189 随机数 ...

    java范例开发大全

    第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 实例190 验证码 322 11.3 ...

    Java范例开发大全 (源程序)

     第11章 Java常用类(教学视频:66分钟) 315  11.1 数学Math类 315  实例186 求圆周率∏值 315  实例187 求对数值 316  实例188 使用取整函数 317  11.2 Random类的使用 318  实例189 随机数 319  ...

Global site tag (gtag.js) - Google Analytics