java 映射类 map-关于java映射类一个问题

问题描述

关于java映射类一个问题

写了一个简易的映射类SimpleStringMap,代码如下:

public class SimpleStringMap {

public SimpleStringMap(){
    bucketArray = new HashEntry[N_BUCKETS];
}

public void put(String key, String value){
    int bucket = Math.abs(key.hashCode())%N_BUCKETS;
    HashEntry entry = findEntry(bucketArray[bucket], key);
    if(entry==null){
        entry=new HashEntry(key, value);
        entry.setLink(bucketArray[bucket]);
        bucketArray[bucket]=entry;
    }else{
        entry.setValue(value);
    }
}

public String get(String key){
    int bucket = Math.abs(key.hashCode())%N_BUCKETS;
    HashEntry entry = findEntry(bucketArray[bucket], key);
    if(entry==null){
        return null;
    }else{
        return entry.getValue();
    }

}

public void delete(String key){
    int bucket = Math.abs(key.hashCode())%N_BUCKETS;
    HashEntry entry = findEntry(bucketArray[bucket], key);
    if(entry!=null){
        entry.deleteValue();
    }
}

private HashEntry findEntry(HashEntry entry, String key){
    while(entry!=null){
        if(entry.getKey().equals(key)) return entry;
        entry=entry.getLink();
    }
    return null;
}

/* 常量*/
private static final int N_BUCKETS=7;

/* 实例变量*/
private HashEntry[] bucketArray;
private int count;

class HashEntry{

    public HashEntry(String key, String value){
        entryKey = key;
    }

    public String getKey(){
        return entryKey;
    }

    public String getValue(){
        return entryValue;
    }

    public void deleteValue(){
         entryValue=null;
    }

    public void setValue(String value){
        entryValue=value;
    }

    public HashEntry getLink(){
        return entryLink;
    }

    public void setLink(HashEntry nextEntry){
        entryLink =  nextEntry;
    }

/* 实例变量*/
private String entryKey;

private String entryValue;

private HashEntry entryLink;

}

}

要求让存储区里的数组可以动态扩展,当项数多于存储区数一半时,重新散列操作。

解决方案

你可以参照Java里面的HashMap源代码

时间: 2024-07-31 05:39:29

java 映射类 map-关于java映射类一个问题的相关文章

Dozer对象映射框架Map到JSONString映射问题排查

引言 Dozer是一个优秀的对象映射的框架,可以帮助程序员减少大量的对象之间映射的get/set代码,在ATA上有好几篇文章介绍了dozer的使用:dozer开发手册使用Dozer帮你提高开发效率(解决繁琐的DO转BO.TO转BO问题) 有兴趣的同学,可以去看下基本的使用. 问题 我在开发后台系统中,经常会遇到从前台提交的对象,转为后台的服务模型对象做操作,通过dozer工具,灵活的配置就可以轻易的解决.我需要将将一个对象的Map对象转为json的字符串,按照dozer的文档需要编写自定义的Co

解析Java的Hibernate框架中的持久化类和映射文件_java

持久化类Hibernate的整个概念是采取从Java类属性的值,并将持久到数据库表.一个映射文件Hibernate的帮助确定如何从拉动类的值,并将它们映射与表和相关的域. 其对象或实例将存储在数据库表中的Java类在Hibernate中称为持久化类. Hibernate的效果最好,如果这些类遵循一些简单的规则,也称为普通Java对象(POJO)编程模型.有下列持久化类的主要规则,但是,这些规则并不是必需的. 将所有的持久化Java类需要一个默认的构造函数. 所有类应该包含为了让容易识别对象内Hi

Java中主要Map类概述

Map: 1.Map的一级接口大概有这三个:SortedMap.ConcurrentMap(1.5).和Bindings(1.6). SortedMap: 1).SortedMap的直接接口有NavigableMap(1.6).间接接口有ConcurrentNavigableMap(1.6).主要实现类有TreeMap. ConcurrentSkipListMap(1.6). 2).SortedMap是一个提供对键值进行排序的接口.排序规则是根据其键的自然顺序进行排序的,或者根据在创建有序映射时

java-Hibernate实体类中属性的映射

问题描述 Hibernate实体类中属性的映射 我的实体类的其中一个属性的类型是InputStream,映射文件中type要为什么?可以是mediumblob吗? 解决方案 hibernate实体类映射hibernate 无主键的表映射实体类2.Hibernate 实体类映射(两种形式) 解决方案二: 搞什么鬼,实体类的属性类型时InputStream??? 难道不应该是byte[]吗?blob什么的也好--inputStream是一个流,它就不是用来储存数据信息的啊喂 如果有必要保存一个"从某

Java的MyBatis框架中XML映射缓存的使用教程_java

MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.默认情况下是没有开启缓存的,要开启二级缓存,你需要在你的SQL映射文件中添加一行: <cache/> 字面上看就是这样.这个简单语句的效果如下: 1.映射语句文件中的所有select语句将会被缓存. 2.映射语句文件中的所有insert,update和delete语句会刷新缓存. 3.缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回. 4.根据时间表(比如 no Flush Inter

Java中的IP地址和InetAddress类使用详解_java

Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源.TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TCP/IP协议,它是Internet中各方所遵循的公共协议.TCP(Transport Control Protocol)是一种传输控制协议,IP(Internet Protocol)是一种网际协议,TCP/IP代表这两个协议的. TCP/IP分为四个层次: 网络接口层:负责接收和发送物理帧: 网络层:

Java中ResultSet数据自动填充到类中&amp;amp;类实例填充PreparedStatement

需求: (1)提取ResultSet中值到一个类中挺麻烦的,需要new一个变量,使用对应成员的Set方法赋值,能不能根据类的Class,直接提取出ResultSet中的数据,最后返回实例化的类? (2)可以用PreparedStatement预编译带变量的sql语句,在execute之前需要将变量值填充进去,一个一个设置太麻烦了,能不能提供一个类变量,使用类成员变量的值自动填充PreparedStatement? 这样的功能许多开源的框架可以实现,但是不想因为这么一点点的需求去学习那么庞大的一套

基础-java 程序中如何获取所有类 或者带注解的类

问题描述 java 程序中如何获取所有类 或者带注解的类 最近写了一个使用注解的mvc的spring框架,这个框架的基础就是要读取到工程中的带有注解的类. 我的实现方法是将工程中的目录全部读取匹配得到.class后缀的所有路径的list,再用class.forname加载对应的类并且将注解读取判断是否为定义的注解.然后使用一个map装起来,在用到的时候拿出来.但是问题来了,我将项目打包jar之后程序是不能够读取到文件的.也就是说获取不到类的全路径如:cn.com.smq.Test 这样的字符串.

计算java常用类型字节大小的工具类

问题描述 /***Name:Sizeof.java*Copyright:zhaozhihua**/packagecom.tywire.tadu.utils;importjava.lang.reflect.Array;importjava.lang.reflect.Field;importjava.lang.reflect.Modifier;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Hashtable;i

Java程序员的日常—— Arrays工具类的使用

这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排序算法,这个还是非常有用的. 所有的方法都是在下面的类中进行测试的: public class ArraysTest { String[] array = new String[]{"a","c","2","1","b&