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

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);}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jaxb xml配置_JAXB和Log4j XML配置文件

jaxb xml配置Log4j 1.x和Log4j 2.x均支持使用XML文件来指定日志记录配置 。 这篇文章探讨了与使用JAXB通过Java类处理这些XML配置文件相关的一些细微差别。 本文中的示例基于Apache Log4j 1.2.17 &#xff0c; Apache Log4j 2.6.2和Java 1.8.0_73&#xff08;带有JAXB xjc 2.2.…

multiprocessing.queue取数据要加锁么_干货 | 小程序多页面接口数据缓存

小程序里面多个页面&#xff0c;有时候会需要用到同一个接口的数据。而这些数据全局来说只需要拉取一遍&#xff0c;如果要存到缓存&#xff0c;要怎么保证其他页面取缓存的时候&#xff0c;数据已经拉取回来了呢&#xff1f;答案是多页面接口数据缓存实现。思路设计其实这种场…

【安卓开发 】Android初级开发(七)MD5加密

//MD5加密public String encrypt(String raw){String md5Str raw;try {MessageDigest md MessageDigest.getInstance("MD5");md.update(raw.getBytes());byte[]encryContext md.digest();int i ;StringBuffer buf new StringBuffer("");for (int offse…

apache.camel_Apache Camel 2.18 –即将推出的功能的亮点

apache.camel骆驼骑士正在忙于即将发布的Apache Camel 2.18版本。 当我们动态更新发行说明时 &#xff0c;这是一种快速查看即将发生的情况的方法。 我只是想在夏天在这里进行快速更新&#xff0c;到目前为止&#xff0c;我们已经完成了简短的重点介绍。 随着发行版的临近和文档…

【安卓开发 】Android初级开发(八)WebView网页

1.网页的基本组成 2.WebView的常用方法 WebView webView findViewById(R.id.webvv);//加载线上网页webView.loadUrl("https://www.baidu.com");//加载SD卡上的html文件,Environment.getDownloadCacheDirectory().getPath()为获取SD卡根目录路径webView.loadUrl(&quo…

python整数加法计算器_Python应用实例赏析2.1简单计算

在日常应用中&#xff0c;我们会经常使用计算器进行计算&#xff0c;有些时候普通计算器的功能不能满足需要&#xff0c;例如使用计算机系统自带的计算器&#xff0c;计算不能超过32位数&#xff0c;手机自带计算器不能超过15位等(我的电脑和手机)&#xff0c;也可能计算需要的…

functor_纯Java中的Functor和Monad示例

functor本文最初是我们使用RxJava进行React式编程的附录。 但是&#xff0c;尽管与React式编程非常相关&#xff0c;但对monad的介绍却不太适合。 因此&#xff0c;我决定将其取出并作为博客文章单独发布。 我知道&#xff0c;“ 我对单子的自己的&#xff0c;一半正确和一半的…

【开源项目】Android开发内置App自动升级

1.准备工作&#xff0c;首先需要在AndroidManifest.xml中的application中加入以下内容 <providerandroid:name"android.support.v4.content.FileProvider"android:authorities"需要更新app的包名.fileprovider"android:grantUriPermissions"true&q…

智能雷达物位计说明书_?浅谈人工检尺法和雷达液位计在油罐液位测量中的应用...

近年来&#xff0c;油罐液位的测量工作已成为工业测量中十分重要的部分。过去&#xff0c;在油罐测量方面&#xff0c;人工检尺法是进行液位测量的主要方法之一&#xff0c;但随着科技的发展和进步&#xff0c;雷达液位计等智能化液位测量设备使油罐的监控和测量方式趋向于多元…

【安卓开发 】Android初级开发(九)Android中封装View提供接口供点击事件回调的方法及使用

自古一楼先上图 package com.example.mydialog;import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.Window; i…

spring 自定义日志_Spring和Hibernate的自定义审核日志

