再见,光华

在走廊看到打电话的同学,忽然想起了海涛兄弟,那天捐款,他捐了100,等我要下楼的时候,他喊住我,又给我一百,我问为啥,他说:“我刚和对象打完电话,这是她要我替她捐的。“当时立刻羡慕起,真心希望以后能有机会参加海涛的婚礼,就要离开伴我四年的光华楼了,四年的生活的一些细节也会不时回想起来。

再见,光华!

碎碎念——距离开学还有不到一周的时间了

暑假过得比我想象中的要快很多,买的两本专业书没一本看完的,都看了一半

这几天忙活驾照晒得贼黑,宅了四年小胖子,一下回到军训后了

距离开学还有不到一周的时间了,研究生新生活就要开始了

刚刚在豆瓣看到了@某健的求交往的帖子,笑得不行了

想打个电话招人聊聊天,却没人接,算了

碎碎念结束,继续看书吧…

Java常用集合包适用场景

1. ArrayList

基于数组方式实现,无容量的限制。

在执行插入元素时可能要扩容,在删除元素时并不会减少数组的容量。

如果希望相应的缩小数组容量,可以调用trimToSize()

在查找元素时要遍历数组,对于非null的元素采取equals的方式寻找。

非线程安全。

2. LinkedList

基于双向链表机制实现。

元素的插入、移动较快。

非线程安全。

3. Vector

基于Object数组的方式来实现的。

基于synchronized实现的线程安全的ArrayList。

在插入元素时容量扩充的机制和ArrayList稍有不同:
如果capcacityIncrement > 0, 则Object数组的大小扩大为现有size加上capcacityIncrement;
如果capcacityIncrement < 0, 则Object数组的大小扩大为现有size的两倍;

4. Stack

基于Vector实现,支持LIFO。

5. HashSet

基于HashMap实现,无容量限制。

不允许元素重复。

非线程安全。

6. TreeSet

基于TreeMap实现,支持排序。

非线程安全。

7. HashMap

采用数组方式存储key、value构成的Entry对象,无容量限制。

基于key hash寻找Entry对象存放到数组的位置,对于hash冲突采用链表的方式来解决。

在插入元素时可能会扩大数组的容量,在扩大容量时会重新计算hash,并复制对象到新的数组中。

非线程安全。

8. TreeMap

基于红黑树实现,无容量限制。

非线程安全。

———————————–
适用场景:

对于查找和删除较为频繁,且元素数量较多的应用,Set或Map是更好的选择;

ArrayList适用于通过为位置来读取元素的场景;

LinkedList 适用于要头尾操作或插入指定位置的场景;

Vector 适用于要线程安全的ArrayList的场景;

Stack 适用于线程安全的LIFO场景;

HashSet 适用于对排序没有要求的非重复元素的存放;

TreeSet 适用于要排序的非重复元素的存放;

HashMap 适用于大部分key-value的存取场景;

TreeMap 适用于需排序存放的key-value场景。