一、HashMap<int,String>是错误的:因为int是基本类型,而key和value要求是对象,所以要用Integer而不是int。HashMap<String,Object>的value一定要是Object类型。

二、HashMap<>同一元素添加二次覆盖

HashMap test = new HashMap<Integer, String>();

test.put(1, "i");

test.put(2, "you");

test.put(3, "she");

test.put(3, "he");

那么,test.size是3,而key为3所对应的value为he。

三、hashmap综合应用实例:

文件region_template基本地域数据,从geoip.txt的ip映射的地域数据中提取省、市信息,补充到region_template后面输出到新文件region_template_analytic。

代码如下:

importjava.io.*;

importjava.util.HashMap;

import java.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.InputStreamReader;

import java.io.OutputStreamWriter;

importjava.util.ArrayList;

importjava.util.Iterator;

importjava.util.List;

importjava.util.Set;

importjava.util.Vector;

importcom.vpon.wizad.etl.util.Region;

public classmappingToRegion_template {

private HashMap<String, Region>myRegionTemplates;

private HashMap<String, Region>RegionAnalytic;

public mappingToRegion_template(StringregionFile)

throwsUnsupportedEncodingException, FileNotFoundException {

this.myRegionTemplates = newHashMap<String, Region>();

this.RegionAnalytic = newHashMap<String, Region>();

File allRegion = newFile(regionFile);

BufferedReader br = null;

String line = "";

String cvsSplitBy =",";

if (allRegion == null)

System.out.println("nofile of" + regionFile);

else {

try {

br = newBufferedReader(new InputStreamReader(new FileInputStream(regionFile),"utf-8"));

while((line = br.readLine()) != null) {

//Skip empty lines.

if(line.matches("^[\\n\\s]+$")) {

continue;

}

String[]row = line.split(cvsSplitBy);

//                                           System.out.println(line.toString());

StringregionID = row[0];

StringregionName = row[1];

booleancountry = false;

booleanprovince = false;

intcityLevel = 0;

if(row[2].equals("1")) {

country= true;

}

if(row[3].equals("1")) {

province= true;

}

try{

cityLevel= Integer.parseInt(row[4]);

}catch (Exception e) {

cityLevel= 0;

}

StringparentRegionID = row[5];

if(!parentRegionID.matches("\\d+")) {

parentRegionID= null;

}

//                                           if(regionName.matches("^包")){

//                                           System.out.println(regionName);

//

//                                  }

if(regionName.matches("(.*)(市|省)$")){//thesame as "(.*)[市省]$"

//if(regionName.endsWith("省")|regionName.endsWith("市")){

regionName= regionName.substring(0, regionName.length()-1);

}elseif( regionName.matches("(.*)(区)$") )

{

if(regionName.startsWith("内蒙古")){

regionName= regionName.substring(0,3);

}else{

regionName= regionName.substring(0,2);

}

//                                                     System.out.println(regionName);

}

Regionregion = new Region(regionID, regionName, country,province, cityLevel,parentRegionID);

//                                           System.out.println(region.getName());

if(this.myRegionTemplates.containsKey(regionName))

System.out.println(regionName);

this.myRegionTemplates.put(regionName,region);

this.RegionAnalytic.put(regionID,region);

}

} catch (FileNotFoundExceptione) {

e.printStackTrace();

} catch (IOExceptione) {

e.printStackTrace();

} finally {

if (br !=null) {

try{

br.close();

}catch (IOException e) {

e.printStackTrace();

}

}

}

}

//               吉林处理后的问题,少了

System.out.println(this.myRegionTemplates.size());

System.out.println(this.RegionAnalytic.size());

}

private void mapADAssociation(StringgeoipFile) throws IOException

{

System.out.println("pid:"+this.myRegionTemplates.get("吉林").getRegionID());

int regionNumber =this.RegionAnalytic.size();

BufferedReader br = null;

String line = "";

String FilesplitBy ="\t";

try{

br = newBufferedReader(new InputStreamReader(new FileInputStream(

geoipFile),"utf-8"));

while ((line =br.readLine()) != null) {

// Skipempty lines.

if(line.matches("^[\\n\\s]+$")) {

continue;

}

String[]row = line.split(FilesplitBy);

Stringgeoip_province = row[2];

Stringgeoip_city = row[3];

//city isnull: prosses as province

if(geoip_city == null) {

if(geoip_province == null) {

thrownew RuntimeException("province and city are both null");

}else{

geoip_city= geoip_province;

}

}

//System.out.println(geoip_province+","+geoip_city);

if(geoip_province.matches("国外"))

continue;

if(geoip_province == geoip_city) {

if(this.myRegionTemplates.containsKey(geoip_province)) {

continue;

}else {

System.out.println(geoip_province);

thrownew RuntimeException("illegal province: no that " + geoip_province);

}

} else {

if(this.myRegionTemplates.containsKey(geoip_city)){

continue;

}else{

//                                                     System.out.println(geoip_province+","+geoip_city);

RegionparentRegion = this.myRegionTemplates.get(geoip_province);

StringparentRegionID= parentRegion.getRegionID();

booleancountry = false;

booleanprovince = false;

int cityLevel = 0;

String regionID =Integer.toString(++regionNumber);

Region region = new Region(regionID,geoip_city, country, province, 0, parentRegionID);

//                         this.myRegionTemplates.put(geoip_city, region);

this.RegionAnalytic.put(regionID,region);

}

}

}

} catch (RuntimeException e){

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (br != null) {

try {

br.close();

} catch(IOException e) {

e.printStackTrace();

}

}

}

}

private void writeToFile(StringoutputFile) throws IOException {

File file = newFile(outputFile);

if(!file.exists())

file.createNewFile();

FileOutputStream out=newFileOutputStream(file,true);

System.out.println(this.myRegionTemplates.size());

System.out.println(this.RegionAnalytic.size());

for(int i = 1; i <=this.RegionAnalytic.size(); i++)

{

Region outRegion =this.RegionAnalytic.get(Integer.toString(i));

int isCountry = outRegion.isCountry()?1:0;

int isProvince =outRegion.isProvince()?1:0;

StringBuffer sb =new StringBuffer(outRegion.getRegionID()+","+outRegion.getName()

+","+isCountry+","+isProvince+","+outRegion.getCityLevel()+","+outRegion.getParentRegionID()+"\n");

//                         StringBuffer sb=newStringBuffer(outRegion.toString());

out.write(sb.toString().getBytes("utf-8"));

}

}

public static void main(String[] args)throws Exception {

String regionFile = "F:/region_template/region_template";

String geoipFile ="F:/geoip.txt";

String outputFile ="F:/region_template_analytic/region_template_analytic";

mappingToRegion_template db =new mappingToRegion_template(regionFile);

db.mapADAssociation(geoipFile);

db.writeToFile(outputFile);

}

}

