說是算法優化,基本上是在吹牛,隻不過算是記錄下,我寫代碼時候的思路。畢竟還是小菜鳥。
我要開一個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() {
return "小麗";
}
相當于a來了以後,挨個問所有到場的人的名字,看看跟自己的女朋友名字一樣不一樣,如果一樣,就把花送給他。
但是很明顯,挨個問是非常沒有效率的事情。
是以應該用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組織的更好了,每個人來了之後,會從組織者那裡根據自己名字拿到自己安排的座位,然後坐上去,同時,還可以根據女朋友的名字拿到女朋友的座位,然後直接走過去,把花送給她。
故事到這裡講完了嗎?對于一個人來說,故事已經結束了,但是對于代碼來說,還沒有。
代碼裡有一個方法叫

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

string position = getpositionbyname(a.getname());
persons.put(position, a);
a.setposition(position);
a.setgirlfriendposition(getpositionbyname(getgirlfriendname()));
person b = persons.get(a.getgirlfriendposition());
我們給了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怎麼寫。以後再研究吧。