一、字串
1.string類、stringbuilder類、stringbuffer類是三個字串相關類。string類是的物件代表不可變的字串行,stringbuilder類和stringbuffer類代表可變字串行
2.string是乙個final類 他不能有其他的子類 final修飾的類不能被繼承
它的底層是乙個陣列
這裡需要說明一點:在jdk9的時候 大佬們對它的底層進行了改變 為了節省空間 由字元型陣列改變成為了位元組型的陣列
二、stringbuilder和stringbuffere
1.他們非常相似 方法幾乎相同 都是不可改變的字串行
2.區別是:
stringbuilder:是jdk1.5提供的類 執行緒不安全 但是效率高 少了約束
stringbuffer:是jdk1.0版本提供的類 執行緒安全但是效率很低
3.stringbuilder的底層原始碼:重點來嘍!!!
它的預設長度是16 也可以指定初始化長度
public final class stringbuilder
public stringbuilder(int capacity)
public int length()
public int capacity()
public string tostring()
}當儲存空間不夠的時候 需要擴容的時候 預設規則是長度16*n+2
原始碼:三、linkedlist
1.arraylist是乙個動態陣列預設為object 底層是乙個雙向鍊錶
2.版本的不同 底層原始碼也會進行修改讓他的功能進一步的增加
1.7中 預設的底層長度是10
1.8中預設的長度為0
3.規則是:容量不足的時候進行擴充 如果擴充了1.5倍還不滿足的話 就會增長到新元素的數量 :
比如長度是 17 原來的長度是10 增加到15 還是無法滿足 那就自動變為最小容納的數量 就會增長到17
原始碼:
public arraylist()
private static int calculatecapacity(object elementdata, int mincapacity)
return mincapacity;
}
private void grow(int mincapacity)
四、hashmap
1.hashmap底層是乙個table陣列+鍊錶實現的雜湊表儲存結構 鍊錶的每個節點就是乙個entry 其中包括:鍵key、值value、鍵的雜湊碼hash、執行下乙個節點的引用next四部分
2.•新增元素時如達到了閾值,需擴容,每次擴容為原來主陣列容量的2倍
原始碼:
public class hashmapimplements map
public hashmap(int initialcapacity, float loadfactor)
}3.在jdk1.8中有一些變化,當鍊表的儲存資料個數大於等於8的時候,不再採用鍊錶儲存,而採用紅黑樹儲存結構。這麼做主要是查詢的時間複雜度上,鍊錶為o(n),而紅黑樹一直是o(logn)。如果衝突多,並且超過8,採用紅黑樹來提高效率
**五、舊的集合類**
•vector是早期jdk介面,arraylist是替代vector的新介面
•vector執行緒安全,效率低下;arraylist重速度輕安全,執行緒非安全
•長度需增長時,vector預設增長一倍,arraylist增長50%
字串固定長度 易語言 易語言字串操作原始碼
易語言字串操作原始碼 系統結構 字串 取長度,字串 取中間,字串 取左邊,字串 取右邊,字串 替換,到寬字元,到多位元組,取文字資料位址,取位元組集資料位址,multibytetowidechar,widechartomultibyte,程式集1 啟動子程式 臨時子程式 程式集 字串 字串 取長度 ...
字串及長度
輸出字串最後乙個字元的長度 s show me your code j 0 for i in s 1 1 if i j 1else break print j 輸出一句話中最長單詞的第乙個單詞和長度 def longestletter s s s.split word s 0 word len le...
字串的長度
題目描述 設計函式,求乙個字串的長度。在主函式中輸入字串,並輸出其長度。輸入 輸入乙個字串 輸出 輸出該字串的長度 樣例輸入 123456789!樣例輸出 15這個題題目本來就有函式可以用的,所以感覺有點 脫褲子放屁 畫蛇添足 的感覺,但是題目要求我們這麼做了,那我們就按它說的辦。上 include...