この記事のディレクトリ
テキスト内のさまざまな単語の出現数を数えます。
以下は簡略化された Java コードです
import java.util.HashMap;
import java.util.Map;
public class HashMapTest {
public static void main(String[] args) {
String text = "hello world hello my name is jack her name is anna";
String[] words = text.split(" "); // 将文本按空格分隔成单词数组
Map<String, Integer> wordCountMap = new HashMap<>();
for (String word : words) {
if (wordCountMap.containsKey(word)) {
// 如果map中已经存在该单词,则增加计数
int count = wordCountMap.get(word);
wordCountMap.put(word, count + 1);
} else {
// 如果map中不存在该单词,则添加到map,并设置计数为1
wordCountMap.put(word, 1);
}
}
// 遍历输出每个单词出现的次数
for (String key : wordCountMap.keySet()) {
int count = wordCountMap.get(key);
System.out.println(key + ": " + count);
}
}
}
ネットワークリクエスト
多情報レポート
appId: 1234
channel: oppo/huawei
appVersion: 0.0.1
systemType: android/ios
userName: jack/null
上記パラメータの総数は固定ではなく、例えばチャンネルパラメータは棚に並べる前に渡すことはできませんし、userNameはログインしていない場合には渡すことはできません。このとき、HashMap をパラメータとして使用してバックエンドに送信できます。
複数条件クエリ
たとえば、特定の都市の特定の地区にある地下鉄の駅から 500 メートル以内にあるすべてのシングルルームを取得します。
city:深圳市
district: 宝安区
subway_station: 宝安中心
distance: 500
house_type: 单间
これらの条件を増減できるとしても、条件の総数は不確かです。HashMap をパラメータとして使用し、バックエンドに渡すことができます。
Retrofit ライブラリの具体的な使用方法については、この記事を参照してください: Retrofit2 シリーズ: シンプルな Get リクエスト。
このうち、@Body
これら@QueryMap
2 つの入力アノテーションの後に HashMap を続けることができます。例えば:
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
@POST
Call<User> getDataFromServer(@Url String url, @Body HashMap<String,Object> hashMap);
レトロフィットの注釈については、レトロフィット公式ドキュメントを参照してください。
イベントバス
HashMap は EventBus の多くの場所で使用されます。HashMap は、イベントと、このイベントにサブスクライブされたオブジェクトのコレクションを保存するために使用されます。キーはイベント オブジェクトの .class オブジェクトで、値は CopyOnWriteArrayList です。
EventBus の詳細については、コンポーネント通信を実現する EventBus の原理を参照してください。 ソース
コードは以下のとおりです。
public class EventBus {
/** Log tag, apps may override it. */
public static String TAG = "EventBus";
...
//下面的构造器中用到
private static final EventBusBuilder DEFAULT_BUILDER = new EventBusBuilder();
private static final Map<Class<?>, List<Class<?>>> eventTypesCache = new HashMap<>();
//这个是核心HashMap在下面的构造器里面赋值
private final Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType;
...
public static EventBusBuilder builder() {
return new EventBusBuilder();
}
public EventBus() {
this(DEFAULT_BUILDER);
}
EventBus(EventBusBuilder builder) {
...
//在这里new 了个HashMap对象
subscriptionsByEventType = new HashMap<>();
typesBySubscriber = new HashMap<>();
...
}
}
キャッシュ
一般に、キャッシュは LinkedHashMap を使用し、LinkedHashMap は HashMap を継承するため、キャッシュは HashMap を使用しているとも言えます。
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>
{
......
}
グライド画像キャッシュ。キャッシュはさらに複雑なので、後で時間があるときに説明します。