java.util.AbstractSet学习笔记
来源:互联网 发布:javascript复选框全选 编辑:程序博客网 时间:2024/06/05 01:50
概述
继承结构
类介绍
AbstractSet
提供了对java.util.Set
接口的基础实现。通过继承本类实现一个Set与通过继承java.util. AbstractCollection
的形式基本相同,除了本接口实现类中的所有方法都需要保证Set接口中对于一个数学集合的限制条件。本类中并没有重写由AbstractCollection
继承而来的方法,但是增加了equals
和hashCode
方法的实现。
方法介绍
public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Set)) return false; Collection<?> c = (Collection<?>) o; if (c.size() != size()) return false; try { return containsAll(c); } catch (ClassCastException unused) { return false; } catch (NullPointerException unused) { return false; }}
重写java.lang.Object
中提供的默认的equals(o)
方法,通过本方法,顺便看一下判断对象是否相等的流程:
- 首先判断两个对象是不是同一块内存的引用,如果为同一引用,直接返回true;
- 判断两个对象是不是同一种类型,如果不是同一种类型,则返回false;
- 判断两个集合中的元素个数是否相等,如果不相等,直接返回false;
- 判断被检测集合中是否包含检测集合中所有的元素,如果是,返回true,否则返回false。(要注意集合中元素之间的类型转换)。
public int hashCode() { int h = 0; Iterator<E> i = iterator(); while (i.hasNext()) { E obj = i.next(); if (obj != null) h += obj.hashCode(); } return h;}
计算一个Set类型的哈希值。对于一个Set的对象而言,其哈希值为其中包含的所有元素的哈希值的和,对于null元素,认为其哈希值为0。其保证了Object.hashCode
中对于相等对象的要求,即:如果两个对象s1
、s2
,如果有s1.equals(s2)
,那么一定有:s1.hashCode()==s2.hashCode()
。
public boolean removeAll(Collection<?> c) { Objects.requireNonNull(c); boolean modified = false; if (size() > c.size()) { for (Iterator<?> i = c.iterator(); i.hasNext(); ) modified |= remove(i.next()); } else { for (Iterator<?> i = iterator(); i.hasNext(); ) { if (c.contains(i.next())) { i.remove(); modified = true; } } } return modified;}
将set中所有存在于集合c中的元素删除。如果c也是一个set,那么这个操作的操作结果为取集合set与c的差集。该方法首先选取set与c中较小的一个,如果set包含的元素较少,则通过迭代器迭代set中的元素,检测每个元素是否包含于c中,如果包含,则调用迭代器的删除方法进行元素的删除;如果c中的元素较少,则通过迭代器遍历c中的元素,并调用set的remove方法,删除对应的元素。在代码层看来,如果其中的数据在最不理想的情况下,两者的执行时间是相同的。但是当c中的contains方法或者set的remove方法作对应优化时,则会在效率上产生一些影响。当set的迭代器不支持删除操作时,将抛出UnsupportedOperationException。
- java.util.AbstractSet学习笔记
- java.util.AbstractSet翻译
- java.util.AbstractSet翻译
- java.util.Map学习笔记
- java.util.concurrent学习笔记
- java.util.AbstractCollection学习笔记
- java.util.AbstractList学习笔记
- java.util.Collection学习笔记
- java.util.List学习笔记
- java.util.ListIterator学习笔记
- java.util.queue学习笔记
- java.util.Deque学习笔记
- java.util.AbstractSequentialList学习笔记
- java.util.LinkedList学习笔记
- java.util.Set学习笔记
- java.util.Map学习笔记
- java.util.Optional学习笔记
- java.util.Optional学习笔记
- 互联网小现象:BAT疯狂投资,网易为何单打独斗?
- BST(C语言)
- AndroidStudio配置百度地图API
- java生成二维码
- jdk安装与环境变量配置
- java.util.AbstractSet学习笔记
- ios Protocol buffer安装
- Hibernate逆向工程(表--->对象)
- 3X3拼图的可解性
- LeetCode No.168 Excel Sheet Column Title
- 通过remoteViews自定义Notification通知栏的布局
- Spark1.6的RPC
- Ubuntu16.04 中mongodb数据库
- bitbake简单的helloworld expamle