热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请教一个如何在hashmap中查找以特定字符串开头的键值!

假设有如下的HashMap:HashMaphashnewHashMap();hash.put(1$1$1$1,obj1);hash.put(1$1$1$2,obj2)
假设有如下的HashMap:
HashMap hash = new HashMap();
hash.put('1$1$1$1', obj1);
hash.put('1$1$1$2', obj2);
hash.put('1$1$2$1', obj3);
hash.put('1$1$2$2', obj4);
hash.put('1$2$1$1', obj5);
hash.put('2$2$1$1', obj6);
正常情况下能够通过hash.get('2$2$1$1')来获得对应的obj6,
那我现在的问题是如果只传个'1$'而获得'1$1$1$1','1$1$1$2','1$1$2$1','1$2$1$1'
所对应的所有对象,有点像模糊查询的意思1$%.
请教有什么便捷的方法没有,谢谢!
如果这里是一个数组['1$1$1$1','1$1$1$2','1$1$2$1','1$2$1$1','2$2$1$1']
如何取到以'1$1$'开头的项呢?


17 个解决方案

#1


这和HashMap无关 你只要遍历比较就可以了
字符串有个
startsWith(String prefix)
方法

#2


Set set=hash.keySet();
for(Object key : set){
if(key.toString().startsWith("1$"))
System.out.println(hash.get(key));
}

#3


用 TreeMap 做了一个

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Test {

    public static void main(String args[]) {
        Map map = new TreeMap(); 
        map.put("1$1$1$1", "obj1"); 
        map.put("1$1$1$2", "obj2"); 
        map.put("1$1$2$1", "obj3"); 
        map.put("1$1$2$2", "obj4"); 
        map.put("1$2$1$1", "obj5"); 
        map.put("2$2$1$1", "obj6");
        
        List list = get(map, "1$1$1");
        for(String s : list) {
            System.out.println(s);
        }
    }
    
    public static  List get(Map map, String key) {
        String[] strs = map.keySet().toArray(new String[0]);
        List list = new ArrayList();
        boolean isFound = false;
        for(int i = 0; i < strs.length; i++) {
            if(strs[i].startsWith(key)) {
                list.add(map.get(strs[i]));
                isFound = true;
            }else if(isFound){    
                break;
            }
        }
        return list;
    }
}

#4


看来也是,只能去遍历了,就是不知道效率如何?

#5


这种问题,你应该尽量把操作权交给Java,而不是自己去遍历,于是你的TreeMap的类型应该改一改。

#6


那请教healer_kx有什么好的方法么?谢谢!

#7


100分我告诉你。。。 。。。

#8


学习了,“你应该尽量把操作权交给Java,而不是自己去遍历”什么意思

#9


顶,都可以,但感觉楼上的执行效率更高些

#10


顶,都可以,但感觉3楼的执行效率更高些

#11


我开玩笑的,。。。。楼上的,我的意思是说,你遍历的话,不如让Java的JVM去遍历。再比如就是Copy文件,你用流去读写,怎么也赶不上OS的速度啊。
编程,很多时候要借助OS,JVM的能力,而不是自己写。要知道,Java不是C++。C++的一个设计原则就是让用户设计出来的类型和自建类型具有同样的等级,而Java不具有这样的设计原则,于是,你写的一个循环,写的一个类,基本上是无法超越Java本身所提供的类的。让JVM自己转去。


#12


难道是用TreeMap(SortedMap m) 

#13


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Test {

    public static void main(String args[]) {
        Map map = new TreeMap(); 
        map.put("1$1$1$1", "obj1"); 
        map.put("1$1$1$2", "obj2"); 
        map.put("1$1$2$1", "obj3"); 
        map.put("1$1$2$2", "obj4"); 
        map.put("1$2$1$1", "obj5"); 
        map.put("2$2$1$1", "obj6");
        
        List list = get(map, "1$1$1");
        for(String s : list) {
            System.out.println(s);
        }
    }
    
    public static  List get(Map map, String key) {
        String[] strs = map.keySet().toArray(new String[0]);
        List list = new ArrayList();
        boolean isFound = false;
        for(int i = 0; i < strs.length; i++) {
            if(strs[i].startsWith(key)) {
                list.add(map.get(strs[i]));
                isFound = true;
            }else if(isFound){    
                break;
            }
        }
        return list;
    }
}

#14


严禁copy,楼上的什么意思???

#15


好的,谢谢楼上各位给的意见了!结帖了!

#16


不错不错。都好强呀!!!

#17


抗议,13 楼的抄袭!

推荐阅读
  • 缓存这个东西就是为了提高运行速度的,由于缓存是在寸土寸金的内存里面,不是在硬盘里面,所以容量是很有限的。LRU这个算法就是把最近一次使用时间离现在时间最远的数据删除掉。先说说List:每 ... [详细]
  • 我有3个来自RESEARCHS的映射值,指定要使用参考数据集填充的行中的范围。该研究 ... [详细]
  • 本篇文章给大家分享的是有关Java中怎么对HashMap按键值排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • 查找给定字符串的所有不同回文子字符串原文:https://www ... [详细]
  • 第五章:集合01
    第三章:集合01一:集合的框架结构图1.集合和数组的区别:2.Collection集合的方法:publicclassCol ... [详细]
  • 类Hashtable<K,V>所有已实现的接口:Serializable,Cloneable,Map<K,V>此类实现一个哈希表,该哈希表将键映 ... [详细]
  • ***功能:排序*privatestaticvoidoutputRegionStatistics(HashMap<String,Integer>regionMap){ ... [详细]
  • 将学生对象和学生的归属地通过键与值存储到map集合中。importjava.util.HashMap;importjava.util.Iterator;importjava.uti ... [详细]
author-avatar
手机用户2502902345
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有