`
coolbi
  • 浏览: 83253 次
  • 性别: Icon_minigender_1
  • 来自: 重庆&南京
社区版块
存档分类
最新评论

关于HashMap的一些东东

    博客分类:
  • J2SE
阅读更多

最近在做一个项目,要求是不能用数据库,数据是从一个文本文件中读取。

于是我就采用HashMap来实现。

首先是从文件中读取出全部数据放入ArrayList中,然后把ArrayList放入HashMap中,然后给这个HashMap创建2个索引,用于展示数据的时候查询方便。

public Map loadGameSchedule(String fileName) throws Exception
	{
		Map result = new HashMap();
		BufferedReader reader = new BufferedReader(new FileReader(fileName));
		//初始化数组
		ArrayList beginDateList = new ArrayList(1000);
		ArrayList beginTimeList = new ArrayList(1000);
		ArrayList endTimeList = new ArrayList(1000);
		ArrayList hostTeamList = new ArrayList(1000);
		ArrayList visitingTeamList = new ArrayList(1000);
		ArrayList remarkList = new ArrayList(1000);
		
		//读取文件,直到文件结束。(返回null表示文件结束)
		String line = null;
		line = reader.readLine();
		while(line != null)
		{
			System.out.println(line);
			String [] param = line.split("\\|");
			
			String beginDate = param[0];
			String beginTime = param[1];
			String endTime = param[2];
			String hostTeam = param[3];
			String visitingTeam = param[4];
			String remar ="";
			
			if(param.length==5)
			{
				try
				{
					remar = param[5]==null?"":param[5];
				}
				catch(Exception e)
				{
					
				}
			}
			
			beginDateList.add(beginDate);
			beginTimeList.add(beginTime);
			endTimeList.add(endTime);
			hostTeamList.add(hostTeam);
			visitingTeamList.add(visitingTeam);
			remarkList.add(remar);
			
			line = reader.readLine();
		}
		
		//填充MAP对象
		result.put("date", beginDateList);
		result.put("beginTime", beginTimeList);
		result.put("endTime", endTimeList);
		result.put("hostTeam", hostTeamList);
		result.put("visitingTeam", visitingTeamList);
		result.put("remark", remarkList);
		reader.close();
		return result ;
	}

 创建索引:

public void createScheduleIndex(Map dataSet,Map dataIdxMap,Map teamIdxMap)
	{
		//取出比赛日期
		ArrayList beginDateList = (ArrayList)dataSet.get("date");
		//取出主队
		ArrayList hostTeamList = (ArrayList)dataSet.get("hostTeam");
		//取出客队
		ArrayList visitingTeamList = (ArrayList)dataSet.get("visitingTeam");
		
		ArrayList dataIdxList = new ArrayList(1000);
		int totalSize = beginDateList.size();
		
		for (int i = 0; i < totalSize; i++)
		{
			String beginDate = (String)beginDateList.get(i);
			String hostTeam = (String)hostTeamList.get(i);
			String visitingTeam = (String)visitingTeamList.get(i);
			
			
			
			ArrayList tempList = (ArrayList)dataIdxMap.get(beginDate);
			if(null == tempList)
			{
				tempList =  new ArrayList();
			}
			
			tempList.add(i);
			
			dataIdxMap.put(beginDate, tempList);
			
			
			
			int beginYear = Integer.parseInt(beginDate.substring(0,2));
			int beginMonth = Integer.parseInt(beginDate.substring(2,4));
			
			String sYear = "";
			String sMonth = "";
			//满足格式要求
			if(beginYear<10)
			{
				sYear = "0" + beginYear;
			}
			else
			{
				sYear = Integer.toString(beginYear);
			}
			if(beginMonth<10)
			{
				sMonth =  "0" + beginMonth;;
			}
			else
			{
				sMonth = Integer.toString(beginMonth);
			}
			
			String hostTeamAndBeginTime = hostTeam+sYear+sMonth;
			String visitingTeamAndBeginTime = visitingTeam+sYear+sMonth;
			
			ArrayList tempList1 = (ArrayList)teamIdxMap.get(hostTeamAndBeginTime);
			//printMap(teamIdxMap);
			//System.out.println(hostTeamAndBeginTime+"=hostTeamAndBeginTime="+tempList1);
			
			if(null == tempList1)
			{
				tempList1 =  new ArrayList();
			}
			tempList1.add(i);
			teamIdxMap.put(hostTeamAndBeginTime, tempList1);
			
			
			ArrayList tempList2 = (ArrayList)teamIdxMap.get(visitingTeamAndBeginTime);
			if(null == tempList2)
			{
				tempList2 =  new ArrayList();
			}
			tempList2.add(i);
			teamIdxMap.put(visitingTeamAndBeginTime, tempList2);
			
		}
	}

 

打印函数:

public static void printMap(Map map)
	{
		/*Iterator it = map.keySet().iterator();
		while (it.hasNext())
		{
			String key;
			key = (String) it.next();
			System.out.println(key + ":" + map.get(key));
		}
		*/
		Set<Map.Entry<String, Integer>> set = map.entrySet();

		Iterator iter = set.iterator();
		while (iter.hasNext())
		{
			Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) iter
					.next();
			System.out.print(entry.getKey());
			System.out.println(":" + entry.getValue());
		}
	}

 测试:

//Calendar now = Calendar.getInstance();
		/*	now.before(arg0)
		//now.set(Calendar.HOUR_OF_DAY, arg1)
		System.out.println(now.get(Calendar.HOUR_OF_DAY)+":"+now.get(Calendar.MINUTE));
		System.out.println("11:30".split(":")[0]);
		now.set(Calendar.YEAR, arg1)
		now.set(Calendar.MONTH, arg1)
		now.set(Calendar.DAY_OF_MONTH, arg1)
		now.set(Calendar.HOUR_OF_DAY, arg1)
		now.set(Calendar.MINUTE, arg1)
		now.set(Calendar.SECOND, arg1)*/
		
		/*now.set(Calendar.MONTH, 11);
		now.set(Calendar.DAY_OF_MONTH, now.get(Calendar.DAY_OF_MONTH)+1);
		int year = now.get(Calendar.YEAR);
		int month = now.get(Calendar.MONTH)+1;
		int day = now.get(Calendar.DAY_OF_MONTH);
		String monthAndDay = year +""+month +""+day;
		System.out.println(monthAndDay);
		*/
		
		/*Calendar now = Calendar.getInstance();
		int month = now.get(Calendar.MONTH)+1;
		int day = now.get(Calendar.DAY_OF_MONTH);
		String monthAndDay = month +"月"+day;
		System.out.println(monthAndDay);*/
		
		
		Nba nba = new Nba();
		
		
		Map dataSet = nba.loadGameSchedule("src/nab.txt");
		
		Map dataIdxMap = new HashMap();
		Map teamIdxMap = new HashMap();
		/*Map nameIdxMap = new HashMap();*/
		nba.createScheduleIndex(dataSet, dataIdxMap,teamIdxMap);
		
		
		
		//nba.createScheduleIndex(dataSet,dataIdxMap,teamIdxMap);
		
		printMap(dataSet);
		System.out.println("******************************************");
		printMap(dataIdxMap);
		System.out.println("******************************************");
		printMap(teamIdxMap);
		
		Calendar today = Calendar.getInstance();
		//today.set(arg0, arg1)
		
		
		//System.out.println(s1.split("|")[1]);
分享到:
评论

相关推荐

    关于hashMap的一些讨论

    HashMap的实现原理的一些讨论,包括数据结构实现,存储数据的实现以及性能参数和Fail-Fas机制。

    关于如何解决HashMap线程安全问题的介绍

    HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?

    个人总结的一些关于hashmap的面试话术

    个人总结的一些关于hashmap的面试话术 简单容易理解 =======================================================================================================================================================...

    HashMap部分源码分析

    HashMap数据结构,HashMap的构造方法,HashMap的put,HashMap的get

    hashmap 实例

    hashmap实例 hashmap实例hashmap实例hashmap实例

    hashmap面试题_hashmap_

    hashmap相关的面试题

    HashMap 概述 精讲 .md

    看完这篇 HashMap,和面试官扯皮就没问题了 - HashMap 概述 - HashMap 和 HashTable 的区别 - 相同点 - 不同点 - HashMap 和 HashSet 的区别 - HashMap 底层结构 - AbstractMap 类 ... - 关于 HashMap 的面

    HashMap介绍和使用

    HashMap介绍和使用

    HashMap原理.docx

    HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap是非synchronized,所以HashMap很快...

    HashMap存放.doc

    HashMap存放.doc

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    HashMap和HashTable都基于哈希表实现,但是它们在使用和性能上存在一些差异。具体来说,HashMap是非同步的,而HashTable是同步的。因此,在多线程环境下,HashTable比HashMap更安全,但是性能可能较差。此外,...

    hashmap实现原理

    hashmap的底层及源码解析,很适合大家的学习,不要积分。

    HashMap排序

    hashMap排序,hashmap使用还是比较频繁。这时自己写的一个实现hashmap排序的例子

    Javascript实现和操作HashMap

    Javascript实现和操作HashMap,压缩包里面有hashmap定义和操作的例子

    HashMap.js

    模拟java中的HashMap类js类对象,可以与js的Array类对象配合使用

    Java SE程序 HashMap类

    Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序...

    HashMap和HashTable的区别和不同

    记得刚毕业那会准备面试,看过不少面试题,里面有个说出HashMap和HashTable不同的题目,我那会面试的时候也遇到不少次这个问题,还隐约记得当时的回答是这样的: HashTable是比较旧的版本;HashTable是线程安全的,...

    HashMap详解(通俗易懂)

    这个文档“ HashMap详解(通俗易懂)”很好的阐述了hashmap的底层数据结构示意,希望对学习java的人有帮助

    HashMap之resize()方法源码解读.docx

    HashMap之resize()方法源码解读,分两部分概述扩容方法涉及到的处理:创建新数组,将旧数组元素转移到新数组上

    HASHMAP缓存.txt

    HASHMAP缓存.txt HASHMAP缓存.txt

Global site tag (gtag.js) - Google Analytics