package com.peace.love.carpo_test.tool;import java.util.List;
import java.util.Map;
import java.util.Set;/*** <p>Can save multiple the value of the map.</p>* Created in 2021/2/20.** @author 一笑奈何;*/
public interface HongDou_MultiValueMap<K, V> {/*** 添加Key-Value。** @param key   key.* @param value value.*/void add(K key, V value);/*** 添加Key-List<Value>。** @param key    key.* @param values values.*/void add(K key, List<V> values);/*** 设置一个Key-Value,如果这个Key存在就被替换,不存在则被添加。** @param key   key.* @param value values.*/void set(K key, V value);/*** 设置Key-List<Value>,如果这个Key存在就被替换,不存在则被添加。* @param key    key.* @param values values.* @see #set(Object, Object)*/void set(K key, List<V> values);/*** 替换所有的Key-List<Value>。** @param values values.*/void set(Map<K, List<V>> values);/*** 移除某一个Key,对应的所有值也将被移除。** @param key key.* @return value.*/List<V> remove(K key);/*** 移除所有的值。* Remove all key-value.*/void clear();/*** 拿到Key的集合。* @return Set.*/Set<K> keySet();/*** 拿到所有的值的集合。** @return List.*/List<V> values();/*** 拿到某一个Key下的某一个值。** @param key   key.* @param index index value.* @return The value.*/V getValue(K key, int index);/*** 拿到某一个Key的所有值。** @param key key.* @return values.*/List<V> getValues(K key);/*** 拿到MultiValueMap的大小.** @return size.*/int size();/*** 判断MultiValueMap是否为null.** @return True: empty, false: not empty.*/boolean isEmpty();/*** 判断MultiValueMap是否包含某个Key.** @param key key.* @return True: contain, false: none.*/boolean containsKey(K key);}
package com.peace.love.carpo_test.tool;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;/*** Created in 2021/2/20.** @author 一笑奈何*/
public class HongDou_LinkedMultiValueMap<K, V> implements HongDou_MultiValueMap<K, V> {protected Map<K, List<V>> mSource = new TreeMap<K, List<V>>();//    protected Map<K, List<V>> mSource = new LinkedHashMap<K, List<V>>();public HongDou_LinkedMultiValueMap() {}@Overridepublic void add(K key, V value) {if (key != null) {// 如果有这个Key就继续添加Value,没有就创建一个List并添加Valueif (!mSource.containsKey(key))mSource.put(key, new ArrayList<V>(2));mSource.get(key).add(value);}}@Overridepublic void add(K key, List<V> values) {// 便利添加进来的List的Value,调用上面的add(K, V)方法添加for (V value : values) {add(key, value);}}@Overridepublic void set(K key, V value) {// 移除这个Key,添加新的Key-ValuemSource.remove(key);add(key, value);}@Overridepublic void set(K key, List<V> values) {// 移除Key,添加List<V>mSource.remove(key);add(key, values);}@Overridepublic void set(Map<K, List<V>> map) {// 移除所有值,便利Map里的所有值添加进来mSource.clear();mSource.putAll(map);}@Overridepublic List<V> remove(K key) {return mSource.remove(key);}@Overridepublic void clear() {mSource.clear();}//返回所有key@Overridepublic Set<K> keySet() {return mSource.keySet();}@Overridepublic List<V> values() {// 创建一个临时List保存所有的ValueList<V> allValues = new ArrayList<V>();// 便利所有的Key的Value添加到临时ListSet<K> keySet = mSource.keySet();for (K key : keySet) {allValues.addAll(mSource.get(key));}return allValues;}@Overridepublic List<V> getValues(K key) {return mSource.get(key);}@Overridepublic V getValue(K key, int index) {List<V> values = mSource.get(key);if (values != null && index < values.size())return values.get(index);return null;}@Overridepublic int size() {return mSource.size();}@Overridepublic boolean isEmpty() {return mSource.isEmpty();}@Overridepublic boolean containsKey(K key) {return mSource.containsKey(key);}}

【开源项目】Android下自定义HASH【支持一个key对应多个value--根据key排序】相关推荐

  1. 【开源项目----Android OPenGLES渲染YUV视频文件】

    [开源项目----Android OPenGLES渲染YUV视频文件] OpenGLES对YUV渲染相关文章参考

  2. android10分区镜像,分区和映像  |  Android 开源项目  |  Android Open Source Project

