关于HashMap的一些东东

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

于是我就采用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]);
Python实战:用BM3D算法给老照片去噪(附完整代码+数据集) 本文详细介绍了如何使用Python和BM3D算法为老照片进行高效去噪。通过完整的代码实现和数据集,读者可以快速掌握图像去噪技术,包括环境配置、算法原理、参数调优及效果评估,帮助恢复珍贵老照片的清晰度。 阅读详情

相关推荐

树莓派介绍与可安装的操作系统

树莓派是一款由英国树莓派基金会开发的信用卡大小的微型计算机。处理器(CPU)内存(RAM)图形处理器(GPU)USB 接口网络接口(以太网和 Wi-Fi)视频输出(HDMI)音频输出用户只需添加电源、存储卡、显示器和输入设备(键盘、鼠标),就可以将其当作一台功能齐全的电脑使用。主要特点:低成本:价格亲民,适合教育和个人项目。小巧便携:体积小,便于携带和部署。功能强大:支持多种编程语言和操作系统,功能不逊于传统电脑。树莓派从最初的教育工具发展成为功能强大的多用途平台。最新的树莓派 5。

像风一样自由的博客 2198

STL hashmap

全网最全STL hash_map使用讲解 这么

u010335911的专栏 4415

WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法

WSL运行make提示/lib//modules/xxx文件或目录不存在。 WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个版本。

weixin_45668903的博客 1万+

为什么HashMap非线程安全

上篇《HashMap底层数据结构原理》我们介绍了HashMap的底层实现方式。其中我们说HashMap是非线程安全的,那么这篇我们就来详细解释为什么HashMap是非线程安全的。 小明:老师,上次讲了HashMap的底层实现原理,学到很多东西。但是HashMap为什么非线程安全呢,一直想不明白。可以给讲讲吗? 老师:好吧,在分析高并发场景之前,我们需要先搞清楚[ReHash]这个概念。 小明...

HelloWorld搬运工 1万+

手把手拆解UCIe协议层:从Raw Mode到Flit Mode,数据包到底经历了什么?

本文深入解析UCIe协议层的数据包处理机制,从Raw Mode到Flit Mode的三大变体(Standard 256B、68B-Enhanced、Latency-Optimized),详细揭示数据包在不同模式下的封装与转换过程。通过工程师视角,展示协议层如何实现多模式动态切换、错误恢复及与D2D Adapter的协同设计,为芯片级互连技术提供实践指导。

weixin_28728495的博客 239

五.EtherCAT开发之STM32F407ZGt6+ LAN9253 外置EEPROM配置数据含义

EtherCAT从站简称ESC,ESC在上电过程中,会自动加载EEPROM中前7个字(1word = 2 byte)到ESC寄存器。ESC寄存器总是可以被EtherCAT主站通过EtherCAT总线访问,无论PDI接口寄存器配置什么值。EEPROM存储器中的前7个字,将决定ESC的工作模式。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 3468

HashMap是什么?HashMap的底层原理是什么?

HashMap?这到底是是个什么东东? 要想了解HashMap,首先我们回到数据结构了解一下 ”散列表“ 散列表,也被称为哈希表,这种数据结构主要提供了键(Key)值(Value)的关系,key-value?听起来是不是很熟悉?没错这就是散列表的本身面目,给出其中一个Key就能找到它所匹配的Value。 我们都知道数组的查询效率要远远高于链表,因为它可以根据下标随机的访问数组元素,其实哈希表本质也是一个数组。 举个栗子,现在有这样一个场景:某大学生小明,一脚踹开校长办公室,大声喊道:“我的学号是“1008

ADMNC的博客 1078

【GameFramework框架内置模块】9、有限状态机(FSM)

这篇文章分享FSM有限状态机,了解过StarForce源码的同学相比都比较了解,GameFramework框架给我们抽象了一个Procedure流程的概念。这个Procedure流程可以方便的处理我们游戏从启动到游戏的各个流程阶段的处理逻辑,实现的核心就是FSM状态机,内部的Procedure流程就是不同的FsmState状态。接下来,就是FSM有限状态机的教程了。有限状态机(Finite-state machine,FSM)

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2533

漫谈HashMap

一直想在csdn上开个博客,写一些Java生态圈的技术类的文章,在与广大程序猿朋友们交流的同时也记录下自己学习的过程和结果,也记录下曾经奋斗的日子与青春。万事开头难,第一篇文章开始的特别艰难,不知道从哪儿开始该写些什么,正好最近有面杭州某互联网公司,这里起个代号叫A吧,和面试官聊得很开心,不得不夸下,也接触过很多公司,但是A公司的面试官真的很有素质,不管面试者水平如何基本都能聊得心里舒服,有的公司...

修行者1988的博客 221

LeRobot 入门教程(十)LIBERO 机器人终身学习评估

LIBERO是一项专注于机器人终身学习(LLDM)的基准测试平台,包含130项任务,分为5大套件(空间推理、物体操作、目标约束等)。LeRobot框架已集成LIBERO,支持单/多套件评估,并兼容SmolVLA模型。训练需使用预处理数据集(HuggingFaceVLA/libero),观测数据需符合规范(8维状态+双摄像头图像)。该平台采用MuJoCo模拟,支持无头服务器运行,旨在推动机器人持续学习算法的发展与标准化评估。

2506_90492529的博客 1663

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

m0_46364958的博客 4345

HashMap底层实现原理(上)

先简单介绍一下 HashMap在JDK1.8之前的实现方式数组+链表, 但是在JDK1.8后对HashMap进行了底层优化,改为了由数组+链表+红黑树实现,主要的目的是提高查找效率。 JDK版本 实现方式 节点数>=8 节点数<=6 1.8以前 数组+单向链表 数组+单向链表 数组+单向链表 1.8以后 数组+单向链表+红黑树...

