`
coolbi
  • 浏览: 85706 次
  • 性别: 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的一些讨论 #### 一、HashMap概述 HashMap是一种非常重要的数据结构,在Java编程中扮演着核心角色。它是基于哈希表实现的Map接口的非同步版本,支持所有可选的操作,并允许使用null值和null键。...

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

    在Java编程中,HashMap是一个非常常用的集合类,用于存储键值对数据。然而,它存在一个重要的特性,那就是线程不安全。理解这个问题并找到解决方案是每个Java开发者必须掌握的知识。 HashMap线程不安全的原因主要...

    hashmap面试题_hashmap_

    《HashMap面试题详解》 HashMap作为Java集合框架中的重要成员,是面试中常见的知识点,尤其在数据结构与算法、并发编程以及JVM内存管理等领域,HashMap的深入理解至关重要。本篇将围绕HashMap的相关面试题,从基础...

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

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

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

    HashMap之resize()方法源码解读 HashMap的resize()方法是HashMap中最核心的方法之一,该方法负责扩容HashMap的容量,以便存储更多的键值对。下面我们将对HashMap的resize()方法进行源码解读,了解其扩容机制和原理...

    hashmap实现原理

    哈希映射(HashMap)是Java编程语言中广泛使用的数据结构之一,主要提供键值对的存储和查找功能。HashMap的实现基于哈希表的概念,它通过计算对象的哈希码来快速定位数据,从而实现了O(1)的平均时间复杂度。在深入...

    HashMap介绍和使用

    ### HashMap介绍和使用详解 #### 一、HashMap的数据结构 HashMap是Java集合框架的一个重要组成部分,它实现了Map接口,能够存储键值对映射。在Java编程语言中,最基本的数据结构有两种:数组和引用(模拟指针)。...

    HashMap和HashTable的区别和不同

    ### HashMap与HashTable的区别详解 #### 引言 在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,经常被用来存储键值对数据。尽管它们在功能上相似,但在实现细节、性能表现以及使用场景方面存在显著...

    hashMap和hashTable的区别

    以下是一些示例代码,用于展示如何使用 `HashMap` 和 `HashTable`: ```java import java.util.HashMap; import java.util.Hashtable; public class MapDemo { public static void main(String[] args) { // ...

    HashMap的数据结构

    HashMap是Java编程语言中一个非常重要的数据结构,它属于集合框架的一部分,主要用于存储键值对(Key-Value)数据。HashMap在内部实现上基于哈希表,也称为散列表,它提供了一种快速查找、插入和删除数据的方法,...

    HashMap总结

    下面是 HashMap 的一些特性和使用方法总结。 键(Key)的特性 1. 键可以为 null:HashMap 中的键可以为 null,这意味着可以将 null 作为键来存储值。 2. 键不能重复:如果尝试将重复的键添加到 HashMap 中,后添加...

    Java HashMap类详解

    Java HashMap 类详解 本资源详细介绍了 Java 中的 HashMap 类,包括其实现机制、Hash 存储机制、集合存储机制等方面的知识点。 1. HashMap 和 HashSet 的关系 HashMap 和 HashSet 是 Java Collection Framework ...

    hashmap 实例

    《HashMap 实例解析与关联数据结构对比》 HashMap 是 Java 中常用的一种数据结构,属于 Java.util 包下的类,它是基于哈希表实现的。在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 ...

    基于JavaScript的HashMap实现

    然而,JavaScript的对象有一些限制,比如键必须是字符串或Symbol,这可能不满足所有HashMap的需求。因此,我们需要构建一个更完善的HashMap类,支持任意类型的键,并提供更丰富的功能,如容量控制、负载因子、扩容...

    HASHMAP排序功能描述

    HashMap是Java编程语言中常用的集合类之一,它属于哈希表数据结构,提供key-value的存储方式,并且具有快速查询的特性。然而,HashMap本身并不保证元素的顺序,特别是当涉及到遍历或输出HashMap的内容时,顺序可能会...

    易语言HashMap类

    以下是对该类的一些关键知识点的详细解释: 1. **初始设置**:在创建HashMap对象时,通常需要设定初始容量和负载因子。初始容量是指哈希表在创建时预分配的空间大小,而负载因子则是衡量哈希表负载程度的一个参数,...

    hashmap使用实例

    下面是一些关于HashMap的基本操作: 1. **初始化**:可以无参数或指定容量和加载因子初始化HashMap。例如: ```java HashMap, String&gt; map = new HashMap(); HashMap, String&gt; map2 = new HashMap(16, 0.75f); ...

    HashMap排序

    以上就是关于如何对`HashMap`进行排序的一些基本方法。无论是按键还是按值排序,都需要根据实际需求选择合适的方法。通过使用`Comparator`接口或自定义比较器,我们可以轻松地实现不同类型的排序操作。这对于处理...

    HashMap类.rar

    HashMap类在Java编程语言中是集合框架的一部分,它是一个基于哈希表的Map接口实现。HashMap提供了快速的插入、删除和查找操作,平均时间复杂度为O(1)。在这个压缩包“HashMap类.rar”中,包含的是易语言版本的...

Global site tag (gtag.js) - Google Analytics