![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 79
Tian_Ex
这个作者很懒,什么都没留下…
展开
-
String#intern解析
在Java中,JVM为8种基本类型以及String类型提供了常量池。基于String类型使用常量池,通常有两种方法:在直接使用双引号声明的String对象会直接存储在常量池中。否则,使用String的intern方法。String的intern方法会从字符串常量池中查询当前字符串是否存在,如果不存在则将当前字符串放入常量池,否则返回字符串。原创 2016-01-15 21:22:14 · 433 阅读 · 0 评论 -
HashMap和Hashtable
HashMap和Hashtable都实现了Map接口,HashMap几乎可以等价于Hashtable,它们之间的主要区别在:HashMap继承的父类是AbstractMap,Hashtable继承的父类则是Dictionary;HashMap是非线程安全的,而Hashtable的每个状态访问方法上都有一个synchronized修饰符——线程安全;在单线程环境下,HashMap的性能因此也原创 2016-01-10 16:24:56 · 279 阅读 · 0 评论 -
Java NIO
Java NIO引入了一套新的抽象用于I/O处理。关于NIO主要分为以下几点:缓冲区的操作;内核空间和用户进程空间;虚拟内存和分页;面向流的I/O和面向文件的I/O;多工I/O(就绪性选择);缓冲区操作缓冲区和缓冲区如何操作,是所有I/O的基础。所谓输入和输出无非就是讲数据移入和移出缓冲区。进程执行 I/O 操作,归结起来,也就是向操作系统发出请求,让它要么把缓原创 2016-01-31 16:56:44 · 454 阅读 · 0 评论 -
把Java数组转换为List时的注意事项
现在将一个Java数组转换成List。对此,Arrays这个类中提供了一个asList的方法,但是如果没有慎重思考就随便使用可能会产生一些糟糕的后果。比如执行下面的代码:System.out.println( Arrays.asList(new String[] { "a", "b" })); System.out.println(原创 2016-03-06 09:32:24 · 442 阅读 · 0 评论 -
ConcurrentHashMap解析
同步容器类在执行每个操作期间都会持有一个锁,有时当持有锁花费时间较长,此时其它线程在这段时间内都不能访问该容器,从而导致性能下降。ConcurrentHashMap与HashMap一样,也是一个基于散列的Map,但它使用了一种完全不同的加锁策略来提供更高的并发性和伸缩性。ConcurrentHashMap使用粒度更细的称为分段锁(Lock Striping)的加锁机制实现更大程度的共享。分原创 2016-01-11 10:19:09 · 362 阅读 · 0 评论 -
强引用、软引用、弱引用、虚引用
Java将对象引用分为4种级别,从而使程序更加灵活控制对象的生命周期,这四种级别从高到低依次为:强引用,软引用如果一个对象只有弱引用指向它,垃圾回收器会立即回收该对象,这是一种急切回收方式。相对的,如果有软引用指向这些对象,则只有在JVM需要内存时才回收这些对象。弱引用和软引用的特殊行为使得它们在某些情况下非常有用。例如:软引用可以很好的用来实现缓存,当JVM需要内存时,垃圾回收器就会回收原创 2016-01-14 18:46:04 · 366 阅读 · 0 评论 -
WeakHashMap解析
WeakHashMap是一个带有弱引用key的HashMap实现。Map中的entry将会被删除当其key不再被正常使用,即除了对key的引用外,没有其它对key的强引用。此时key将会被垃圾回收器回收,然后相应的entry会被删除。示例如下:@org.junit.Testpublic void test0() { Map weakMap = new WeakHash原创 2016-01-14 14:34:00 · 412 阅读 · 0 评论 -
equals与==
equals和==的异同:equals和“==”都是用于对象的比较,检查两个对象的相等性;“==”是操作符,因为在Java中操作符不能被重载,所以“==”的行为对每个对象来说都是相同的,而equals是方法,可以根据业务规则的不同进行重写;“==”是基于对象的内存引用来进行比较的,如果两个对象的引用完全相同,即指向同一个对象,则为true;注意:对于既不是float也不是d原创 2016-01-10 16:22:18 · 319 阅读 · 0 评论 -
Java集合概览
Collection类层次图:Map类层次图: Set接口继承了Collection接口。Set集合中不能包含重复的元素,每个元素必须是唯一的。当将元素加入Set中,重复元素会自动移除。有三种常见的Set实现——HashSet, TreeSet和LinkedHashSet。总体而言,当需要一个访问快速的Set,应使用HashSet;需要一个排序的Set,应该原创 2016-01-10 16:28:11 · 290 阅读 · 0 评论 -
Java不可变对象
不可变对象是指一个对象的状态在对象被创建之后就不再变化。不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。创建一个不可变类:将类声明为final,所以它不能被继承;将所有的成员声明为私有的,这样就不允许直接访问这些成员;对变量不要提供setter方法;将所有可变的成员声明为final,这样只能对它们赋值一次;通过构造器初始化所有成员,进行深拷贝(deep copy)原创 2016-01-10 16:27:28 · 5065 阅读 · 0 评论 -
Java异常
异常是发生在程序执行过程中阻碍程序正常执行的错误事件。比如:用户输入错误数据、硬件故障、网络阻塞等都会导致出现异常。 只要在Java语句执行中产生了异常,一个异常对象就会被创建,JRE就会试图寻找异常处理程序来处理异常。如果有合适的异常处理程序,异常对象就会被异常处理程序接管,否则,将引发运行环境异常,JRE终止程序执行。 Java异常处理框架只能处理运行时错误,编译错误不在其考虑范围之内。原创 2016-01-10 16:26:46 · 326 阅读 · 0 评论 -
自动装箱时的问题
在一些Wrapper对象中, 例如Integer,在范围-128 到127之间如果通过“==”进行比较得到的返回值是true的话,那么他们返回的就是相同的对象,但是在这个范围之外就不行。通常是这种行为更多依赖于JVM,因此检查时最好是用equals()方法而避免使用“==”。代码示例:Integer i1 = 200;Integer i2 = 200; if (i1 == i原创 2016-01-10 16:25:50 · 273 阅读 · 0 评论 -
LinkedList和ArrayList
LinkedList和ArrayList的差别主要来自于ArrayList和LinkedList数据结构的不同:ArrayList是基于数组,它使用索引在数组中检索元素是很快的,其获取元素的时间复杂度是O(1),但是插入/删除元素开销很大,因为这需要移动大量元素。LinkedList中插入/删除元素的时间复杂度为O(1),但检索一个元素需要线性时间复杂度。LinkedList需要更原创 2016-01-10 16:24:17 · 298 阅读 · 0 评论 -
PriorityQueue解析
PriorityQueue是一个基于优先级堆的无界队列,它的元素根据自然顺序或者通过实现Comparator接口的自定义排序方式进行排序。一个优先级队列不允许null元素,并且当使用自然顺序排序时,不允许插入一个非排序元素(实现了Comparable接口),这样会导致ClassCastException异常抛出。优先级队列头是一个最小元素按照指定的排序。如果有多个元素并列为最小,则是任选其原创 2016-01-10 16:23:30 · 340 阅读 · 0 评论 -
TreeMap解析
TreeMap基于红黑树的NavigableMap实现。相对于HashMap来说,TreeMap多继承一个NavigableMap接口,因此HashMap的key是无序的,TreeMap的key是有序的,其是根据key的自然顺序或在创建时提供的Comparator来存储元素。TreeMap是非同步的,它返回的迭代器是快速失败的。Comparable和Comparator的区别:Compar原创 2016-01-10 16:18:22 · 331 阅读 · 0 评论 -
HashMap解析
HashMap是基于哈希表的Map接口的实现,允许key和value为null,并且不保证其内部元素的顺序,随着时间推移,同一元素的位置也可能改变(resize)。HashMap有两个因素影响其性能:初始容量(initial capacity)和负载因子(load factor)。初始容量即哈希表创建时桶(bucket)的数量,负载因子是用来衡量在哈希表容量自动扩展之前允许的多满,过高原创 2016-01-16 22:49:21 · 821 阅读 · 0 评论