從效能角度分析一下String,List,Map

2022-07-27 16:12:23 字數 3287 閱讀 3833

使用string.substring()方法的時候注意記憶體溢位的問題

public

static

void

testh()

} static

class

hugestr

} static

class

improvedhugestr

}

三種分隔字串的方法,split()簡單效能最差,stringtokenizer效能次之,自定義的方法效能最好但是可讀性太低。建議stringtokenizer

static

string initorgstr()

return

sb.tostring();

} static

void

normalsplidtest()

} static

void

stringtokenizertest()

st = new stringtokenizer(orgstr, ":"

); }

} static

void

selfsplidtest()

splitstr = tmp.substring(0

, j);

tmp = tmp.substring(j + 1

); }

tmp =orgstr;

}}

string的charat()和jindexof()效能都特別的好,charat連用甚至比startwith()、endwith()還快。

stringbuilder和stringbuffer:string在使用 「+」的時候,如果 + 的是具體的字串,也就是編譯期可知的,那麼在編譯期就已經完成了優化,只有最後的乙個大字串。

string result = "

string

" + "

and" + "

string

"// 反編譯後只有這乙個大字串

string result = "stringandstring"

stringbuilder sb =呢我stringbuilder()

"string");

"and");

"string

");

如果編譯期不可知,最終也是用stringbuilder進行優化。

string str1 = "

string";

string str2 = "

and"

;string str3 = "

string";

如果超大的字串,string的 + ,被反編譯stringbuilder實現,但是每次都會生成新的 stringbuilder。string的 + 最差,concat次之,stringbuilder最好。

static

void

hugestr()

string result = ""

;

for (int i = 0; i < 10000; i++)

stringbuilder sb = new

stringbuilder();

for (int i = 0; i < 10000; i++)

}

stringbuffer執行緒安全,stringbuilder執行緒不安全。如果單執行緒stringbuilder會比stringbuffer好些。

如果知道字串會有多大,在初始化的時候給定值,效能會更好。

public stringbuilder(int

capacity)

public stringbuffer(int capacity)

arraylist、vector:vector執行緒安全。其他幾乎一樣。linkedlist使用雙向連表。

如果list物件需要經常在任意位置插入元素,可以考慮使用linklist代替arraylist。但是linklist從中間刪除元素會特別耗時,它是遍歷所有,找到具體的位置,在移除。

arraylist和linklist三種遍歷方法。foreach和迭代器兩種差不多,for迴圈linkedlist不要用,慢到你無法想象。迭代器會更好些,foreach最終也會解析成迭代器還多了一步沒用的複製語句所以效能差一些。

static

void eachlist(listlist)

for (iteratorit =list.iterator(); it.hasnext();)

int size =list.size();

for (int i = 0; i < size; i++)

}

map

hashmap:它最重要的就是原理了。理解原理。

linkedhashmap:在hashmap的基礎上加了乙個鍊錶存放順序。accessorder為true按照元素最後訪問時間順序,為false按照存入順序,預設false。

public linkedhashmap(int initialcapacity, folat loadfactor, boolean accessorder)

可以修改accessorder看看順序

static

void

maptest()

}

treemap:這個就nb了,根據key排序。想使用這個或者在 new treemap(comparator<? super k> comparator)建立的時候指定comparator,或者key實現了comparable介面。

static

void

treemaptest()

map map2 = ((treemap) map).submap(1, 4

); system.

out.println("

get the key more than or equal 1 and less than 4");

for (iteratoriterator =map2.keyset().iterator(); iterator.hasnext();)

//小於2的

map map3 = ((treemap) map).headmap(2

);

//大於2的

map map4 = ((treemap) map).tailmap(2

); }

從網域名稱角度來架構一下360公司

周鴻禕收購了360.com,是一步極好的棋,比之開心網的ceo有魄力,如果開心網有魄力,不會淪落到這個地步,本身生活和工作是要區分開的。擁有了360.com,360公司就有了成為中國一流網際網路公司的資本,如果沒有360.com,360只是個超級二流公司而已。但是,擁有了,還要看怎麼去使用。360公...

簡單實現一下string類

自己簡單實現一下string類,如下 自己簡單實現一下string類 pragma warning disable 4996 class mystring public mystring data null len 0 default constructor mystring const char ...

換乙個角度再談一下WF

使用wf可以開發兩類流程 是傳統意義的工作流平台所提供的流程,特點是用流程進行業務的狀態處理 在這裡先對功能控制類流程做個說明 舉個例子 我們先對a表進行資料操作,再對b表進行資料操作.如果操作b表失敗,則回滾對a表的操作.當然,看到這裡你會說這不就是資料庫的事務處理嗎.是的沒錯,那我們將上面操作的...