hashmap简单实例(个人使用经验)的更多相关文章

  1. resteasy简单实例

    1.建一个maven web项目 新建一个maven项目,next,第一个框不要勾选 选择maven-archetype-webapp,建一个web项目 键入项目组织id与项目id 一般此时搭建的只是 ...

  2. jsonrpc环境搭建和简单实例

    一.环境准备 下载需要的jar包和js文件,下载地址:https://yunpan.cn/cxvbm9DhK9tDq  访问密码 6a50 二.新建一个web工程,jsonrpc-1.0.jar复制到 ...

  3. Hibernate(二)__简单实例入门

    首先我们进一步理解什么是对象关系映射模型? 它将对数据库中数据的处理转化为对对象的处理.如下图所示: 入门简单实例: hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中 ...

  4. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  5. 修改js confirm alert 提示框文字的简单实例

    修改js confirm alert 提示框文字的简单实例: <!DOCTYPE html> <html> <head lang="en"> & ...

  6. 利用navicat创建存储过程、触发器和使用游标的简单实例

    利用navicat创建存储过程.触发器和使用游标的简单实例 标签: navicat存储过程触发器mysql游标 2013-08-03 21:34 15516人阅读 评论(1) 收藏 举报  分类: 数 ...

  7. 【转】Android Https服务器端和客户端简单实例

    转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 ...

  8. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  9. vue路由的简单实例

    vue2.0 和 vue1.0 路由的语法还是有点稍微的差别,下面介绍一下vue-router 2的简单实例: <!DOCTYPE html> <html lang="en ...

随机推荐

  1. day4 liaoxuefeng--调试、线程、正则表达式

    一.错误.调试和测试 二.进程和线程 三.正则表达式

  2. 选项卡js版封装

    以下是封装函数: // id:最外边大盒的id名function tab(id,ev){                var oWrap = document.getElementById(id); ...

  3. linkList hashSet ArrayList IO 序列化 1.1.瞬态transient .字符编码表 Properties

      Day12 IO  序列化 .递归_递归的概念_注意事项 1.递归:方法的递归调用--它是一种方法调用的方式--方法可以调用其本身 2.注意事项: 1).递归必须要有一个"出口(结束的条 ...

  4. vue-cli搭建项目的目录结构及说明

    vue-cli基于webpack搭建项目的目录结构 build文件夹 ├── build              // 项目构建的(webpack)相关代码    │ ├── build.js   ...

  5. Java8 按照类属性去重

    测试po package com.shiwulian.test.po; public class Person {private String id;private String name;priva ...

  6. 自己创建一个android studio在线依赖compile

    我正参加2016CSDN博客之星评选麻烦帮下 奖品我随机送给投票者(写一个随机数抽取) http://blog.csdn.net/vote/candidate.html?username=qfanmi ...

  7. 从Stage角度看cassandra write

    声明 文章发布于CSDN cassandra concurrent 具体实现 cassandra并发技术文中介绍了java的concurrent实现,这里介绍cassandra如何基于java实现ca ...

  8. HTTP状态码总结

    HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.有些 App 端接口与 HTML 接口用的是同一个,所以做移动端开发也有必要了解一下HTTP状态码 ...

  9. html5全解析

    htm是软件开发中非常基础的知识,也是很重要的知识,在web中是很重要的知识点,在此梳理一下主要内容: 1.HTML是什么? 全称为HyperText Markup Language,超文本标记语言, ...

  10. Ajax框架,DWR介绍,应用,例子

    使用Ajax框架 1. 简化JavaScript的开发难度 2. 解决浏览器的兼容性问题 3. 简化开发流程 常用Ajax框架 Prototype 一个纯粹的JavaScript函数库,对Ajax提供 ...