JAVA知识深度回顾总结-第二天
Java的四种引用,强弱软虚
- 强引用(StrongReference):即使抛出OOM(OutOfMemory)也不会被回收的对象
- 软引用(SoftReference):内存不足时才回收该对象(这个特性适合用来实现缓存)
- 弱引用(WeakReference):gc回收时,不管内存足不足都会回收
- 虚引用(PhantomReference)
- 了解与实际运用
HashCode的作用
- 在JAVA知识基础回顾-1中提到Object的公共方法int hashCode()返回对象的哈希码值
- 常常我们覆写equals的时候都覆写了HashCode,它作为是否是同一个对象的识别
- 浅谈Java中的hashcode方法
ArrayList、LinkedList、Vector的区别
- ArrayList和Vector底层都带有一个Object[]数组,用来保存元素,通过索引访问元素时,只需简单地通过索引访问内部数组的元素;而LinkedList通过一个双向链接的节点列表实现。要通过索引访问元素,你必须查找所有节点,直至找到目标节点。
- Vector和ArrayList一样是数组实现的,二者的差别在于:Vector是线程安全的,所以性能上不如ArrayList
- 区别详谈请入
String、StringBuffer与StringBuilder的区别
- String是创建后不可改变的每次对操作都是对一些对象进行操作,而StringBuffer与StringBuilder是字符串变量,每当我们对它们的字符串操作时都是对一个对象操作。
- 因上所述我们可以看出用String操作字符串速度慢,因为我们要对多个对象进行操作
- StringBuilder是线程不安全的,StringBuffer是线程安全的(由此可以判断StringBuilder速度最快,大多数情况下我们是单线程的操作,所以大多数情况下是建议使用StringBuilder而非StringBuffer)
List、Set、Map、Queue、Stack的特点和用法
- List接口对Collection接口的扩展,可以将任意类型放入List容器中,并在需要时获得。常用的实现类是ArrayList、LinkedList,上面介绍了它们的各自特点区别。
- Set接口也是对Collection接口的扩展,不同于List,不能放入重复的元素,没有下标获取的概念,常用的具体实现类HashSet、TreeSet。HashSet底层是HashMap,能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法。TreeSet底层是TreeMap,能对放入其中的元素进行排序,元素必须实现Comparable接口,重写compareTo()来实现排序。
- Map是一种将建对象和值对象进行并联的容器
- Queue(队列)是先进先出的集合
- Stack(堆栈)是后进先出的集合
我的感受
- 知道了软引用(SoftReference)可以有效的处理缓存一类的操作(^o^)/~
- int hashCode()返回的并不是一定是这个对象的内存地址(不要问我为什么,因为我也不清楚
~~(>_<)~~),等有兴趣的时候再去这研究下。 - ArrayList、Vector底层是数组具有数组的特性,Vector是线程安全的,LinkedList底层是链表具有链表的特性
- 以后单线程记着多用StringBuilder,这样能提高效率
想说的话
- 博客坚持写,不管怎样,今后学习了新的东西就在这里记录一下,以便今后回顾,也希望小小笔记能帮助你们
- 如果内容有什么地方不对,望吐槽,希望大家能一起学习和成长
- 来一句:世界上唯一不变的就是变化,变化非困难,而是挑战。