`
wangxuliangboy
  • 浏览: 210629 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

通过KEY模糊搜索MAP取值

 
阅读更多

public class LikeHashMap extends HashMap {

 public Set keySet() {
  Set set = super.keySet();
  TreeSet tSet = null;
  if (set != null) {
   // 对已存在的key进行排序
   tSet = new TreeSet(set);
  }
  return tSet;
 }

 public List<Object> get(String key,boolean like) {
  List<Object> value = new ArrayList<Object>();
  //是否为模糊搜索
  if(like){
   List<String> keyList = new ArrayList<String>();
   TreeSet<String> treeSet = (TreeSet) this.keySet();
   for (String string : treeSet) {
    //通过排序后,key是有序的.
    if (string.indexOf(key) != -1) {
     keyList.add(string);
     value.add(this.get(string));
    } else if (string.indexOf(key) == -1 && keyList.size() == 0) {
     //当不包含这个key时而且key.size()等于0时,说明还没找到对应的key的开始
     continue;
    } else {
     //当不包含这个key时而且key.size()大于0时,说明对应的key到当前这个key已经结束.不必要在往下找
     break;
    }
   }
   keyList.clear();
   keyList=null;
  }else{
   value.add(this.get(key));
  }
  return value;
 }

 public static void main(String[] args) {
  LikeHashMap hMap = new LikeHashMap();
  for (int i = 0; i < 100000; i++) {
   hMap.put("A_"+i, "AAAAAA"+i);
  }
  long time=System.currentTimeMillis();
  System.out.println(hMap.get("A",true).size());
  System.out.println(System.currentTimeMillis()-time);
 }

}

2
0
分享到:
评论
5 楼 rmn190 2009-02-20  
xbmujfly 写道

我试了一下,在我机子上运行你的代码平均时间是219,我自己改了一下,平均运行时间187,代码如下(机子配置:4G内存,AMD4000+):
package cn.xbmu.lib.jfly.test;

import java.util.*;

/**
* 模糊搜索HashMap
* @author JFly
*/
public class MyLikeHashMap&lt;K, V&gt; extends HashMap&lt;K, V&gt; {

&nbsp;&nbsp;&nbsp; public List&lt;V&gt; get(String key, boolean like) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;V&gt; list = null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (like) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list = new ArrayList&lt;V&gt;();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K[] a = null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set&lt;K&gt; set = this.keySet();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = (K[])set.toArray();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Arrays.sort(a, null);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; a.length; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a[i].toString().indexOf(key) == -1) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add(this.get(a[i]));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return list;
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp; public static void main(String[] args) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyLikeHashMap&lt;String, String&gt; mh = new MyLikeHashMap&lt;String, String&gt;();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 100000; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mh.put("A_" + i, "AAAAAA" + i);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long time = System.currentTimeMillis();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(mh.get("A", true).size());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(System.currentTimeMillis() - time);
&nbsp;&nbsp;&nbsp; }
}




呵呵,我在现在公司用的机子上跑你们两的程序,
楼主的耗时1437, 你的耗时765.

公司的机子还在原始社会呀.
4 楼 rmn190 2009-02-20  
自己研究研究.
3 楼 wangxuliangboy 2008-12-18  
Arrays.sort(a, null); 不能注释掉呀...如果不是有序的话..取得结果会有问题
2 楼 xbmujfly 2008-12-18  
呵呵,注释掉Arrays.sort(a, null); 运行时间都到47了!
1 楼 xbmujfly 2008-12-18  
我试了一下,在我机子上运行你的代码平均时间是219,我自己改了一下,平均运行时间187,代码如下(机子配置:4G内存,AMD4000+):
package cn.xbmu.lib.jfly.test;

import java.util.*;

/**
* 模糊搜索HashMap
* @author JFly
*/
public class MyLikeHashMap<K, V> extends HashMap<K, V> {

    public List<V> get(String key, boolean like) {
        List<V> list = null;
        if (like) {
            list = new ArrayList<V>();
            K[] a = null;
            Set<K> set = this.keySet();
            a = (K[])set.toArray();
            Arrays.sort(a, null);

            for (int i = 0; i < a.length; i++) {
                if (a[i].toString().indexOf(key) == -1) {
                    continue;
                } else {
                    list.add(this.get(a[i]));
                }
            }
        }
        return list;
    }

    public static void main(String[] args) {
        MyLikeHashMap<String, String> mh = new MyLikeHashMap<String, String>();
        for (int i = 0; i < 100000; i++) {
            mh.put("A_" + i, "AAAAAA" + i);
        }
        long time = System.currentTimeMillis();
        System.out.println(mh.get("A", true).size());
        System.out.println(System.currentTimeMillis() - time);
    }
}

相关推荐

    Go-go有序map用于json输出有序key的对象和后端有序循环map取值

    3. **后端有序循环map取值**: - 有序map在后端处理时,可以方便地进行有序遍历,例如在循环中按顺序访问key。这在处理一些需要按照特定顺序执行的操作时非常有用,比如迭代处理数据、渲染模板等。 ```go for _, ...

    Java读取json文件,并转化为map取值

    对于Map取值,你可以使用`get`方法: ```java String key = "exampleKey"; Object value = jsonData.get(key); ``` 如果值是另一个JSON对象或数组,你需要再次进行类型转换。例如,如果`value`是一个`Map`,你可以...

    Mapkey非常好用的键盘插件

    在实际应用中,Mapkey可以通过以下方式提高工作效率: - 对于程序员,可以设置快捷键快速调用常用代码段,或者一键运行编译、测试等命令。 - 设计师可以利用宏功能快速完成重复的绘图动作,如复制、旋转、缩放等。 ...

    嵌套Map或者List获取key、value值

    获取嵌套Map的key和value通常涉及两个步骤:首先,找到嵌套Map的位置,然后从中提取key和value。在Java中,这可以通过`get()`方法实现: ```java String userId = "123"; Map, String&gt; userInfo = users.get(userId...

    模糊查找定义

    模糊查找是一种在数据库或文本中寻找与输入查询相似或部分匹配项的技术,它允许用户在不知道确切关键字的情况下进行搜索。这种技术广泛应用于信息检索、文本分析和数据挖掘等领域,为用户提供更加灵活和人性化的搜索...

    对Map的key和value进行排序

    对Map的key和value进行排序 对Map的key和value进行排序是Java编程中非常重要的一部分。Map是Java集合框架中的一种数据结构,用于存储键值对。然而,在实际应用中,我们经常需要对Map中的key或value进行排序,以满足...

    Java Map 通过 key 或者 value 过滤的实例代码

    Java Map 通过 key 或者 value 过滤的实例代码 Java Map 是一种常用的数据结构,用于存储键值对数据。在实际开发中,我们经常需要对 Map 中的数据进行过滤,以满足特定的业务需求。今天,我们将讨论如何使用 Java ...

    map key and value

    map、 key' 和 value 的 取值 and so on

    Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并

    Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并 Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并

    对Map按key和value分别排序

    "对 Map 按 key 和 value 分别排序" 摘要:本文主要介绍了 Map 按 key 和 value 分别排序的方法,包括使用 TreeMap 的 key 排序和 value 排序两种方式。 Map 按 key 排序 Map 是键值对的集合接口,它的实现类主要...

    SpringBoot+Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名

    总的来说,处理Map中Key的驼峰命名转换是Java开发中的常见需求,通过自定义工具类或利用现有的库,我们可以轻松地解决这个问题,提高代码质量。在实际项目中,还应注意处理异常情况,确保在Key不存在或者格式不正确...

    map中字符串与结构体作key效率比较

    在这个场景中,我们关注的是在C++ STL中的`map`容器中,使用字符串(`std::string`)作为键(key)与使用自定义结构体(struct)作为键在查找效率上的比较。`map`是一个关联容器,它提供了基于键的有序存储,通常...

    json字符串转成 Map/List

    map.put(key, jsonObject.get(key)); } String jsonArrayString = "[{\"key\":\"value\"}]"; JSONArray jsonArray = new JSONArray(jsonArrayString); List&lt;Map, Object&gt;&gt; list = new ArrayList(); for (int ...

    C++读取INI文件中指定Section下的所有key和keyvalue存放到map中

    C++读取INI文件中指定Section下的所有key和keyvalue存放到map中

    C# 汉字或拼音模糊搜索

    在IT领域,尤其是在开发中文应用时,汉字或拼音模糊搜索是一项重要的功能,它允许用户通过输入汉字或拼音来查找相关信息,即便输入不完全准确也能找到匹配的结果。本篇将深入探讨如何在C#环境下实现这样的功能,特别...

    ztree模糊搜索demo

    例如,`setting.data.key`用于设置节点的标识键,`setting.callback.beforeSearch`是搜索前的回调函数,可以在此预处理搜索条件,`setting.callback.onSearch`则是在搜索完成后执行的回调,用于更新和渲染搜索结果。...

    根据map值获取key.txt

    在 Java 编程语言中,`Map` 是一种非常常见的数据结构,它通过键值对的形式存储数据,其中键(Key)是唯一的,而值(Value)可以有多个相同的实例。在实际开发过程中,我们经常会遇到需要根据值(Value)来查找其...

    在STL的map或set容器中使用类作为key

    通过上述示例可以看出,只需要简单地重载 `和 `==` 运算符,我们就可以方便地使用自定义类型作为 `set` 或 `map` 的key,从而有效地管理键值对或有序集合。 此外,对于 `map` 而言,键值(key)是唯一的,并且通常...

    申请Android Google Map API key

    申请Android Google Map API key

    jquery快捷键插件mapkey

    2. **动态添加和删除快捷键**:在运行时,可以通过调用MapKey的API动态添加或移除快捷键,适应不同场景的需求。 3. **事件回调**:除了直接定义快捷键的处理函数,还可以监听快捷键的按下和释放事件,进行更复杂的...

Global site tag (gtag.js) - Google Analytics