关于集合,实则是分为两大类的:List
和 Set
,Map
只是另类的集合,并不是 Collection
类的一个子类。List
不去重,Map
是键值对,而 Set
则是去重的无序列表。Set
的各个实现类基本都是借助 Map
来实现的,基本原理都一样,这里以 HashSet
为例,其它的实现类可以举一反三。
注:本文基于jdk_1.8.0_162
关于集合,实则是分为两大类的:List
和 Set
,Map
只是另类的集合,并不是 Collection
类的一个子类。List
不去重,Map
是键值对,而 Set
则是去重的无序列表。Set
的各个实现类基本都是借助 Map
来实现的,基本原理都一样,这里以 HashSet
为例,其它的实现类可以举一反三。
注:本文基于jdk_1.8.0_162
前文已经分析了 HashMap
,根据其实现,了解到其元素无序特性。今天来分析下两个能保证元素顺序的 Map
—— 保证插入顺序的 LinkedHashMap
和可自定义排序规则的 TreeMap
,来看看到底是怎么实现有序的。
注:本文基于jdk_1.8.0_162
严格来说,Map
并非集合,而是一个键值对的映射。但是 Map
却可以从某些角度被当作集合。Map
当中,最常用的就是 HashMap
,其余几种实现基本都和 HashMap
有关系或者原理一致。
注:本文基于jdk_1.8.0_144
最近又看起了 springSecurity
,想起了之前遇到的一个关于页面标签的诡异问题:sec:authorize="hasRole('ADMIN')"
可以正确判断,从而正确控制相应的内容显示不显示,但是到了用 sec:authorize-url="/test"
的时候,就不受控制了。对应的链接无论当前用户有没有权限,相应的内容都会显示在页面上。经过了某度上你抄我我抄你,千篇一律的错误答案之后,翻开了官方文档,终于找到了真正的原因。
在我们用 springSecurity
实现了相关权限的处理后,实际 sec:authorize-url
判断链接是否有权限所使用的权限拦截器并不是我们自定义的 CustomerFilterSecurityInterceptor
,而是系统默认指定的 FilterSecurityInterceptor
,所以每次都会显示有权限。
作为Java
中八种基本类型之一的char
的封装类型,String
类可以说是Java程序员每天打交道最多的一个类了。所以,了解String
类的实现与原理是十分有必要的。
注:本文基于jdk_1.8.0_144
1 | public final class String |
由类的构成可以看出: