随笔分类 - 基础
摘要:为什么说它特殊,从类图上就可以看出来,它是List、Queue(Deque继承Queue)的实现,相比ArrayList多实现了Deque接口而少实现了RandomAccess接口,从名字就可以看除内部使用链表结构
阅读全文
摘要:同一个枚举类的对象如果用HashSet来放就太浪费空间了,因为HashSet内部还是使用HashMap散列方式,对于一个枚举类来说运行前都已经确定了顺序,并且枚举又不会特别多,继续使用HashSet就得不偿失了,JDK中提供EnumSet是专门用于服务枚举类型的,EnumSet和其他Set不太一样的地方,是它是有序的并且不允许插入null
阅读全文
摘要:TreeSet描述的是Set的一种变体,可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,实际上它是对TreeMap的封装,同HashSet、LinkedHashSet一样,它使用TreeMap的键。
阅读全文
摘要:HashSet 是HashMap键的封装,我们都知道HashMap是数组+链表或数组+树结构,那么HashSet也是这种结构。HashMap只能存入一个null键,那么HashSet也就只能有一个null值;LinkedHashSet 是LinkedHashMap 键的封装,LinkedHashSet 继承HashSet。
阅读全文
摘要:如果有一个实体类重写了hashCode方法,并且hashCode返回一个固定值,而且需要使用这个实体最为键,我们该怎么办呢?HashMap铁定是没法使用了,因为HashMap使用键hashCode高低位混合对数组长度取余定位位置,使用HashMap的结果就是无论put多少个该实体对象,实际只存了一个键值对。其实JDK中提供了一个Map专门来解决类似这样的问题,对就是IdentityHashMap,再看IdentityHashMap源码时先要搞清楚,它的key和value是在同一个数组里面的,table[i]存放key那么table[i+1]存放key对应的值。
阅读全文
摘要:队列是一种特殊的线性表。队列有单向队列和双向队列,队列内部结构多大使用数组和链表存储,一般使用数组存储的都会有初试长度和最大长度等,一般使用链表存储没有长度限制。平时在使用中最好不要像队列中插入null(通常也不允许,LinkedList除外),因为null值通常用于poll方法表示当前队列没有元素了,插入null值poll就有歧义。
阅读全文
摘要:Hashtable和HashMap一样也是散列表,存储元素也是键值对,Hashtable继承于Dictionary类(Dictionary类声明了操作键值对的接口方法),实现Map接口(定义键值对接口),Hashtable大部分类用synchronized修饰,证明Hashtable是线程安全的
阅读全文
摘要:WeakHashMap的键是弱键。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,它对应的键值对也就从映射中有效地移除了。
阅读全文
摘要:HashMap是一种通过空间换时间的方式,会造成空间浪费,而EnumMap内部是以紧凑的数组存储value,但是key必须是enum类型
阅读全文
摘要:TreeMap集合是基于红黑树(Red-Black tree)的 NavigableMap实现。该集合最重要的特点就是可排序,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序。Tree两张实现排序方法,一种方式是实现java.lang.Comparable接口,并实现其compareTo()方法。第二种方式是单独写一个类去实现java.util.Comparator接口,并实现compare()方法,然后创建实例并作为TreeMap的构造方法参数进行传参
阅读全文
摘要:LinkedHashMap扩展了HashMap,是HashMap的二次封装,加入了一个单独链表存所有数据,并且完整保留HashMap结构。
阅读全文
摘要:我们平时最常用的数据结构之一,内部是有键值对构成,Map集合中不能包含重复的键,但是可以包含重复的值。
阅读全文
摘要:HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对
阅读全文
摘要:为什么选择Java?每个人心中都有一个初恋,对没错,java就是我的初恋,没有为什么。对象:世间万物都是对象,我们自身也是对象,不同对象之间的相互作用和通讯构成了完整的现实世界。类:面向对象就是把事物分类的过程。变量:JAVA中变量包括成员变量,局部变量,静态变量
阅读全文
摘要:Vector线程安全的动态数组,跟ArrayList很相似。JDK1.0中添加Vector类。Vector一样可以维护插入顺序,但Vector包含了许多传统的方法,这些方法不属于集合框架。Stack栈是一种只能在一端进行插入或删除操作的线性表,先进后出表
阅读全文
摘要:ArrayList是一个动态数组。ArrayList几乎拥有数组所有优点,例如元素有序,索引访问等;并且一般情况下它还不会越界,添加元素时它能动态扩容。平时工作中ArrayList被我们广泛应用,本章详细介绍ArrayList原代码。
阅读全文
摘要:List接口继承自Collection接口,是Collection三大延伸接口之一。List中的元素都是有序的,并且都支持用索引访问。同时List中的元素允许重复。
阅读全文
摘要:Collection继承自Iterable,Collection接口是Java集合两大分支中的一支,Queue、List、Set都是Collection的扩展;集合大类分为了Collection和Map。常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。
阅读全文

浙公网安备 33010602011771号