内部元素一一相应的集合的算法优化,从list到hashmap
说是算法优化,基本上是在吹牛,仅仅只是算是记录下,我写代码时候的思路。毕竟还是小菜鸟。
我要开一个party,与会者都是情侣,可是情侣并非一起过来的,而是有先有后,可是每位与会者来的时候都拿着一束鲜花,第一件事情就是送给自己的伴侣。
设计一个算法,最高效率的解决这个事情。
最開始的时候,是这种。
import java.util.ArrayList;
import java.util.List; public class TestParty { List<Person> persons = new ArrayList<Person>(); 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<String,Person> persons = new HashMap<String,Person>(); 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<String,Person> persons = new HashMap<String,Person>(); 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怎么写。以后再研究吧。
内部元素一一相应的集合的算法优化,从list到hashmap的更多相关文章
- std::set 中内部元素有序条件删除的理解
std::set 中内部元素有序条件删除的理解 1. std::set中的元素是有序排列的 注意:Set集合中的元素通过iterator的引用,但是不能修改. 元素排序: (1)元素中实现比较oper ...
- JS/jquery获取iframe内部元素和ifame中获取外部元素精华
1.从外部获取iframe内部元素方法: js : window.frames['frame'].document.getElementById("imglist"); //f ...
- Canvas 内部元素添加事件处理
目录 前言 自定义事件 有序数组 元素父类 事件判断 其他 立即执行函数 apply, call, bind addEventListener 传参 调用父类的构造函数 对象检测 isPointInP ...
- ScrollView内部元素如何做到fill_parent 或者 match_parent?
转 : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0704/1629.html ScrollView滚动视图是指当拥有很多 ...
- 【HTML5】Canvas 内部元素添加事件处理
前言 canvas 没有提供为其内部元素添加事件监听的方法,因此如果要使 canvas 内的元素能够响应事件,需要自己动手实现.实现方法也很简单,首先获得鼠标在 canvas 上的坐标,计算当前坐标在 ...
- div内部元素居中
要让div内部元素垂直居中,则给div加上此css样式: .div-vertical-middle{ height:200px; width:304px; line-height:50px; ...
- ext.net gridlist选择内部元素时自动选择所在行
function changeSelection(id) { var index = 0; for (var i = 0; i < mcp_liststore.data.length; i++) ...
- HTML5 canvas 内部元素事件响应
HTML5 canvas 内部元素事件响应 isPointInPath 只能拿当前上下文的路径 重画每个部分 都isPointInPath判断
- 移动端 元素外面使用伪类after加边框 导致其内部元素无法选中
解决方法:给内部元素增加属性 position: relative; z-index: 3; 这样就能选中其内部元素了.
随机推荐
- jQuery基础(Ajax,load(),getJSON(),getScript(),post(),ajax(),同步/异步请求数据)
1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为: load(url,[data],[callba ...
- js/jq 倒计时插件(一)
//很多时候我们需要用到倒计时比如(一些发布会倒计时,秒杀倒计时,活动倒计时等),接下来将介绍两种倒计时插件的写法 //html结构 <!DOCTYPE html> <html la ...
- Dynamics 365Online 查询Web Api的请求WebUri
在on-premises版本中,获取weburi的方式是进设置-自定义项-开发人员资源中查看地址,但online版本中的地址会有些许的差异 online的开发者资源中的地址如下图,如果你在页面java ...
- CentOS7系列--1.6CentOS7配置sudo
CentOS7配置sudo 如果一些用户共享权限,配置sudo是为了分离用户的职责 1. 将root 的权限传递给所有用户 [root@centos7 ~]# visudo 添加下面的内容到最后一行, ...
- 多张报表导出到一个多sheet页excel
业务需求: 通过勾选不同的报表名称,然后直接执行导出excel.并且这些报表需要统一导入到一个excel的多个sheet页中,并且对某些报表可能需要增加一些类似'已审核'之类的图片(展现时并没有 ...
- 2018-10-15 00:41:45 c language
2018-10-15 00:41:45 c language C语言输入法的选择 全角和半角的区别主要在于除汉字以外的其它字符,比如标点符号.英文字母.阿拉伯数字等,全角字符和半角字符所占用的位置的 ...
- oracle lz047中的REGEXP_LIKE(cust_first_name,'[[:digit:]]')) .
转自http://blog.csdn.net/dream19881003/article/details/6680982 今天在看OCP题库的时候有一道题是考字段约束的,意思是要在表CUSTOMERS ...
- Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Python DDT(data driven tests)模块心得
关于ddt模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:http://ddt.readthedocs.io/en/latest/example.html ddt(data driv ...
- ubuntu 下 mysql数据库的搭建 及 数据迁移
1.mysql的安装 我是使用apt-get直接安装的 :sudo apt-get install mysql-server sudo apt-get install mysql-client 2.配 ...