天天看点

内部元素一一对应的集合的算法优化,从list到hashmap

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

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

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

最开始的时候,是这样的。

内部元素一一对应的集合的算法优化,从list到hashmap

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() {  

        return "小丽";  

}  

相当于a来了以后,挨个问所有到场的人的名字,看看跟自己的女朋友名字一样不一样,如果一样,就把花送给他。

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

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

内部元素一一对应的集合的算法优化,从list到hashmap

import java.util.hashmap;  

import java.util.map;  

public class testhashmapparty {  

    private map<string,person> persons = new hashmap<string,person>();  

        persons.put(getpositionbyname(a.getname()), a);  

        person b = persons.get(getpositionbyname(name));  

        if(b != null){  

            sendflow(b);  

    private void sendflow(person b) {  

        return null;  

    private string getpositionbyname(string name) {  

这次我们的party组织的更好了,每个人来了之后,会从组织者那里根据自己名字拿到自己安排的座位,然后坐上去,同时,还可以根据女朋友的名字拿到女朋友的座位,然后直接走过去,把花送给她。

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

代码里有一个方法叫

内部元素一一对应的集合的算法优化,从list到hashmap

private string getpositionbyname(string name) {  

    // todo auto-generated method stub  

    return null;  

我在这里没有实现,但是如果具体实现的话,应该是某种算法,或者数据库记录。因为java对象所有的记忆功能都是我们代码赋予的。如果我们没有赋予它记住自己女朋友的功能,那么每次给女朋友送花的时候,都需要调用一次这个方法,事实上也是低效的。

于是贴出最终的代码。person.java

内部元素一一对应的集合的算法优化,从list到hashmap

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

内部元素一一对应的集合的算法优化,从list到hashmap

        string position = getpositionbyname(a.getname());  

        persons.put(position, a);  

        a.setposition(position);  

        a.setgirlfriendposition(getpositionbyname(getgirlfriendname()));  

        person b = persons.get(a.getgirlfriendposition());  

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

终极优化应该是。

内部元素一一对应的集合的算法优化,从list到hashmap

mymap = new mymap();  

b = map.get(a);  

a = map.get(b);  

现在的hashmap是没办法处理null 的,因为a和b不是同时来,所以现在的hashmap如果想用a做b的key,b做a的key会遇到null问题。

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