最近在做一个项目,要求是不能用数据库,数据是从一个文本文件中读取。
于是我就采用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是一种非常重要的数据结构,在Java编程中扮演着核心角色。它是基于哈希表实现的Map接口的非同步版本,支持所有可选的操作,并允许使用null值和null键。...
在Java编程中,HashMap是一个非常常用的集合类,用于存储键值对数据。然而,它存在一个重要的特性,那就是线程不安全。理解这个问题并找到解决方案是每个Java开发者必须掌握的知识。 HashMap线程不安全的原因主要...
《HashMap面试题详解》 HashMap作为Java集合框架中的重要成员,是面试中常见的知识点,尤其在数据结构与算法、并发编程以及JVM内存管理等领域,HashMap的深入理解至关重要。本篇将围绕HashMap的相关面试题,从基础...
个人总结的一些关于hashmap的面试话术 简单容易理解 =======================================================================================================================================================...
HashMap之resize()方法源码解读 HashMap的resize()方法是HashMap中最核心的方法之一,该方法负责扩容HashMap的容量,以便存储更多的键值对。下面我们将对HashMap的resize()方法进行源码解读,了解其扩容机制和原理...
哈希映射(HashMap)是Java编程语言中广泛使用的数据结构之一,主要提供键值对的存储和查找功能。HashMap的实现基于哈希表的概念,它通过计算对象的哈希码来快速定位数据,从而实现了O(1)的平均时间复杂度。在深入...
### HashMap介绍和使用详解 #### 一、HashMap的数据结构 HashMap是Java集合框架的一个重要组成部分,它实现了Map接口,能够存储键值对映射。在Java编程语言中,最基本的数据结构有两种:数组和引用(模拟指针)。...
### HashMap与HashTable的区别详解 #### 引言 在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,经常被用来存储键值对数据。尽管它们在功能上相似,但在实现细节、性能表现以及使用场景方面存在显著...
以下是一些示例代码,用于展示如何使用 `HashMap` 和 `HashTable`: ```java import java.util.HashMap; import java.util.Hashtable; public class MapDemo { public static void main(String[] args) { // ...
HashMap是Java编程语言中一个非常重要的数据结构,它属于集合框架的一部分,主要用于存储键值对(Key-Value)数据。HashMap在内部实现上基于哈希表,也称为散列表,它提供了一种快速查找、插入和删除数据的方法,...
下面是 HashMap 的一些特性和使用方法总结。 键(Key)的特性 1. 键可以为 null:HashMap 中的键可以为 null,这意味着可以将 null 作为键来存储值。 2. 键不能重复:如果尝试将重复的键添加到 HashMap 中,后添加...
Java HashMap 类详解 本资源详细介绍了 Java 中的 HashMap 类,包括其实现机制、Hash 存储机制、集合存储机制等方面的知识点。 1. HashMap 和 HashSet 的关系 HashMap 和 HashSet 是 Java Collection Framework ...
《HashMap 实例解析与关联数据结构对比》 HashMap 是 Java 中常用的一种数据结构,属于 Java.util 包下的类,它是基于哈希表实现的。在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 ...
然而,JavaScript的对象有一些限制,比如键必须是字符串或Symbol,这可能不满足所有HashMap的需求。因此,我们需要构建一个更完善的HashMap类,支持任意类型的键,并提供更丰富的功能,如容量控制、负载因子、扩容...
HashMap是Java编程语言中常用的集合类之一,它属于哈希表数据结构,提供key-value的存储方式,并且具有快速查询的特性。然而,HashMap本身并不保证元素的顺序,特别是当涉及到遍历或输出HashMap的内容时,顺序可能会...
以下是对该类的一些关键知识点的详细解释: 1. **初始设置**:在创建HashMap对象时,通常需要设定初始容量和负载因子。初始容量是指哈希表在创建时预分配的空间大小,而负载因子则是衡量哈希表负载程度的一个参数,...
下面是一些关于HashMap的基本操作: 1. **初始化**:可以无参数或指定容量和加载因子初始化HashMap。例如: ```java HashMap, String> map = new HashMap(); HashMap, String> map2 = new HashMap(16, 0.75f); ...
以上就是关于如何对`HashMap`进行排序的一些基本方法。无论是按键还是按值排序,都需要根据实际需求选择合适的方法。通过使用`Comparator`接口或自定义比较器,我们可以轻松地实现不同类型的排序操作。这对于处理...
HashMap类在Java编程语言中是集合框架的一部分,它是一个基于哈希表的Map接口实现。HashMap提供了快速的插入、删除和查找操作,平均时间复杂度为O(1)。在这个压缩包“HashMap类.rar”中,包含的是易语言版本的...