整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          List集合簡單總結

          考書籍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(不包含)處所有集合元素組成的子集合。

          部分用法如下:


          1. import java.util.ArrayList;
          2. import java.util.Vector;
          3. public class ListTest {
          4. public static void main(String[] args) {
          5. //創建集合對象
          6. ArrayList<String> list1 = new ArrayList<String>();
          7. //add(E e):添加元素
          8. list1.add("hello");
          9. list1.add("world");
          10. list1.add("java");
          11. //add(int index,E element):在指定的索引處添加一個元素
          12. list1.add(1, "android");
          13. System.out.println("array:"+list1);
          14. //========================================================
          15. //創建集合對象
          16. ArrayList<String> array = new ArrayList<String>();
          17. //添加元素
          18. array.add("hello");
          19. array.add("world");
          20. array.add("java");
          21. //public E get(int index):返回指定索引處的元素
          22. System.out.println("get:"+array.get(0));
          23. System.out.println("get:"+array.get(1));
          24. System.out.println("get:"+array.get(2));
          25. //public int size():返回集合中的元素的個數
          26. System.out.println("size:"+array.size());
          27. //public boolean remove(Object o):刪除指定的元素,返回刪除是否成功
          28. System.out.println("remove:"+array.remove("world"));//true
          29. System.out.println("remove:"+array.remove("world"));//false
          30. //public E remove(int index):刪除指定索引處的元素,返回被刪除的元素
          31. System.out.println("remove:"+array.remove(0));
          32. //public E set(int index,E element):修改指定索引處的元素,返回被修改的元素
          33. System.out.println("set:"+array.set(0, "android"));
          34. //輸出
          35. System.out.println("array:"+array);
          36. }
          37. }

          三、遍歷List集合的三種方式


          1. public class ListSearchTest {
          2. public static void main(String[] args) {
          3. List list = new ArrayList<>();
          4. list.add(0);
          5. list.add(1);
          6. list.add(2);
          7. list.add(3);
          8. //No1:for循環遍歷
          9. for (int i = 0; i < list.size(); i++) {
          10. System.out.println(list.get(i));
          11. }
          12. System.out.println("==============================");
          13. //No2:foreach遍歷
          14. for (Object object : list) {
          15. System.out.println(object);
          16. }
          17. System.out.println("==============================");
          18. //No3:使用Iterator迭代器
          19. Iterator iterator = list.iterator();
          20. while(iterator.hasNext()){
          21. System.out.println(iterator.next());
          22. }
          23. }
          24. }

          關于迭代器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模擬隊列:


          1. /*
          2. *LinkeList:鏈表集合.
          3. */
          4. public class LinkedListTest1 {
          5. public static void main(String[] args) {
          6. LinkedList<Object> ll = new LinkedList<>();
          7. ll.addFirst("a");
          8. ll.addFirst("b");
          9. ll.addFirst("c");
          10. ll.addFirst("d");
          11. System.out.println(ll); // 倒序的效果. 輸出[d,c,b,a]
          12. Object first = ll.getFirst() ;
          13. System.out.println(first); //d
          14. Object last = ll.getLast();
          15. System.out.println(last); //a
          16. }
          17. }
          18. 3.使用LinkedList模擬棧:
          19. public class LinkedListTest2 {
          20. public static void main(String[] args) {
          21. //創建 LinkedList
          22. LinkedList<Object> ll = new LinkedList<>();
          23. //a先壓棧,b,c以此壓棧
          24. ll.push("a");
          25. System.out.println(ll);//[a]
          26. ll.push("b");
          27. System.out.println(ll);//[b,a]
          28. ll.push("c");
          29. System.out.println(ll); //[c,b,a]
          30. //彈棧,先進后出
          31. System.out.println(ll.pop()); //c
          32. System.out.println(ll);//[b,a]
          33. System.out.println(ll.pop()); //b
          34. }
          35. }

          五、線程安全問題

          ArrayList是線程不安全的集合,當有多個線程訪問同一個Arraylist的集合時,如果有超過一個線程修改了ArrayList集合,則必須手動保證該集合的同步性。使用Conllections類中提供的syschronizedXXX()方法,該方法將指定集合包裝成線程同步的集合,從而可以解決多線程并發訪問集合時帶來的線程安全問題。


          1. public class CollectionTest {
          2. public static void main(String[] args) {
          3. //創建4個同步的集合對象
          4. Collection c = Collections.synchronizedCollection(new ArrayList());
          5. List<Object> list = Collections.synchronizedList(new ArrayList<Object>());
          6. Set<Object> set = Collections.synchronizedSet(new HashSet<Object>());
          7. Map<Object, Object> map = Collections.synchronizedMap(new HashMap<Object,Object>());
          8. }
          9. }

          六、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;
          }

          使用方法


          主站蜘蛛池模板: 狠狠做深爱婷婷综合一区 | 日韩精品无码一区二区中文字幕| 久久精品国产一区| 国产精品一区二区av| 美女视频免费看一区二区 | 国产成人精品无码一区二区| 国产伦一区二区三区高清| 亚洲国产成人久久综合一区77| 精品国产免费一区二区| 国产成人一区二区在线不卡| 国产精品第一区揄拍无码| 国产av一区二区精品久久凹凸| 国模极品一区二区三区| 国产精品一区二区无线| а天堂中文最新一区二区三区| 亚洲性日韩精品一区二区三区| 影院无码人妻精品一区二区| 波多野结衣免费一区视频| 久久成人国产精品一区二区 | 无码人妻精品一区二区三区夜夜嗨 | 国99精品无码一区二区三区| 国产AV午夜精品一区二区三| 亚洲制服中文字幕第一区| 欧美人妻一区黄a片| 中日av乱码一区二区三区乱码| 亚洲欧洲一区二区| 国产一区二区三区不卡在线观看| 国产婷婷一区二区三区| 国产精品一区二区毛卡片| 一区二区三区免费电影| 麻豆国产一区二区在线观看| 亚洲熟妇无码一区二区三区| 国产精品自在拍一区二区不卡| 久久精品亚洲一区二区| 日本一道高清一区二区三区| 亚欧在线精品免费观看一区| 国产精品久久亚洲一区二区| 亚洲福利视频一区| 国产一区二区福利久久| 亚洲国产福利精品一区二区| 精品久久久久中文字幕一区|