面试中遇到,但是不会,回来google到,分享下吧,据说是老掉牙的问题
HashMap 是Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap 允许将null 作为一个entry 的key 或者value,而Hashtable 不允许。
HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey。因为contains方法容易让人引起误解。
Hashtable 继承自Dictionary 类,而HashMap
继续阅读 »
以下内容是基于HashMap源码注视的翻译
Hash表是基于Map接口的实现,这种实现提供了所有原始map的操作,允许null value和null key。
HashMap类大致相当于HashTable,只是它是不同步,并允许使用空值。
此类对map秩序的维护不做任何保证;尤其是,它并不保证顺序随着时间的推移,将保持恒定。
此实现提供常数时间复杂度的get和put操作,假设散列函数妥善分散桶与桶之间的元素。
迭代集合视图需要的时间复杂度与HashMap实例 的 "capacity"(存储桶的数目)再加上它的key-value 映射的数量 成正比,
因此如果迭代性能重要的话,非常重要的事情是一定不要把Map的初始容量设置得太高或
继续阅读 »
这一篇可以看做是 Handler 的番外篇。
ThreadLocal
看 Looper 源码的过程中,我们肯定看到过 Looper.myLooper() 的使用,它可以获取与当前线程关联的 Looper 对象,那这个关联是怎么建立起来的?就是通过 ThreadLocal。
继续阅读 »
前言
Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。
TreeMap
基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
HashMap
HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。
Map.Entry返回Collections视图。
按key排序
TreeMap默认是升序的
继续阅读 »
之前看龙书的时候,龙书提到可以在编译器里用动态的生成的NFA自动机来动态匹配自己的输入串,NFA的简单实现其实写起来非常简单,但是我是实际凭感觉写完之后,却觉得并不是非常的好用,在处理自己已经输入过的串,如果还要处理空串和一个符号对应多种路径就势必涉及回溯,所以我就动态生成了一个DFA,应该不是最简的,但是也能满足需求。
DFA状态
``` java
package sample;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Dfa 状态
*
* @author
继续阅读 »
|Map | Java | Python | Go |
|:--------|:-----------------------|:----------|:----------|
|type | Map, HashMap, etc | dict | Map |
|package | import Map | primitive | primitive |
|mutable | Y | Y | Y |
继续阅读 »
AngularJS的一个强大之处就在于依赖注入。在调用bootstrap的时候,会调用createInjector来创建一个注射器进行注入。该方法的代码简化如下:
```javascript
function createInjector(modulesToLoad, strictDi) {
strictDi = (strictDi === true);
var INSTANTIATING = {},
providerSuffix = 'Provider',
path = [],
loadedModules = new HashMap([], true),
继续阅读 »
在这篇文章中我将向你演示如何使用Java8中的foreach操作List和Map
1. Foreach操作Map
1.1 正常方式遍历Map
```java
Map items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);
for (Map.Entry entry : items.entrySet()) {
System.out.println("Item : " + entry.getK
继续阅读 »