随笔分类 - 读书笔记
摘要:集合框架 为了避免进行不必要的随机访问操作,Java引入了一种标签接口RandomAccess, 这个接口没有任何方法,只是一个标签,用来标记一个集合是否应该进行随机访问操作: if (c instanceof RandomAccess) { use random access algorithm
阅读全文
摘要:PriorityQueue类 优先队列不管你按照什么顺序插入元素,出队列的时候元素都是按顺序输出的。也就是每次调用remove的时候,都返回当前队列中最小的元素。然后队列中的元素不是维持排序状态的,如果你迭代这个优先队列中的元素,会发现他们不是排好序的。 优先队列使用堆数据结果,堆是一种自我调整的二
阅读全文
摘要:HashSet类 关于HashMap的实现细节 HashMap是用LinkedList实现的,每个list被称为一个桶(bucket),在hashmap中要查找一个元素,首先对传入的key进行散列,并根据散列函数(最简单的散列函数是取余运算)找到是哪个桶,然后在顺着桶的linkedlist寻找这个k
阅读全文
摘要:LinkedList类 由于基于数组的链表有一个大的缺点,那就是从链表中间移除一个元素时需要将此元素后面的所有元素向前移动,会产生大量的开销,同样的在链表中间插入一个新元素也会有大量开销。如下图: Linkedlist由于其实现方式使用的是指针,或者说是引用,那么就不存在arraylist那种插入或
阅读全文
摘要:集合类中的基本接口 集合类中最基础的接口是Collection: public interface Collection<E> { boolean add(E element); Iterator<E> iterator(); } add方法加一个元素到集合中,如果改变了集合则返回true,如果集合
阅读全文
摘要:泛型对于老代码的支持 Java的泛型设计成类型擦除的目的,很大一部分是为了兼容老老代码。如下的一段代码: void setLabelTable(Dictionary table) table的类型是非泛型的Dictionary,但是我们可以传入泛型的Dictionary: Dictionary<In
阅读全文
摘要:Java泛型 在Java SE7和之后的版本中,在new一个泛型类实例的时候,可以不传入类型参数,因为Java编译器可以通过赋给的变量类型声明推断出来,如下代码: ArrayList<String> files = new ArrayList<>(); 编译器自动将String传入到ArrayLis
阅读全文
摘要:关于Java泛型擦除后,继承一个泛型类带来的问题 有如下泛型类Pair: public class Pair<T> { private T second; private T first; public Pair() { first = null; second = null; } public P
阅读全文