spring 自定义日志如果您需要对所有数据库操作进行自动审核 &#xff0c;并且正在使用Hibernate…&#xff0c;则应使用Envers或spring data jpa auditing 。 但是&#xff0c;如果由于某些原因您不能使用Envers&#xff0c;则可以使用Hibernate事件侦听器和spring事务同步来实…

打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...

前天被老板削了一顿&#xff0c;说我打印的表格连标题行都没有&#xff01;昨天被老板削了两顿&#xff0c;说我打印的表格太浪费纸&#xff01;今天被老板削了五顿&#xff0c;说我表格打印出来的数据居然是错误&#xff01;……在挨削了很多次之后&#xff0c;学会了一些技巧…

机器学习java_如何开始使用Java机器学习

机器学习java什么是开始使用Java机器学习的最佳工具&#xff1f; 他们已经存在了一段时间&#xff0c;但如今看来&#xff0c;每个人都在谈论人工智能和机器学习。 对于科学家和研究人员而言&#xff0c;它已经不再是秘密&#xff0c;几乎可以在任何新兴技术中实现。 在下面的…

【科学工具】矩阵篇

# codingutf-8 import numpy as np# 矩阵加法 Matrix addition ,同型矩阵可以加减操作&#xff0c;即行列数相等 A np.array([[3, 2, 1], [1, 2, 3]]) B np.array([[3, 2, 1], [1, 2, 3]]) print(A B)# 矩阵数乘 Matrix multiplication C np.array([3, 2, 1]) print (C * 2…

nginx delete form表单 收不到参数_HTTP 文件上传的一个后端完善方案(NginX)

(给PHP开发者加星标&#xff0c;提升PHP技能)转自&#xff1a;林伯格https://breeze2.github.io/blog/scheme-nginx-php-js-upload-process前言很多网站都会有上传文件的功能&#xff0c;比如上传用户头像&#xff0c;上传个人简历等等&#xff0c;除非是网盘类的网站&#xff…

fegin 参数丢失_许多参数和丢失的信息

fegin 参数丢失代码越少越好&#xff1f; 对象越少越好&#xff1f; 是真的吗 像往常一样&#xff0c;这取决于。 在某些情况下&#xff0c;通过添加更多内容&#xff0c;我们会添加不必要的复杂性。 当我们仅出于“将来可能需要这种额外的灵活性”而创建接口或其他抽象时&…

【安卓开发 】Android初级开发(十)Android中app自动更新版本号比较

//版本号比较:前者小返回true&#xff0c;前者大返回false public static boolean versionCompareTo(String version1, String version2) {Log.d("输出第一个参数",version1);Log.d("输出第二个参数",version2);version1 version1 null ? "" …

高通写号工具_高通推出桌面平台新ARM处理器并认为我们的电脑性能没必要那么高...

高通公司在日前举办的骁龙技术峰会上宣布推出骁龙7c / 8c处理器 , 这些处理器全部都是面向笔记本电脑推出的。这也是高通和微软合作推出 Windows 10 ARM 设备的组成部分 , 高通希望能够在桌面平台挑战英特尔统治地位。如果你有印象的话或许还记得高通此前推出的骁龙 8cx芯片组&…

java创建一个不可变对象_使用不可变对象创建值对象

java创建一个不可变对象在回答我最近的文章中AutoValue&#xff1a;生成的不可变的值类 &#xff0c; 布兰登认为&#xff0c;这可能是有趣的&#xff0c;看看如何AutoValue比较项目Lombok和Immutables和凯文借调这一点。 我同意这是一个好主意&#xff0c;但是我首先将这篇文章…

混合高斯模型_高斯混合模型(GMM)

下图所示&#xff0c;显然用右边的图描述当前分布更加合理&#xff0c;即应用了两个高斯分布。图中每一个样本点同时属于任何一个高斯模型。高斯混合模型 从几何角度来理解&#xff0c;GMM是由多个高斯分布叠加而成&#xff0c;可以看做是多个高斯分布的加权平均。其中&#x…