update linkedHashmap

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