    分区 Android 设备包含若干个分区,这些分区在启动过程中发挥不同的作用.为了支持 A/B 更新,设备需要为 boot.system.vendor 和 radio 分区分别单独配置一个槽位. bo ...

  3. android的wifi直连,WLAN 直连  |  Android 开源项目  |  Android Open Source Project

    WLAN 直连功能又称"WLAN 点对点",它允许支持设备直接使用 WLAN 直连协议发现其他设备并与之互连(无需连接到互联网或移动网络).此功能是基于 Wi-Fi 联盟 (WFA ...

  4. 【fly-iot飞凡物联】(5):开源项目Apache IoTDB,开源项目学习,原来还有这样的项目,关于IOT的几个开源项目汇总下

    目录 前言 1,关于:开源项目Apache IoTDB 2,还有个admin后台 3,thinglinks项目 4,thingsboard-ui-vue项目 5,apache pulsar项目 6,A ...

  5. 3月份GitHub上最热门的JavaScript开源项目(下)

    开源最前线(ID:OpenSourceTop) 猿妹整编 转载请注明来源作者 3月份GitHub上最热门的JavaScript开源项目新鲜出炉,web界面的JavaScript库Vue强势霸榜,Moz ...

  6. android dtb文件位置_DTB/DTBO 分区  |  Android 开源项目  |  Android Open Source Project

    如果您的 DTB/DTBO 位于专属的分区(例如 dtb 和 dtbo 分区)中,请使用以下表格结构和头文件格式: 图 1. dtb/dtbo 分区布局示例(如需了解 AVB 签名相关信息,请参阅安全 ...

  7. pythongetattribute_对Github上Python开源项目进行分析时遇到的一个AttributeError的解释及其解决方法。...

    最近在分析Github的Python开源项目时候遇到了一些问题,直接上传代码段: import requests import pygal from pygal.style import LightC ...

  8. android ota功能,支持 OTA 更新  |  Android 开源项目  |  Android Open Source Project

    为支持无线下载 (OTA) 更新,引导加载程序必须能够在启动期间访问恢复 RAM 磁盘.如果设备使用未经修改的 AOSP 恢复映像,引导加载程序会读取 misc 分区的前 32 个字节:如果数据与 b ...

  9. Android开源相机库,多相机支持  |  Android 开源项目  |  Android Open Source Project

    在外部视图系统(EVS)1.1中,支持由多个物理摄像头设备组成的逻辑摄像头设备.要使用此虚拟设备,设备实现必须支持Synchronization Framework . 枚举,打开和关闭逻辑摄像头设备 ...

最新文章

  1. 自顶向下 与自底向上解决01 背包问题
  2. python软件下载网站
  3. 第七十六期:3000台服务器不宕机,微博广告系统全景运维大法
  4. 判断闰年(信息学奥赛一本通-T1055)
  5. 数学文化 剩余定理
  6. [转载]MySQL的Galera Cluster配置说明
  7. Single Number 只出现一次的数字 python实现 - ...
  8. 滴滴美团58携程,那些发生在大并购谈判桌背后的故事
  9. Error: invalid operands (*UND* and *UND* sections) for `*‘
  10. 20余年互联网沉浮史:剩者为王
  11. 程序人生之项目团队那些人与事(1)
  12. Mac突然连不上WiFi解决步骤
  13. mac如何升级python,Mac更新Python
  14. win10找回图片查看器
  15. 基于流量分析的安全检测解决方案
  16. 为什么点开桌面计算机那这么慢,电脑桌面刷新反应很慢怎么办?电脑桌面刷新很慢解决方法...
  17. oracle存储过程借助utl,使用UTL_MAIL包实现存储过程邮件发送
  18. 数据全量、增量、比较更新
  19. 数据分析思维(五)|逻辑树思维
  20. 【物联网】27.物联网开发 - 网络

热门文章

  1. input发送a.jax_Java EE 7 / JAX-RS 2.0 – REST上的CORS
  2. 使用Quarkus调试容器中的系统测试(视频)
  3. Project Reactor展开方法
  4. spring条件注解有哪些_Spring4有条件
  5. JVM体系结构101:了解您的虚拟机
  6. Java中的Volatile如何工作? Java中的volatile关键字示例
  7. camel 数据库_使用Camel在来自不同来源的Solr中索引数据
  8. ssh 看apache_使用Apache KeyedObjectPool的ssh连接池
  9. 语言工程中有趣的事情
  10. 防止缓存爆炸的快速提示