- 浏览: 535088 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
飞天奔月:
public List<String> gener ...
实践中的重构30_不做油漆匠 -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道public class A {
...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道在世界的中心呼喚愛 写道在classB ...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道在classB的finalize上打断 ...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
iteye比较少上,如果可以的话,可以发e-mail交流:ch ...
深入理解ReferenceQueue GC finalize Reference
忘了什么原因突然想看下JCF,于是就有了这个阅读体会。
java版本基于sun jdk1.6.0_18
1 通用接口
public interface Iterable<T>
public interface Iterator<E>
一个典型的iterator模式的应用。
注意注释中提到的Iterator和enumerations一个不同点是方法名的提高,命名还是很重要的。
public interface Collection<E>
extends Iterable<E>
比较有意思。
线程策略由实现类决定。
注意contains并不是一定要使用equals,而是把自由给了实现类。
很多可选操作。
如果要继承equals方法需要特别小心,默认的约定是List和Set永远不相等。
public abstract class AbstractCollection<E>
implements Collection<E>
注意对整数加法溢出的处理。
用简单的算法实现给出了Collection的基本实现。
最大限度的简化了子类的编写,同时不限制子类效率更高的写法。
public interface Queue<E>
extends Collection<E>
public interface Deque<E>
extends Queue<E>
Comparator
注意consistent with equals的意义,即
c.compare(e1, e2)==0 <=> e1.equals(e2)
这里可以重温一下equals和hashcode的关系。
Comparable
2 Set
public interface Set<E>
extends Collection<E>
为了方便copy了Collection<E>所有的方法。
明确了Set作为对数学上Set的建模。
对方法做了更为详尽的注释。如add不能加入重复元素。
明确了Set的equals和hashCode的契约。
equals,只有Set和Set才可能相等,size相同,元素相等。
hashCode,每一个元素hashCode的和,保持了Object的equals和hashCode的惯用法。
public abstract class AbstractSet<E>
extends AbstractCollection<E>
implements Set<E>
Set的骨架类。
简单实现了equals和hashCode。
removeAll考虑了使用2个Set中较小的一个做迭代,优化了性能。
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
由HashMap作为存储。用key来存储元素,用一个哑元作为所有key对应的value。
iterator是fail fast的,但是这是一个best effect行为,程序的正确性不应该依赖该异常。
注意IO序列化的一个自定义实现。writeObject和readObject。
小技巧:
HashSet(int initialCapacity, float loadFactor, boolean dummy)
dummy在这里的作用只是为了和其他的构造函数相区别。
主要是和public HashSet(int initialCapacity, float loadFactor)区别。
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable
使用了LinkedHashMap保持了元素的插入顺序。
public interface SortedSet<E>
extends Set<E>
public interface NavigableSet<E>
extends SortedSet<E>
public class TreeSet<E>
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
和HashSet,LinkedHashSet一样,都是代理到对应的Map来实现。
3 List
public interface List<E>
extends Collection<E>
为了方便copy了Collection<E>所有的方法。
List是有序队列。
增加了很多List特定的方法。
public interface ListIterator<E>
extends Iterator<E>
基于游标的一个列表的Iterator。
可以前后移动,可以增加,删除,设置元素。
public abstract class AbstractList<E>
extends AbstractCollection<E>
implements List<E>
随机访问List的骨架类。
modCount这个字段标识了List结构性被改动的次数,而且子类继承的时候,该字段是一个可选的字段。
该类中的Itr,ListItr内部类的实现还是很值得一看一学的。
同样,SubList的实现也是比较简洁的。
RandomAccessSubList。
public interface RandomAccess
这个是一个list的marker interface。
列表相关的算法由于列表的实现不同性能差异太大。
public abstract class AbstractSequentialList<E>
extends AbstractList<E>
链表型列表的骨架类。
public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
对System.arraycopy方法的大量使用。
为了少做一点检查,提高性能,使用fastRemove。
一般我们都是使用List接口来使用List,直接使用ArrayList可以更好的控制List。当然,没有特殊需求还是使用List比较方便。
ArrayList中提供了trimToSize,ensureCapacity来对其内部数据结构做一些控制。
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
使用了哑元的双向链表。
Clear时,删除原有所有元素的引用。
private Entry<E> entry(int index)时不是单向遍历,而是判断正向和逆向哪个方向路径更短,然后决定使用哪个方向查找。
ListItr.remove() 注意List的ListIterator是双向的,删除的时候要判断前一个动作是什么。
4 Map
public interface Map<K,V>
interface Entry<K,V>
public abstract class AbstractMap<K,V>
implements Map<K,V>
map的骨架类。
大量实现是基于entrySet。
JCF中充满了类似于
的代码,提高性能,避免在每个循环体中比较。
public static class SimpleEntry<K,V>
implements Entry<K,V>, java.io.Serializable
public static class SimpleImmutableEntry<K,V>
implements Entry<K,V>, java.io.Serializable
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
关于capacity, load factor, rehash之间的关系。
HashMap不是线程安全的。大部分JCF的类都不是线程安全的。
Capacity必须是2的幂。默认16。Loadfactor默认0.75。
Map初始化的一个钩子函数,方便子类实现。
对于null的特殊处理,所有key为null的都放在index为0的位置。
内部类,wrapper用的出神入化。
用链表法解决hash冲突。
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>
可以是插入顺序,也可以是access order。
使用双链表保持顺序。
public interface SortedMap<K,V>
extends Map<K,V>
public interface NavigableMap<K,V>
extends SortedMap<K,V>
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable
底层使用红黑树。
为了性能,在get时对自然序和comparator的分开处理。
果然还是TreeMap的代码最难读懂。
TreeMap可以插入为null的key,但是插入后,该TreeMap基本就不能使用了。
View返回的都是快照(SimpleImmutableEntry),无法setValue,但是可以使用map的put方法来改变值。
红黑树的插入以前一直没有看,现在一看果然精彩。
注意红黑树删除元素时的特殊处理。
最后的构建红黑树也比较有意思,如果一个完全二叉树,最后一层不满的话,则全部为RED。
小结
1 漂亮的注释:JCF的注释的确是比较漂亮的,简单清晰。唯一的不足就是为了保持每个方法注释的完整性,导致有很多重复的注释。当然,对于使用方法有需要才去看注释的程序员来说,这样更方便一点,但是对于完整阅读代码的人来说,貌似有点多余。
2 勿以善小而不为:当看到Iterator的类说明中有改善命名一条时,真的有点感动。
3 大师级的设计和代码复用技术。这个没有什么好说的,喜爱代码的人是在看艺术品。
4 框架代码对性能的有限度强调:在可以提高性能的地方提高性能,但是并不阻止其他人实现子类时提供性能更好的方法。同时,代码并没有因为对一些性能问题的特殊处理而变得丑陋。
5 关于类线程安全性的注释:一般代码哪里看的到这个。
6 几个骨架类的设计和实现都很简洁有力,仅仅使用几个基本方法,就可以实现接口的所有功能。
7 modCount思想。fail-fast的实现机制。
8 平时还是要打好基础,数据结构和算法中对红黑数的插入和删除以前没有怎么看过,只知道概念和用途,直接导致看到TreeMap的时候比较费力。
9 一行行读代码未必是一个好办法,对于JCF的接口和类的体系还是比较熟悉的,因此没有什么问题,但是Map的Iterator和View的继承体系以前没有接触过,看完过自己觉得没有清晰的把握设计思路,动手画画图,真是有如泰山登顶,一览天下的感觉,神清气爽啊。
10 优秀的源代码还是应该早读的,有点后悔为什么拖到现在才开始看JCF,以前干嘛去了。
11 强烈推荐大家都看看JCF。
java版本基于sun jdk1.6.0_18
1 通用接口
public interface Iterable<T>
public interface Iterator<E>
一个典型的iterator模式的应用。
注意注释中提到的Iterator和enumerations一个不同点是方法名的提高,命名还是很重要的。
public interface Collection<E>
extends Iterable<E>
比较有意思。
线程策略由实现类决定。
注意contains并不是一定要使用equals,而是把自由给了实现类。
很多可选操作。
如果要继承equals方法需要特别小心,默认的约定是List和Set永远不相等。
// Query Operations int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] toArray(); <T> T[] toArray(T[] a); // Modification Operations boolean add(E e); boolean remove(Object o); // Bulk Operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); void clear(); // Comparison and hashing boolean equals(Object o); int hashCode();
public abstract class AbstractCollection<E>
implements Collection<E>
注意对整数加法溢出的处理。
用简单的算法实现给出了Collection的基本实现。
最大限度的简化了子类的编写,同时不限制子类效率更高的写法。
public interface Queue<E>
extends Collection<E>
public interface Deque<E>
extends Queue<E>
Comparator
注意consistent with equals的意义,即
c.compare(e1, e2)==0 <=> e1.equals(e2)
这里可以重温一下equals和hashcode的关系。
Comparable
2 Set
public interface Set<E>
extends Collection<E>
为了方便copy了Collection<E>所有的方法。
明确了Set作为对数学上Set的建模。
对方法做了更为详尽的注释。如add不能加入重复元素。
明确了Set的equals和hashCode的契约。
equals,只有Set和Set才可能相等,size相同,元素相等。
hashCode,每一个元素hashCode的和,保持了Object的equals和hashCode的惯用法。
public abstract class AbstractSet<E>
extends AbstractCollection<E>
implements Set<E>
Set的骨架类。
简单实现了equals和hashCode。
removeAll考虑了使用2个Set中较小的一个做迭代,优化了性能。
public boolean removeAll(Collection<?> 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; }
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
由HashMap作为存储。用key来存储元素,用一个哑元作为所有key对应的value。
iterator是fail fast的,但是这是一个best effect行为,程序的正确性不应该依赖该异常。
注意IO序列化的一个自定义实现。writeObject和readObject。
小技巧:
HashSet(int initialCapacity, float loadFactor, boolean dummy)
dummy在这里的作用只是为了和其他的构造函数相区别。
主要是和public HashSet(int initialCapacity, float loadFactor)区别。
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable
使用了LinkedHashMap保持了元素的插入顺序。
public interface SortedSet<E>
extends Set<E>
public interface NavigableSet<E>
extends SortedSet<E>
public class TreeSet<E>
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
和HashSet,LinkedHashSet一样,都是代理到对应的Map来实现。
3 List
public interface List<E>
extends Collection<E>
为了方便copy了Collection<E>所有的方法。
List是有序队列。
增加了很多List特定的方法。
// Positional Access Operations E get(int index); E set(int index, E element); void add(int index, E element); E remove(int index); // Search Operations int indexOf(Object o); int lastIndexOf(Object o); // List Iterators ListIterator<E> listIterator(); ListIterator<E> listIterator(int index); // View List<E> subList(int fromIndex, int toIndex);
public interface ListIterator<E>
extends Iterator<E>
基于游标的一个列表的Iterator。
可以前后移动,可以增加,删除,设置元素。
public abstract class AbstractList<E>
extends AbstractCollection<E>
implements List<E>
随机访问List的骨架类。
modCount这个字段标识了List结构性被改动的次数,而且子类继承的时候,该字段是一个可选的字段。
该类中的Itr,ListItr内部类的实现还是很值得一看一学的。
同样,SubList的实现也是比较简洁的。
RandomAccessSubList。
public interface RandomAccess
这个是一个list的marker interface。
列表相关的算法由于列表的实现不同性能差异太大。
public abstract class AbstractSequentialList<E>
extends AbstractList<E>
链表型列表的骨架类。
public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
对System.arraycopy方法的大量使用。
为了少做一点检查,提高性能,使用fastRemove。
一般我们都是使用List接口来使用List,直接使用ArrayList可以更好的控制List。当然,没有特殊需求还是使用List比较方便。
ArrayList中提供了trimToSize,ensureCapacity来对其内部数据结构做一些控制。
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
使用了哑元的双向链表。
Clear时,删除原有所有元素的引用。
private Entry<E> entry(int index)时不是单向遍历,而是判断正向和逆向哪个方向路径更短,然后决定使用哪个方向查找。
ListItr.remove() 注意List的ListIterator是双向的,删除的时候要判断前一个动作是什么。
4 Map
public interface Map<K,V>
interface Entry<K,V>
public abstract class AbstractMap<K,V>
implements Map<K,V>
map的骨架类。
大量实现是基于entrySet。
JCF中充满了类似于
public V get(Object key) { Iterator<Entry<K,V>> i = entrySet().iterator(); if (key==null) { while (i.hasNext()) { Entry<K,V> e = i.next(); if (e.getKey()==null) return e.getValue(); } } else { while (i.hasNext()) { Entry<K,V> e = i.next(); if (key.equals(e.getKey())) return e.getValue(); } } return null; }
的代码,提高性能,避免在每个循环体中比较。
public static class SimpleEntry<K,V>
implements Entry<K,V>, java.io.Serializable
public static class SimpleImmutableEntry<K,V>
implements Entry<K,V>, java.io.Serializable
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
关于capacity, load factor, rehash之间的关系。
HashMap不是线程安全的。大部分JCF的类都不是线程安全的。
Capacity必须是2的幂。默认16。Loadfactor默认0.75。
Map初始化的一个钩子函数,方便子类实现。
对于null的特殊处理,所有key为null的都放在index为0的位置。
内部类,wrapper用的出神入化。
用链表法解决hash冲突。
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>
可以是插入顺序,也可以是access order。
使用双链表保持顺序。
public interface SortedMap<K,V>
extends Map<K,V>
public interface NavigableMap<K,V>
extends SortedMap<K,V>
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable
底层使用红黑树。
为了性能,在get时对自然序和comparator的分开处理。
final Entry<K,V> getEntry(Object key) { // Offload comparator-based version for sake of performance if (comparator != null) return getEntryUsingComparator(key); if (key == null) throw new NullPointerException(); Comparable<? super K> k = (Comparable<? super K>) key; Entry<K,V> p = root; while (p != null) { int cmp = k.compareTo(p.key); if (cmp < 0) p = p.left; else if (cmp > 0) p = p.right; else return p; } return null; } final Entry<K,V> getEntryUsingComparator(Object key) { K k = (K) key; Comparator<? super K> cpr = comparator; if (cpr != null) { Entry<K,V> p = root; while (p != null) { int cmp = cpr.compare(k, p.key); if (cmp < 0) p = p.left; else if (cmp > 0) p = p.right; else return p; } } return null; }
果然还是TreeMap的代码最难读懂。
final Entry<K,V> getCeilingEntry(K key) { Entry<K,V> p = root; while (p != null) { int cmp = compare(key, p.key); //进入到左子树,说明该子树的root比key大。 if (cmp < 0) { if (p.left != null) p = p.left; else return p; } else if (cmp > 0) { if (p.right != null) { p = p.right; } else { //如果是左子树进来的,查找该左子树的root。如果不是,结果是null。 Entry<K,V> parent = p.parent; Entry<K,V> ch = p; while (parent != null && ch == parent.right) { ch = parent; parent = parent.parent; } return parent; } } else return p; } return null; }
TreeMap可以插入为null的key,但是插入后,该TreeMap基本就不能使用了。
@Test(expected = NullPointerException.class) public void testAddNullToTreeMap() { TreeMap<String, String> tm = new TreeMap<String, String>(); tm.put(null, "test"); tm.get("key"); }
View返回的都是快照(SimpleImmutableEntry),无法setValue,但是可以使用map的put方法来改变值。
红黑树的插入以前一直没有看,现在一看果然精彩。
注意红黑树删除元素时的特殊处理。
// deleted entries are replaced by their successors if (lastReturned.left != null && lastReturned.right != null) next = lastReturned;
最后的构建红黑树也比较有意思,如果一个完全二叉树,最后一层不满的话,则全部为RED。
小结
1 漂亮的注释:JCF的注释的确是比较漂亮的,简单清晰。唯一的不足就是为了保持每个方法注释的完整性,导致有很多重复的注释。当然,对于使用方法有需要才去看注释的程序员来说,这样更方便一点,但是对于完整阅读代码的人来说,貌似有点多余。
2 勿以善小而不为:当看到Iterator的类说明中有改善命名一条时,真的有点感动。
3 大师级的设计和代码复用技术。这个没有什么好说的,喜爱代码的人是在看艺术品。
4 框架代码对性能的有限度强调:在可以提高性能的地方提高性能,但是并不阻止其他人实现子类时提供性能更好的方法。同时,代码并没有因为对一些性能问题的特殊处理而变得丑陋。
5 关于类线程安全性的注释:一般代码哪里看的到这个。
6 几个骨架类的设计和实现都很简洁有力,仅仅使用几个基本方法,就可以实现接口的所有功能。
7 modCount思想。fail-fast的实现机制。
8 平时还是要打好基础,数据结构和算法中对红黑数的插入和删除以前没有怎么看过,只知道概念和用途,直接导致看到TreeMap的时候比较费力。
9 一行行读代码未必是一个好办法,对于JCF的接口和类的体系还是比较熟悉的,因此没有什么问题,但是Map的Iterator和View的继承体系以前没有接触过,看完过自己觉得没有清晰的把握设计思路,动手画画图,真是有如泰山登顶,一览天下的感觉,神清气爽啊。
10 优秀的源代码还是应该早读的,有点后悔为什么拖到现在才开始看JCF,以前干嘛去了。
11 强烈推荐大家都看看JCF。
发表评论
-
java对象的大小_基础知识
2014-09-14 16:51 1766引言 Java的对象被jvm管理,单个对象如何布局,大小如何, ... -
xml encoding和实际编码不同导致xml解析异常
2014-04-10 09:52 5007发现一个xml encoding和实际编码不同导致xml解析异 ... -
按照bit读取或写入java的IO流
2012-11-18 22:00 3799写了个按照bit读取或写入java的IO流的简单代码,保留在博 ... -
类构造函数clinit尽量简单化
2012-01-29 16:30 1408java的类构造方法只能执行一次(不考虑多个类加载器和类卸载的 ... -
使用ImageIO.write存储png格式图片性能较差问题
2011-12-27 19:06 29309目前加载一个png格式的图片,做一些绘图工作,发现ImageI ... -
GC iCMS一次调优
2011-12-23 20:00 0原有GC参数: -server -XX:+UseParNew ... -
[gc] GC调优及awk脚本分析GC日志
2011-07-20 19:26 2129原有GC参数 JAVA_OPTS="-server ... -
jvm性能查看工具
2011-06-18 11:48 1603jps查看所有java进程。 jconsole jvisu ... -
[gc] java内存管理以及GC
2011-03-27 13:25 4468目录 内存管理简介 GC简介 好的Collector的特性 ... -
object的hash code
2011-01-03 19:40 2125sun的jvm默认的hash code返回的是对象的内部地址构 ... -
Enum简介
2010-08-16 21:51 1515java的Enum不同于c的命名整型常量,它本身是有类型的,而 ... -
java1.5中{@inheritDoc}的使用
2010-07-12 23:14 9603java1.5中@Override还不能用 ... -
[code] 大量只读线程安全的FastHashMap
2010-06-25 17:27 2322org.apache.commons.collections. ... -
[code] 继承TableRowSorter的一个小陷阱
2010-01-09 21:54 1293在一个JTable里面想做sorting。 继承了TableR ... -
[code] 多个线程写入,单线程读出的Stream对
2009-11-06 10:38 1739今天想做一个System.out的重定向,想要得的结果是有很多 ... -
深入理解java的finalize
2009-10-11 01:23 19266目录 基本预备相关知 ... -
深入理解java的clone
2009-10-09 14:13 4639目录 预备知识 为什么 ... -
简明OPhone/Android入门体验(有图有源码)
2009-09-25 00:34 3364主要参考 http://code.google.com/p/a ... -
深入理解ReferenceQueue GC finalize Reference
2009-06-22 22:55 20221关于对象如何销毁以及f ...
相关推荐
【标题】"第一行代码Java源代码第13章课程代码Java类集框架"涉及到的是Java编程中的核心概念——类集框架。这个标题表明我们将会深入学习Java编程中关于类库和集合的重要部分,这是Java应用程序开发的基础。"第一行...
7. **集合框架(Collections Framework)**:Java集合框架提供了一组接口和类,如List(ArrayList、LinkedList)、Set(HashSet、TreeSet)和Map(HashMap、TreeMap),方便数据存储和操作。 8. **多线程...
3. **集合框架(Collections Framework)**:Java集合框架包括List、Set、Map等接口及其实现类,如ArrayList、HashSet、HashMap等,用于存储和操作数据。在进销存系统中,可能用到这些集合来管理产品库存、订单信息...
7. **集合框架(Collections Framework)**:如ArrayList、LinkedList、HashMap等,提供数据存储和操作的工具。 8. **输入/输出流(I/O Stream)**:处理数据的读取和写入,如FileInputStream和FileOutputStream。 9...
在"JavaCollectionsTutorial:Java Collections Framework教程的源代码-Source code collection"中,你将找到一系列关于如何使用和理解这个框架的示例代码。 **1. 集合接口:** - **List接口**:代表有序的元素集合...
7. **集合框架(Collections Framework)**:`java.util`包中的ArrayList、LinkedList、HashMap、TreeMap等实现了各种数据结构,源码可以揭示它们的底层实现和性能特点。 8. **I/O流(Input/Output Streams)**:`...
8. **库和API(Library and API)**:Java提供了丰富的标准库,如集合框架(Collections Framework),用于处理数组、列表、队列等数据结构;IO流库(IO Streams)用于文件操作;网络编程库(Networking)支持TCP/IP...
它包含了Java平台的核心类库,如`java.lang`、`java.util`、`java.io`等,提供了丰富的功能,如数据结构、输入/输出、网络通信、集合框架等。对于开发者来说,阅读和理解Java源API有助于提高编程技能,理解内部实现...
1. **ArrayList和LinkedList**: 这两个类是Java集合框架中的重要部分,分别实现了List接口。ArrayList基于动态数组,适用于随机访问,而LinkedList基于双向链表,适合于频繁插入和删除。 2. **HashMap和TreeMap**: ...
4. **java**: 这个目录通常包含了Java语言的核心类库源代码,如集合框架(java.util)、IO流(java.io)、线程(java.lang.Thread)、反射(java.lang.reflect)等。 5. **launcher**: 这部分可能包含了Java应用...
Java语言拥有丰富的标准库,如集合框架(Collections Framework)、输入/输出(I/O)流、网络编程APIs等。集合框架提供了一组接口和类,用于存储和操作对象,如ArrayList、LinkedList和HashMap。I/O流处理数据的读写...
6. **集合框架(Java Collections Framework)**:Java集合框架包括接口(如List, Set, Queue)和实现(如ArrayList, HashSet, LinkedList)等,提供了一种高效管理对象数组的方式。 7. **IO流(Input/Output Stream)*...
10. **集合框架(Collections Framework)**:Java集合框架包括各种接口(如`List`、`Set`、`Queue`)和类(如`ArrayList`、`HashSet`、`LinkedList`),用于存储和操作对象。 11. **输入/输出(I/O)**:Java的`...
这本书专注于Java集合框架,详细解释了ArrayList、LinkedList、HashSet、HashMap等各种集合类的使用和实现。通过阅读这本书,你可以理解如何有效地使用Java Collections API,并且有机会接触到设计模式,比如迭代器...
学习Java集合框架时,可以通过阅读相关的书籍和源代码来加深理解。除了上面提到的书籍之外,还可以考虑以下几个方面: - **Java Collections Framework 的组成部分:** - **接口(Interface):** 如 `List`、`Set` ...
压缩包子文件的文件名“CollectionTest.java”表明这是一个Java源代码文件,很可能包含了对Java集合框架(Collections Framework)的测试代码。Java集合框架是Java库中一组接口和类,用于存储和操作数据,包括List、...
3. **集合框架(Collections Framework)** 集合框架是Java库中的重要部分,包括List、Set、Map等接口以及其实现类。面试中会考察这些接口的特点、使用场景,以及它们之间的关系。源码可能包含如何使用ArrayList、...
5. **集合框架(Collections Framework)**:Java集合框架包括接口(如List、Set、Map)和实现这些接口的类(如ArrayList、HashSet、HashMap),用于存储和操作对象。 6. **多线程(Multithreading)**:Java内置对...
21. **容器类构架(Collections framework)**:Java集合框架包括接口、实现类和算法,提供了丰富的数据结构和算法支持。 22. **构造函数(Constructor)**:构造函数在创建对象时自动调用,用于初始化新创建的对象...
5. **集合框架(Collections Framework)**:Java提供了丰富的集合类,如ArrayList、LinkedList、HashMap等,用于存储和操作对象。 **Java面向对象设计模式:** 1. **单例模式(Singleton)**:确保一个类只有一个...