Java1.8源码集合类学习UML图——Collection接口&AbstractCollection抽象类
来源:互联网 发布:林珊珊几个淘宝店铺 编辑:程序博客网 时间:2024/05/15 03:36
Collection接口&AbstractCollection类
可以明显地看到Collection接口继承自Iterable接口,而AbstractCollection抽象类又是Collection的子类,那么AbstractCollection中的方法实现就可以使用迭代器和“for-each”语法。
Collection接口声明的方法
该接口中声明了集合常用的add(),remove(),clear(),size()等方法外,有几个重要的方法在这也给出了声明。
boolean equals(Object o) int hashcode();
equals()是判断两个对象是否相等,而这个相等的概念是由hash值决定的,也就是说c1.equals(c2)
等价于c1.hashcode()==c2.hashcode()
。
Object[] toArray() T[] toArray(T[] a);
这两个方法是数组与集合类的桥梁,特别是转到数组时,大小越界问题。
AbstractCollection中部分方法的具体实现
boolean contains(Object o)
/** * {@inheritDoc} * * <p>这个实现遍历集合中的所有元素,检查是否等特定的元素o。 * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public boolean contains(Object o) { Iterator<E> it = iterator(); if (o==null) { while (it.hasNext()) if (it.next()==null) return true; } else { while (it.hasNext()) if (o.equals(it.next())) return true; } return false; }
Object[] toArray()
/**<p>这个方法等价于: * * <pre> {@code * List<E> list = new ArrayList<E>(size()); * for (E e : this) * list.add(e); * return list.toArray(); * }</pre> */ public Object[] toArray() { // Estimate size of array; be prepared to see more or fewer elements Object[] r = new Object[size()];//试着调用size()方法,这个是可选操作 Iterator<E> it = iterator(); for (int i = 0; i < r.length; i++) { if (! it.hasNext()) // fewer elements than expected return Arrays.copyOf(r, i); r[i] = it.next(); } return it.hasNext() ? finishToArray(r, it) : r; }
boolean remove(Object o)
/** * {@inheritDoc} * * <p>s使用迭代器方法遍历整个集合,找到特定的元素,删除。 * <p>Note that this implementation throws an * <tt>UnsupportedOperationException</tt> if the iterator returned by this * collection's iterator method does not implement the <tt>remove</tt> * method and this collection contains the specified object. * * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ public boolean remove(Object o) { Iterator<E> it = iterator(); if (o==null) { while (it.hasNext()) { if (it.next()==null) { it.remove(); return true; } } } else { while (it.hasNext()) { if (o.equals(it.next())) { it.remove(); return true; } } } return false; }
还有一些批量操作
判断一个集合是否在内boolean containsAll(Collection<?> c)
、
添加一个集合boolean addAll(Collection<? extends E> c) {
boolean modified = false;
for (E e : c)
if (add(e))
modified = true;
return modified;
}
移除一个集合boolean removeAll(Collection<?> c)
1 0
- Java1.8源码集合类学习UML图——Collection接口&AbstractCollection抽象类
- Java-Collection源码分析(一)——Collection接口和AbstractCollection类
- 解析java.util集合类源码(Collection和AbstractCollection篇)
- AbstractCollection抽象类源码解析
- java_集合体系之Collection框架相关抽象类接口详解、源码——02
- java.util.Collection体系源码解读<三>AbstractCollection抽象类源码解读
- JDK源码阅读之AbstractCollection抽象类
- Java集合类源码阅读之AbstractCollection
- Java集合类:AbstractCollection源码解析
- AbstractCollection 抽象类 源代码
- 集合接口与抽象类 collection接口 Iterator接口
- java1.8 常用集合源码学习:HashMap
- java1.8 常用集合源码学习:HashSet
- java1.8 常用集合源码学习:LinkedHashMap
- java1.8 常用集合源码学习:LinkedHashSet
- java1.8 常用集合源码学习:ArrayList
- java1.8 常用集合源码学习:ArrayDeque
- java1.8 常用集合源码学习:PriorityQueue
- 运行java时出现 “could not open jvm.cfg ”的解决办法之一
- Hibernate 5.1概述
- NYOJ 737 石子合并(一)(区间DP、平行四边形优化、GarsiaWachs算法)
- hdu1080 Human Gene Functions()
- Codeforces 149D Coloring Brackets (不错的区间DP)
- Java1.8源码集合类学习UML图——Collection接口&AbstractCollection抽象类
- 如何学习struts框架?
- Android获取屏幕高度、状态栏高度、标题栏高度
- 混合加密算法(RSA 和DES)
- 获取控件的宽高和设置控件的宽高
- Android GridView属性集合
- cmd连接网络数据库
- [Java并发包学习七]解密ThreadLocal
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1 发布