update linkedHashmap
This commit is contained in:
@@ -2,12 +2,18 @@
|
|||||||
|
|
||||||
java 中 LinkedHashmap的实现原理。LinkedHashmap继承自 HashMap。
|
java 中 LinkedHashmap的实现原理。LinkedHashmap继承自 HashMap。
|
||||||
|
|
||||||
HashMap是无序的,迭代访问顺序并不一定与插入(put)顺序一致。 迭代顺序与插入顺序一致,这种叫做 插入有序。
|
HashMap是无序的,迭代访问顺序并不一定与插入(put)顺序一致。LinkedHashMap 是有序的, 迭代顺序与插入顺序一致,这种叫做 插入有序。
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
#### 特点
|
#### 特点
|
||||||
|
|
||||||
* 维护一个所有entry的双向链表
|
* 维护一个所有entry的双向链表
|
||||||
* 构造函数 有一个 accessOrder 参数,控制访问顺序 (插入顺序 和 访问顺序); 其中,访问顺序比较适合做 LRU 缓存
|
* 构造函数 有一个 accessOrder 参数,控制访问顺序 (插入顺序 和 访问顺序);
|
||||||
|
* 访问顺序的意思是,当有一个entry被访问以后,这个entry就被移动到链表的表尾。这个特性非常适合 LRU 缓存 (最近最少使用);
|
||||||
|
|
||||||
|
|
||||||
#### 引用场景
|
#### 引用场景
|
||||||
@@ -34,6 +40,14 @@ public class LinkedHashMap<K,V>
|
|||||||
|
|
||||||
transient LinkedHashMap.Entry<K,V> tail;
|
transient LinkedHashMap.Entry<K,V> tail;
|
||||||
|
|
||||||
|
//构造函数如下,
|
||||||
|
public LinkedHashMap(int initialCapacity,
|
||||||
|
float loadFactor,
|
||||||
|
boolean accessOrder) {
|
||||||
|
super(initialCapacity, loadFactor);
|
||||||
|
this.accessOrder = accessOrder;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -41,21 +55,9 @@ public class LinkedHashMap<K,V>
|
|||||||
## 用LinkedHashMap实现LRU
|
## 用LinkedHashMap实现LRU
|
||||||
|
|
||||||
|
|
||||||
构造函数如下
|
构造函数中 accessOrder 参数是控制LinkedHashMap 访问顺序,默认为插入顺序(false), true 代表访问顺序。
|
||||||
|
|
||||||
```
|
访问顺序的意思是,当有一个entry被访问以后,这个entry就被移动到链表的表尾。 这个特性非常适合 LRU 缓存 (最近最少使用) ;
|
||||||
public LinkedHashMap(int initialCapacity,
|
|
||||||
float loadFactor,
|
|
||||||
boolean accessOrder) {
|
|
||||||
super(initialCapacity, loadFactor);
|
|
||||||
this.accessOrder = accessOrder;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
accessOrder 是访问顺序,默认为插入顺序(false), true 代表访问顺序。
|
|
||||||
|
|
||||||
|
|
||||||
访问顺序的意思是,当有一个entry被访问以后,这个entry就被移动到链表的表尾。 这个特性非常适合 LRU 缓存 (最近最少使用) ;
|
|
||||||
|
|
||||||
插入逻辑,运行自定义删除最老entry的逻辑
|
插入逻辑,运行自定义删除最老entry的逻辑
|
||||||
|
|
||||||
|
|||||||
@@ -10,10 +10,24 @@
|
|||||||
|
|
||||||
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
|
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
|
||||||
|
|
||||||
|
思路:这是等差数列求和公式, 1+2+3.......+N =(n+1)n/2
|
||||||
|
|
||||||
分析:
|
分析:
|
||||||
1. 不能使用循环,那就用递归
|
1. 不能使用循环,那就用递归
|
||||||
2. 递归需要终止递归的条件判断语句,这里也不能用if,想其他办法,可以使用 &&逻辑与 运算符(在n>0条件满足是,才会指向后面的递归语句
|
2. 递归需要终止递归的条件判断语句,这里也不能用if,想其他办法,可以使用 &&逻辑与 运算符(在n>0条件满足是,才会指向后面的递归语句
|
||||||
|
|
||||||
|
```
|
||||||
|
int (n){
|
||||||
|
int sum=0;
|
||||||
|
(n>0) && sum=n+factorial(n-1)
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 大数阶乘(factorial)
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
int factorial(n){
|
int factorial(n){
|
||||||
int sum=0;
|
int sum=0;
|
||||||
@@ -23,6 +37,8 @@ int factorial(n){
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 整数的二进制表示中1的个数
|
## 整数的二进制表示中1的个数
|
||||||
|
|
||||||
题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
|
题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
|
||||||
@@ -79,13 +95,16 @@ tmp[i] = tmp[i]>=0 ? tmp[i] : tmp[i]+16;
|
|||||||
|
|
||||||
## ipv4 转 int
|
## ipv4 转 int
|
||||||
|
|
||||||
比如: 10.67.81.35 , 转为int 为
|
比如: 127.0.0.1 , 转为int 为 (01111111 00000000 00000000 00000001)
|
||||||
|
|
||||||
思路:
|
思路:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
代码
|
int toInt(){
|
||||||
|
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
那么,int 转 ipv4 如何解呢?
|
那么,int 转 ipv4 如何解呢?
|
||||||
|
|||||||
Reference in New Issue
Block a user