考書籍java瘋狂講義所做的學習總結。我相信我還會回來的!
一、概要:List集合是一個元素有序,可重復的集合,該接口是Collection接口的子接口。List接口下接口的實現類有,ArrayList、LinkedList、Vector,其中Vector年齡較大(1.0版本就存在了)。
二、List接口中常用的方法
》void add(int index,Object element):將元素element插入到集合的index處。
》boolean addAll(int index,Collection c):將集合c所包含的元素都插入到List集合的index處。
》Object get(int index):返回集合index處的索引處的元素。
》int indexOf(Object o):返回對象o在List集合中第一次出現的位置索引。
》int lastIndexOf(Object o):返回對象o在List集合中最后一次出現的索引。
》Object remove(int index):刪除并返回index索引處的元素。
》Object set(int index,Object element):將index索引處的元素替換為element對象,返回新元素。
》List subList(int fromIndex,int toIndex):返回從索引fromIndex(包含)到toIndex(不包含)處所有集合元素組成的子集合。
部分用法如下:
三、遍歷List集合的三種方式
關于迭代器Iterator的使用:Iterator接口也是java集合框架的成員,但它與Collection,Map集合不一樣,Collection集合和Map集合主要用戶裝對象,而Iterator主要用于遍歷,Iterator本身病不提供盛裝對象的能力;還有一點需要注意的是,當時用Iterator遍歷Collection集合元素時,只有通過Iterator的romove方法刪除上一次next方法返回的集合元素才可以,否則的話,會引發java.util.ConcuurentModdificationException異常。
三、ArrayList的使用以及存儲原理
ArrayList和Vector是基于數組實現的List類,所以AyyayList和Vector類封裝了一個動態的、允許再分配的Object數組。ArrayList或Vector對象使用initialCapacity參數設置數組的長度,當向ArrayList和Vector中添加元素超出該數組的長度時,他們的initialCapacity會自動增加。數組進行擴容時,會將老數組中的元素重新拷貝一份到新的數組中,每次數組的增長大約是其原容量的1.5倍。如果向ArrayList或Vector集合中添加大量元素時,可使用ensureCapacity(int X)方法一次性地增加initialCapacity.可減少重分配的次數,從而提高性能。(摘自瘋狂java講義)
關于具體ArrayList的實現原理,推薦前輩博客:https://www.cnblogs.com/ITtangtang/p/3948555.html
四、LinkedList的使用原理
1.LinkedList是一個雙向鏈表,它也可以被當作堆棧、隊列或雙端隊列進行操作。既然其底層的數據結構是鏈表,必然每個節點中的存儲都是:前一個節點的位置信息,節點數據和后一個節點的位置信息。正是因為此結構,所以在進行增刪元素的時候效率特別高,不需要像ArrayList那樣還要按索引查找,在進行增加,刪除元素,然后還需要更新索引結構。LinkedList在進行增刪的時候,只需要修改上一個元素的后節點信息和下一個元素的前節點信息即可。但是在查詢的時候就慢了,它只能依次訪問集合中的每個元素,找不到的話,就根據鏈表繼續向下走,去訪問下一個元素。
2.使用LinkedList模擬隊列:
五、線程安全問題
ArrayList是線程不安全的集合,當有多個線程訪問同一個Arraylist的集合時,如果有超過一個線程修改了ArrayList集合,則必須手動保證該集合的同步性。使用Conllections類中提供的syschronizedXXX()方法,該方法將指定集合包裝成線程同步的集合,從而可以解決多線程并發訪問集合時帶來的線程安全問題。
六、ArrayList和LinkedList性能比較
1.ArrayList做查詢比較快,但是增刪的時候比較滿。當插入或刪除元素時,還要涉及數組元素的移動等內存操作。
2.LinkedList做增刪比較快,但是查詢慢。LinkedList使用雙向鏈表實現存儲,形成一個按序號索引的線性結構,與數組存儲的方式相比,按序號索引數據需要進行前向或后向遍歷,但是插入數據的時候,只需要記錄本項的前后項即可,所以插入較快,刪除同樣。
一、在Html中 列表一共分為三種:
(1)無序列表 :使用 ul 標簽來創建,用 li 標簽來表示列表項 (較常用)
<ul>
<li>結構</li>
<li>表現</li>
<li>行為</li>
</ul>
(2)有序列表 :使用 ol 標簽來創建,用 li 標簽來表示列表項
<ol>
<li>結構</li>
<li>表現</li>
<li>行為</li>
</ol>
(3)定義列表 :使用 dl 標簽來創建,用 dt 標簽來表示定義的內容 ,dd 標簽來對內容進行解釋說明
<dl>
<dt>YYDS</dt>
<dd>yyds是“永遠的神”的縮寫 [1] ,常被粉絲用來贊賞自己的愛豆 </dd>
<dt>XSWL</dt>
<dd>XSWL = 笑死我了”,作為當代沙雕青年,每天除了哈哈哈就是“窩窩頭一塊錢四個</dd>
</dl>
二、列表相互之間可以嵌套:
<ul>
<li>節日
<ol>
<li>中秋</li>
<li>國慶</li>
<li>元旦</li>
</ol>
</li>
<li>中國</li>
<li>世界</li>
</ul>
三、網頁展示:
網頁效果展示
HTML中,標簽可以包含各種屬性,用于定義標簽的特性和行為。例如,img標簽可以有src屬性來指定要顯示的圖像的URL,a標簽可以有href屬性來指定鏈接的目標地址。通過獲取標簽的屬性值,我們可以獲取到這些額外的信息,然后根據需要進行處理。
定義方法
/**
* 提取富文本字符串某個標簽的所有屬性
* @param {String} str 要提取的html富文本
* @param {Object} tagName 要提取的標簽名稱
* @param {Object} attrName 要提取的屬性名稱
* @returns {Array} list 屬性列表
*/
function getStrTagAttribute(str,tagName,attrName){
let attributeList = []
const re = new RegExp(`<${tagName} [^>]*${attrName}=['"]([^'"]+)[^>]*>`,'g')
str.replace(re, (match, capture) => {
attributeList.push(capture);
});
return attributeList;
}
使用方法
*請認真填寫需求信息,我們會在24小時內與您取得聯系。