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

Map主键的小细节问题

    博客分类:
  • J2EE
F# 
阅读更多
今天同事在帮我测之前写的代码,一件很好玩的事情出现:
//从解压文件中截取每条记录中的CustomerID和它对应的得分字符串
	public static Map getCustomerIDMapUnzipFile(String file){
		String read="";
		File f= new File(file);
		InputStreamReader inputStreamReader =null;
		BufferedReader bufferedReader=null;
		try {
			inputStreamReader = new InputStreamReader(new FileInputStream(f),"UTF-8");
			bufferedReader = new BufferedReader(inputStreamReader);
			while((read = bufferedReader.readLine())!=null){
				int i = read.indexOf("{");//找出O_B_L_RESULT_F_01所在的索引位置
				String s =read.substring(0, i);//取O_B_L_RESULT_F_01的值的字符串
				int index= read.indexOf("{");
				String rt=read.substring(index, read.length());//除去{前面的customerid的部分
				ResultObject resultObject = new ResultObject(rt);
				JSONObject Returns = new JSONObject(resultObject.getResult("OBJECTS", ""));//再把它封装成JSONObject对象
				mapCustomerID.put(s,Returns);
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("从文件读取数据失败!"+e);
		}finally{
			try {
				inputStreamReader.close();
				bufferedReader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return mapCustomerID;
	}

之前我测试一直没的问题,今天他测了下,这个mapCustomerID,mapCustomerID.size()始终为1。原以为是没做循环,又把while中间的信息打印看了,循环了呀!这是为啥!
起初以为是文件的换行问题,控制台打印的信息没的问题,一行一行的打出来。
最后还是在自己的机子上拿回来测。
这才发现了问题的所在:文件的每条数据的"{"之前的数据都是一样的,那么这里就等于说把一样的值当做mapCustomerID的key来放进去。汗!
这样不会报错?
不会!
打印出来的size()为1.,这时存的是什么值呢?
还是写个累来试试看吧:
import java.util.HashMap;
import java.util.Map;

public class MapTest {
	static Map<String,String> map = new HashMap<String, String>();
	public static void main(String[] args){
		MapTest.map.put("1", "2");
		MapTest.map.put("1", "4");
		for (Map.Entry<String, String> entry: map.entrySet()) 
		System.out.println(entry.getValue());
	}
}

控制台打印的结果为4!!!
这时大家应该都明白了,Map的key是不能重复的,已近存在的key,会被重复的覆盖掉!
分享到:
评论

相关推荐

    ofbiz 数据模型 中文手册

    该表中,MAP_KEY和MAP_VALUE都是非空字段,同时MAP_KEY字段也是主键。 再比如,AFFILIATE(联盟)表,它描述了与联盟相关的信息。表中包含了PARTY_ID(当事人标识),AFFILIATE_NAME(联盟名称),AFFILIATE_...

    福建师范大学精品大数据导论课程系列 (6.4.1)--5.1 一种并行编程模型--MapReduce-之四.pdf

    在处理外键关系的连接问题时,MapReduce可以通过在Map阶段创建一个临时键(通常是外键和主键的组合),在Reduce阶段再进行匹配和连接,这样即使键不完全相同,也能正确地完成数据的连接操作。 MapReduce模型的简单...

    ibatis开发指南(中文版)

    综上所述,iBATIS SQL Map 提供了一种强大的解决方案,用于简化数据库访问代码,特别适合那些希望控制SQL语句细节而又不想编写大量代码的开发者。通过其丰富的特性和灵活的配置选项,SQL Map 成为了许多Java应用中不...

    hibernate first

    五、集合映射的细节 1. Set映射:无序且不允许有重复元素,`&lt;set&gt;`标签中可通过`inverse`属性控制关联维护,`order-by`属性指定排序规则。 2. List映射:有序,通过`index`属性指定索引字段,如`list_index`。 3. ...

    JPA标签(注解)详细说明

    - `@MapKey`:用于映射Map类型的关联,指定Map的键是如何映射的。 - `@OrderBy`:用于排序关联集合。 6. **组合**: - `@Embeddable`:定义一个可以被其他实体包含的复合类。 - `@Embedded`:将一个嵌入式类...

    iBATIS 帮助文档

    - **一元条件元素**:如 `&lt;where&gt;`、`&lt;set&gt;` 等,用于自动处理 SQL 语法细节。 - **其他元素**:还包括 `&lt;foreach&gt;`、`&lt;trim&gt;` 等,用于处理循环和修剪多余字符等场景。 #### 八、使用 SQL Map API 编程 - **配置 ...

    MapReduce实现矩阵相乘算法

    最后,`AlgorithmProject`可能是该项目的源代码或者文档,里面可能包含了具体的实现细节,如Mapper和Reducer类的编写,输入输出格式的定义,以及可能的性能测试和结果分析。 总之,使用Hadoop MapReduce实现矩阵...

    ibatis_sqlMap的配置总结

    ### ibatis_sqlMap的配置总结 #### 一、ibatis_sqlMap配置的重要性 在iBatis框架中,SqlMap的配置扮演着极其重要的角色。...熟练掌握这些配置细节,能够显著提升iBatis项目的开发效率和代码质量。

    mapreduce secondarysort

    - 输入的数据集被切分为多个较小的数据块(Splits)。 - 每个Split被转换为键值对的形式,并发送给用户自定义的Map函数进行处理。 - Map函数的输出会被按照键进行分区,并且在发送给Reducer之前,每个分区的数据...

    基于SpringJDBC的BaseDAO

    - **作用**:根据主键删除指定记录。 - **实现细节**: - 构建删除SQL语句并调用`update()`方法执行删除操作。 #### ORM功能实现 为了支持简单的ORM功能,BaseDAO类内部需要实现几个关键的辅助方法,用于动态...

    CQL3.0 for Cassandra 1.2

    CQL引用部分描述了CQL的词法结构、大小写规则、转义字符、有效字面量、指数表示法等语法细节。它还包括了CQL中的数据类型,比如Blob、集合类型、UUID和时间戳类型等。同时,它提供了关于keyspace属性、表属性以及子...

    命中计数器

    在Haskell中,由于其不可变性,我们可以简单地创建一个新的`HitCounter`,而不必担心并发问题。 ```haskell -- 假设我们有一个主键 data PrimaryKey = PrimaryKey String deriving (Eq, Show) -- 使用主键的命中...

    开源ccflow_表结构及字段属性说明

    ccflow的高级用户需要熟悉各个表并掌握关键的表结构,但这并不意味着必须全面掌握所有细节。ccflow的表命名遵循特定规则,通常是前缀(如"Sys_"或"Port_")加上表名,表名多为英文缩写或拼音大写组合,例如"Port_Emp...

    最新java面试题

    Java面试题涵盖了许多核心概念,包括并发安全性、集合框架、语法细节、异常处理、数据库管理、HTTP状态码以及面向对象编程的关键概念。以下是对这些题目所涉及知识点的详细解释: 1. **线程安全**:Vector、...

    SimpleAdapterimple与Sqlite的使用

    例如,可以创建一个名为"Items"的表,包含"id"(主键)、"title"和"description"字段,分别对应ListView的列表项标题和描述。接着,当应用需要填充ListView时,可以从SQLite数据库中查询数据,将其转换为Map列表,再...

    java jap API

    - `@AttributeOverride`:用于覆盖嵌入对象中属性的映射细节。 ### 总结 JPA通过其丰富的批注体系,提供了强大的灵活性和控制力,使得开发人员能够在不同的场景下高效地管理数据持久化。了解并熟练运用这些批注,...

    JAP注解参考

    JPA允许开发者以声明式方式定义Java对象如何与关系数据库表进行映射,从而无需过多关注底层存储细节。在JPA之前,Java EE应用程序通常使用容器管理的实体bean来表示持久化类。然而,通过JPA,任何普通的旧式Java对象...

    ibatis开发手册(pdf)

    - **自动生成的主键**:支持自动为主键字段生成唯一值。 - **存储过程**:支持调用数据库中的存储过程。 - **parameterClass**:指定传递给 SQL 语句的参数类型。 - **parameterMap**:更复杂的参数映射机制,...

    Google写的云计算三篇巨作:BigTable,MapReduce,Google File System

    - MapReduce框架负责作业调度、容错管理和数据分发,开发者只需关注map和reduce函数的实现,无需关心底层分布式系统的细节。 3. **Bigtable** - Bigtable是一种分布式的、结构化的数据存储系统,用于支持Google的...

Global site tag (gtag.js) - Google Analytics