论坛首页 入门技术论坛

能不能通过一个String迅速索引到一个值?(不用Map这样的类)

浏览 4838 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-06-25  
我现在有一些String在一个strings[]里面
想写一个类, 类里面存储一些"名值对","名"就是strings[]里面的String
通过这个类我可以通过strings里面的某个String得到相应的值
(可能是int之类的,这些值是对象构造好动态赋值进去的)

本来可以通过Map实现,
可是这些对象要长期在系统内存中而不释放所以不想使用Map这些比较大的对象,不然消耗太快
另外也希望不要把strings[]当成一个表然后用轮循的方式查找对应值,最好是能一次就索引到的方法
有什么好的办法呢?   谢谢!
   发表时间:2007-06-25  
Groovy 写道
我现在有一些String在一个strings[]里面
想写一个类, 类里面存储一些"名值对","名"就是strings[]里面的String
通过这个类我可以通过strings里面的某个String得到相应的值
(可能是int之类的,这些值是对象构造好动态赋值进去的)

本来可以通过Map实现,
可是这些对象要长期在系统内存中而不释放所以不想使用Map这些比较大的对象,不然消耗太快
另外也希望不要把strings[]当成一个表然后用轮循的方式查找对应值,最好是能一次就索引到的方法
有什么好的办法呢?   谢谢!

呵呵
0 请登录后投票
   发表时间:2007-06-25  
gigix 写道
Groovy 写道
我现在有一些String在一个strings[]里面
想写一个类, 类里面存储一些"名值对","名"就是strings[]里面的String
通过这个类我可以通过strings里面的某个String得到相应的值
(可能是int之类的,这些值是对象构造好动态赋值进去的)

本来可以通过Map实现,
可是这些对象要长期在系统内存中而不释放所以不想使用Map这些比较大的对象,不然消耗太快
另外也希望不要把strings[]当成一个表然后用轮循的方式查找对应值,最好是能一次就索引到的方法
有什么好的办法呢?   谢谢!

呵呵


我看一般的hashmap实现里面会开一个大概有十来项的数组,
而我能用到的可能只有4,5项,
这样不就浪费了一半的空间吗
0 请登录后投票
   发表时间:2007-06-25  
一般来说Map的使用不太有问题吧?
0 请登录后投票
   发表时间:2007-06-25  
我是怕几万个Map放进去会占用太多内存
0 请登录后投票
   发表时间:2007-06-25  
Groovy 写道
我看一般的hashmap实现里面会开一个大概有十来项的数组,
而我能用到的可能只有4,5项,
这样不就浪费了一半的空间吗

sigh
您做什么火箭科学,需要这样节约内存?
Groovy 写道
我是怕几万个Map放进去会占用太多内存

不要猜,profile it。
0 请登录后投票
   发表时间:2007-06-25  
new HashMap(5);
0 请登录后投票
   发表时间:2007-06-25  
gigix 写道
Groovy 写道
我看一般的hashmap实现里面会开一个大概有十来项的数组,
而我能用到的可能只有4,5项,
这样不就浪费了一半的空间吗

sigh
您做什么火箭科学,需要这样节约内存?
Groovy 写道
我是怕几万个Map放进去会占用太多内存

不要猜,profile it。



就是想看看有没有更好的办法 
那我profile下看看 谢谢
0 请登录后投票
   发表时间:2007-06-25  
Groovy 写道
我现在有一些String在一个strings[]里面
想写一个类, 类里面存储一些"名值对","名"就是strings[]里面的String
通过这个类我可以通过strings里面的某个String得到相应的值
(可能是int之类的,这些值是对象构造好动态赋值进去的)

本来可以通过Map实现,
可是这些对象要长期在系统内存中而不释放所以不想使用Map这些比较大的对象,不然消耗太快
另外也希望不要把strings[]当成一个表然后用轮循的方式查找对应值,最好是能一次就索引到的方法
有什么好的办法呢?   谢谢!


你可以仿HashMap写一个简单的符合自己的要求的map
public class SimpleHashMap<V> {
public Object[][] keyValue= new Object[][2];

public V put(String key, V value) {

    int h = key.hashCode();
    int index = h %keyValue.length;
    if(keyValue[h][1] = null) {
         keyValue[h][1] = value;
    } else {
      // 如果hashcode有重复的,就要用一个象hashmap的Entry类来保存。
    }
}

public V get(String key) {
    int h = key.hashCode();
    int index = h %keyValue.length;
    if(keyValue[h][0].equals(key)) {
         return keyValue[h][1];
    } else {
       // 如果hashcode有重复的,就要从一个象hashmap的Entry类里取。
    }
}

}


我上面的程序有错误,主要是表明一下思路。
你在写自己的类前最好计算一下或测试一下hashmap能不能满足,而不是根据“以为”或“觉得”来做决定。
0 请登录后投票
   发表时间:2007-06-25  
我觉得肯定还是用HashMap来的好,自己写的不一定好过HashMap
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics