摘要: 同一个枚举类的对象如果用HashSet来放就太浪费空间了,因为HashSet内部还是使用HashMap散列方式,对于一个枚举类来说运行前都已经确定了顺序,并且枚举又不会特别多,继续使用HashSet就得不偿失了,JDK中提供EnumSet是专门用于服务枚举类型的,EnumSet和其他Set不太一样的地方,是它是有序的并且不允许插入null 阅读全文
posted @ 2020-04-06 15:44 源码猎人 阅读(193) 评论(0) 推荐(0) 编辑
摘要: TreeSet描述的是Set的一种变体,可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,实际上它是对TreeMap的封装,同HashSet、LinkedHashSet一样,它使用TreeMap的键。 阅读全文
posted @ 2020-04-06 11:39 源码猎人 阅读(632) 评论(0) 推荐(0) 编辑
摘要: HashSet 是HashMap键的封装,我们都知道HashMap是数组+链表或数组+树结构,那么HashSet也是这种结构。HashMap只能存入一个null键,那么HashSet也就只能有一个null值;LinkedHashSet 是LinkedHashMap 键的封装,LinkedHashSet 继承HashSet。 阅读全文
posted @ 2020-04-05 10:22 源码猎人 阅读(317) 评论(0) 推荐(0) 编辑
摘要: Set也是Collection 阅读全文
posted @ 2020-04-04 22:31 源码猎人 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 如果有一个实体类重写了hashCode方法,并且hashCode返回一个固定值,而且需要使用这个实体最为键,我们该怎么办呢?HashMap铁定是没法使用了,因为HashMap使用键hashCode高低位混合对数组长度取余定位位置,使用HashMap的结果就是无论put多少个该实体对象,实际只存了一个键值对。其实JDK中提供了一个Map专门来解决类似这样的问题,对就是IdentityHashMap,再看IdentityHashMap源码时先要搞清楚,它的key和value是在同一个数组里面的,table[i]存放key那么table[i+1]存放key对应的值。 阅读全文
posted @ 2020-04-04 20:34 源码猎人 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 队列是一种特殊的线性表。队列有单向队列和双向队列,队列内部结构多大使用数组和链表存储,一般使用数组存储的都会有初试长度和最大长度等,一般使用链表存储没有长度限制。平时在使用中最好不要像队列中插入null(通常也不允许,LinkedList除外),因为null值通常用于poll方法表示当前队列没有元素了,插入null值poll就有歧义。 阅读全文
posted @ 2020-04-04 10:42 源码猎人 阅读(174) 评论(0) 推荐(0) 编辑
摘要: Hashtable和HashMap一样也是散列表,存储元素也是键值对,Hashtable继承于Dictionary类(Dictionary类声明了操作键值对的接口方法),实现Map接口(定义键值对接口),Hashtable大部分类用synchronized修饰,证明Hashtable是线程安全的 阅读全文
posted @ 2020-04-02 16:37 源码猎人 阅读(233) 评论(0) 推荐(0) 编辑
摘要: WeakHashMap的键是弱键。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,它对应的键值对也就从映射中有效地移除了。 阅读全文
posted @ 2020-04-02 10:12 源码猎人 阅读(146) 评论(0) 推荐(0) 编辑
摘要: HashMap是一种通过空间换时间的方式,会造成空间浪费,而EnumMap内部是以紧凑的数组存储value,但是key必须是enum类型 阅读全文
posted @ 2020-04-01 17:10 源码猎人 阅读(119) 评论(0) 推荐(0) 编辑
摘要: TreeMap集合是基于红黑树(Red-Black tree)的 NavigableMap实现。该集合最重要的特点就是可排序,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序。Tree两张实现排序方法,一种方式是实现java.lang.Comparable接口,并实现其compareTo()方法。第二种方式是单独写一个类去实现java.util.Comparator接口,并实现compare()方法,然后创建实例并作为TreeMap的构造方法参数进行传参 阅读全文
posted @ 2020-04-01 15:49 源码猎人 阅读(161) 评论(0) 推荐(0) 编辑