chinese_zhang的专栏 3093

数学建模学习(78):多输入多输出回归预测模型(结合XGBoost实现)

多输入多输出回归预测问题求解

全栈川川 8130

HashMap的底层原理

HashMap的底层原理 上图中,白色部分是接口,黄色部分是要重点了解的,最好是看一遍源码,绿色部分已经过时,不常用了,但是面试中可能会问到。这里先简单的说一下这几个Map,TreeMap是基于树的实现,HashMap,HashTable,ConcurrentHashMap是基于hash表的实现,下文我们会介绍hash表。HashTable和HashMap在代码实现上,基本上是一样的,和Vector与Arraylist的区别大体上差不多,一个是线程安全的,一个非线程安全,忘记了的朋友可以去看这篇文章,传送

weixin_42029738的博客 671

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

HashMap底层理解(上)

本来想先在专栏里简单的说一下二叉树,红黑树的内容后再说HashMap的,但看到评论区里不断的出现HashMap这个词,怕大家等得着急,本篇文章就先说说HashMap吧,前面讲ArrayList和LinkedList时把源码说得很细,只要理解了这两块内容,本篇内容也很好理解,先来看看HashMap在Map这个大家族中的位置。 上图中,白色部分是接口,黄色部分是要重点了解的,最好是看一遍源码,绿色部分已经过时,不常用了,但是面试中可能会问到。这里先简单的说一下这几个Map,TreeMap是基于树的实现,H

xiaobumi123的博客 356

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HashMap解析

繁琐的代码千篇一律,有趣的思想万中无一

会写代码的斯皮尔伯格 457

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HashMap底层实现原理

Map其实很简单,就是一个key,对应一个value。本章我们重点了解HashMap,话不多说,上代码: 执行构造函数,当我们看到这个new,第一反应应该是这货又在堆内存里开辟了一块空间。 构造函数如下: 似乎简单,就是初始化了一个负载因子 负载因子默认为0.75f,这个负载因子后续会详说。 嘿嘿,又看到了传说中的数组,数组里原对象是Node,来看一下Node是什么鬼 其实很简单,一些属性,一个key,一个value,用来保存我们往Map里放入的数据,next用来标记Node节点的下一个元素。.

qq_36644198的博客 790

HashMap 总结

核心数据结构 在jdk 1.7中,核心数据结构是哈希表+链表,在jdk1.8中是哈希表+链表+红黑树,链表和红黑树主要是为了解决哈希冲突的问题,红黑树主要解决在哈希冲突比较严重的情况下链表的查询效率问题。 哈希表的初始容量为16,加载因子默认为0.76=5。 初始容量 在哈希表初始化时,有这样一段代码 // Find a power of 2 >= toSize int capacity ...

不瘦十斤不换名字 226

HashMap1.7源码

public class HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>, Cloneable, Serializable 文章目录属性内部类构造方法private 方法default 方法public 方法(对外API) 属性 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; static fina

m0_43602209的博客 287

JDK1.8 HashMap put源码剖析

从一个最简单的例子开始剖析hashmap的源码 Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < 10; i++) { map.put(i, i); } 内部都发生了什么? 跟着put方法进去看看 public V put(K key, V value) { return...

_ACME_的博客 1281

※HashMap底层实现原理(全)

HashMap底层实现原理(上) 本来想先在专栏里简单的说一下二叉树,红黑树的内容后再说HashMap的,但看到评论区里不断的出现HashMap这个词,怕大家等得着急,本篇文章就先说说HashMap吧,前面讲ArrayList和LinkedList时把源码说得很细,只要理解了这两块内容,本篇内容也很好理解,先来看看HashMap在Map这个大家族中的位置。 上图中,白色部分是接口,黄色部分是要重点了解的,最好是看一遍源码,绿色部分已经过时,不常用了,但是面试中可能会问到。这里先简单的说一下这几个Ma

MayMatrix 的博客 594

hashmap中用红黑树不用其他树_HashMap在JDK8实现原理分析--一棵棵树

为什么引入的是红黑树? 上一篇文章《HashMap在JDK7实现原理分析》中提到当发生哈希冲突时,一种极端的现象会将HashMap变为一个单项链表,所以导致查询性能下降。大多数同学都知道在JDK8中HashMap引入了红黑树,那红黑树是个什么东东呢,这次花盆了种的不再是糖葫芦(单项链表),而是一棵树了,即红黑树。红黑树是一个相对平衡二叉树,既然有相对平衡就有绝对平衡 绝对平衡二叉树也叫AVL树,它...

weixin_29360387的博客 222

关于HashMap()里的values()方法

Student2student1=newStudent2("李明","男");Student2student2=newStudent2("刘丽","女");Mapstu=newHashMap();stu.put("Jack",student1);stu.put("Rose",student2);System.out.println("键集"+stu.keySet());Sy...

aim73056的博客 710

HashMap只有容量达到阀值才发生扩容吗?大错特错!

看了网上很多文章,说HashMap在元素达到负载因子对应数的时候就发生扩容。如果你看过源码就会发现,其实还有一种情况也可能会发生扩容:树形化的时候。 什么是树形化? HashMap底层是由数组+链表组成的,为了方便不懂的人更容易理解,那我们就先假设HashMap底层就是数组,先不管链表。 那对于一个对象add到HashMap中,那HashMap的add方法是如何来确定这个对象是放在数组中的哪...

1万+
上一篇: Ruby自学笔记2
下一篇: Ruby自学笔记3
coolservices
博客等级 码龄19年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值