博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内部元素一一相应的集合的算法优化,从list到hashmap
阅读量:5158 次
发布时间:2019-06-13

本文共 3218 字,大约阅读时间需要 10 分钟。

说是算法优化,基本上是在吹牛,仅仅只是算是记录下,我写代码时候的思路。毕竟还是小菜鸟。

我要开一个party,与会者都是情侣,可是情侣并非一起过来的,而是有先有后,可是每位与会者来的时候都拿着一束鲜花,第一件事情就是送给自己的伴侣。

设计一个算法,最高效率的解决这个事情。

最開始的时候,是这种。

import java.util.ArrayList;import java.util.List;public class TestParty {	List
persons = new ArrayList
(); void onPersonArrived(Person A){ persons.add(A); String name = getGirlFriendName(); for(Person p:persons){ if(p.getName().equals(name)){ sendFlow(p); } } } private void sendFlow(Person p) { // TODO Auto-generated method stub } private String getGirlFriendName() { // TODO Auto-generated method stub return "小丽"; }}
相当于A来了以后,挨个问全部到场的人的名字,看看跟自己的女朋友名字一样不一样,假设一样,就把花送给他。

可是非常明显,挨个问是非常没有效率的事情。

所以应该用hashmap,所以代码变成这样。

import java.util.HashMap;import java.util.Map;public class TestHashMapParty {		private Map
persons = new HashMap
(); void onPersonArrived(Person A){ persons.put(getPositionByName(A.getName()), A); String name = getGirlFriendName(); Person B = persons.get(getPositionByName(name)); if(B != null){ sendFlow(B); } } private void sendFlow(Person b) { // TODO Auto-generated method stub } private String getGirlFriendName() { // TODO Auto-generated method stub return null; } private String getPositionByName(String name) { // TODO Auto-generated method stub return null; }}
这次我们的party组织的更好了,每一个人来了之后,会从组织者那里依据自己名字拿到自己安排的座位,然后坐上去,同一时候,还能够依据女朋友的名字拿到女朋友的座位,然后直接走过去,把花送给她。

故事到这里讲完了吗?对于一个人来说,故事已经结束了,可是对于代码来说,还没有。

代码里有一个方法叫

private String getPositionByName(String name) {		// TODO Auto-generated method stub		return null;	}
我在这里没有实现,可是假设详细实现的话,应该是某种算法,或者数据库记录。由于java对象全部的记忆功能都是我们代码赋予的。假设我们没有赋予它记住自己女朋友的功能,那么每次给女朋友送花的时候,都须要调用一次这种方法,其实也是低效的。

于是贴出终于的代码。Person.java

public class Person {	private String name;		private String position;		private String girlFriendPosition;		String getName(){		return name;	}	public String getPosition() {		return position;	}	public void setPosition(String position) {		this.position = position;	}	public String getGirlFriendPosition() {		return girlFriendPosition;	}	public void setGirlFriendPosition(String girlFriendPosition) {		this.girlFriendPosition = girlFriendPosition;	}	public void setName(String name) {		this.name = name;	}		}
TestHashMap.java

import java.util.HashMap;import java.util.Map;public class TestHashMapParty {		private Map
persons = new HashMap
(); void onPersonArrived(Person A){ String position = getPositionByName(A.getName()); persons.put(position, A); A.setPosition(position); A.setGirlFriendPosition(getPositionByName(getGirlFriendName())); Person B = persons.get(A.getGirlFriendPosition()); if(B != null){ sendFlow(B); } } private void sendFlow(Person b) { // TODO Auto-generated method stub } private String getGirlFriendName() { // TODO Auto-generated method stub return null; } private String getPositionByName(String name) { // TODO Auto-generated method stub return null; }}

我们给了Person两个成员变量,专门用来记住自己的位置和女朋友的位置。这样效率应该是最高了。可是比較繁琐。

终极优化应该是。

MyMap = new MyMap();B = map.get(A);A = map.get(B);
如今的HashMap是没办法处理null 的,由于A和B不是同一时候来,所以如今的HashMap假设想用A做B的key,B做A的key会遇到NULL问题。

至于MyMap怎么写。以后再研究吧。

转载于:https://www.cnblogs.com/mengfanrong/p/3747817.html

你可能感兴趣的文章
C# 2.0 中的新增功能01 分布类与分部方法
查看>>
关于腾讯ip接口一个流传很广的错误用法
查看>>
XMU 1056 瞌睡 vs 听课 【动态规划】
查看>>
openlayers3中应用proj4js
查看>>
java 浅拷贝和深拷贝
查看>>
对于数组排序类算法的终极解决方案
查看>>
Android 学习 豆瓣学习 sd卡缓存 内存缓存 下拉刷新 日志编辑等
查看>>
如何配置git send-email相关的邮箱信息?
查看>>
修改权限
查看>>
Oracle 数据库基本操作——用户管理与文件管理
查看>>
Java环境/安装问题
查看>>
单链表 - 数据结构
查看>>
读写数据
查看>>
How Crushing Machinery Industry Better Develops Itself
查看>>
Spring框架的事务管理之声明式事务管理的类型
查看>>
身为多年的ubuntu用户。。。
查看>>
Educational Codeforces Round 24
查看>>
并查集 - 优化
查看>>
中文论文-LaTex模板
查看>>
P3538 [POI2012]OKR-A Horrible Poem
查看>>