内部元素一一相应的集合的算法优化,从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怎么写。以后再研究吧。

时间: 2024-10-16 21:49:03

内部元素一一相应的集合的算法优化,从list到hashmap的相关文章

数组集合删除算法

数组集合删除算法: 删除: /** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ public void remove(int index){ //objs的长度如果小于0或对象值小于等于0那么抛出数组越界异常 if(objs.length<0||this.index.0){ throw new IndexOutOfBoundsException(); } if(this.index-1==index){ //当前对象的是所占长度-1等

数组集合添加算法

集合是无限存储的容器: 数组集合采用的算法是一开始先开辟好有限的空间进行存储放进来的数据. 等需要再次存放数据的时候,再去开辟一块比原来的空间多的容量之前,老的数据导入进新开辟的空间,然后再把新进来的数据放进空间里,依次这样进行开辟导入就形成了无限的容器.这就是数组集合的算法.  在java源码里面,采用的导入方式是直接调用本地系统语言来直接导入数据,这样提高了效率,一万毫秒才能完成的事情也许四千毫秒就执行完毕. 取消for循环导入使用System.arraycopy如下代码: /** * 更多

XStream--&gt;别名;元素转属性;去除集合属性(剥皮);忽略不需要元素

--->清单: City.java Province.java TestXStream.java 4个XStream方法的效果图 javabean-->City.java 1 package xstream; 2 3 public class City { 4 private String name; 5 private String description; 6 7 public String getName() { 8 return name; 9 } 10 public void set

去除List集合中的重复元素? 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型,自定义类型)?

 关键字: 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型)?  *   *     思考: List就可以存储重复元素,那么需求中容器中的元素必须保证唯一性,该如何解决呢??  *      *   去除List集合中的重复元素?  * * 思路: * * 1.首先我需要另一个临时容器tempList,用来存放我认为应该保留的元素.(也就是不重复的元素) * 2.然后我们应该遍历原容器, 一个一个的取出元素, 放入tempList. * 当tempList里已经装有刚刚取出的

matlab中怎样计算某元素是否在某个集合中??

Python中可以使用in来判断某元素是否在集合中,而matlab中使用ismember(a,A)函数,判断元素a是否在集合A中 1 >> a=[1,2,3]; 2 >> ismember(1,a) 3 4 ans = 5 6 1 7 8 >> ismember(5,a) 9 10 ans = 11 12 0 集合可以为向量,也可以为一个矩阵,上面例子集合为一个向量,下面例子集合为一个矩阵 1 >> b=[1,2,3;4,5,3;7,8,7]; 2 >

CSharp程序员学Android开发---3.Android内部元素不填充BUG

最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历时一个多月,4个人开发,最终行成一个可用的Demo,整体效果还非常不错.这其中借鉴了网上的“仿网易客户端的Demo”还有就是学习<疯狂Android>,收获颇多,这里利用几篇文章做一个项目经验总结,还有就是更多的从C# 程序员的观点来理解Android的一些异同之处. 文章目录: CSharp程序

解决HTML元素的Mouse事件被内部元素的干扰

有一个DIV元素,其内部SPAN元素, 为了实现一些特殊的效果,我需要利用DIV元素的onmouseover和onmouseout事件,测试时就会发现如下的状况: 当鼠标移入DIV内部时,onmouseover事件被触发:接着再鼠标移动到DIV内部SPAN元素之上,我们肯定不会认为这时鼠标已经移到了DIV的外边,但奇怪的是DIV元素的onmouseout事件触发了,而且紧接着DIV元素onmouseover事件也马上被触发了. 这可不是我想要的,那么怎么来"屏蔽"内部元素给外层元素带来

ScrollView内部元素如何做到fill_parent 或者 match_parent?

转  : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0704/1629.html ScrollView滚动视图是指当拥有很多内容,屏幕显示不完时,需要通过滚动跳来显示的视图.Scrollview的一般用法如下 <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" andr

SDUT 3327 顺序表应用4:元素位置互换之逆置算法

顺序表应用4:元素位置互换之逆置算法 Time Limit: 10 ms Memory Limit: 570 KiB Problem Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N).空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段.注意:先将顺序