天天看點

内部元素一一對應的集合的算法優化,從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怎麼寫。以後再研究吧。