Collection,迭代器,foreach,泛型,數據結構簡單介紹

Collection

概念

    單列集合的頂級接口,不能直接new對象。通過實現類去new 如:ArrayList
集合框架體系圖

常用方法

  • boolean add(E e) 將指定對象添加到集合中
  • void clear(E e) 清空集合元素
  • boolean remove(E e) 把給定對象在當前集合刪除
  • boolean contains(Object obj) 判斷當前集合中是否包含給定對象
  • boolean isEmpty() 判斷當前集合是否爲空
  • int size() 返回集合長度
  • Object[] toArray() 把集合中的元素,存到數組中

迭代器

概念

  • 本身是一個Iterator接口
  • 在程序開發過程中 經常要遍歷集合的元素,於是 JDK就提供了Iterator接口
  • 是Collection集合的通用遍歷方式

獲取迭代器

  • Iterator iterator()

獲取元素

  • boolean hasNext() -->判斷集合中有沒有下一個元素
  • E next() -->獲取下一個元素

使用步驟

		//創建集合
		ArrayList list = new ArrayList();
		list.add("第一個元素");
		list.add("第二個元素");
		list.add("第三個元素");
		//獲取迭代器
		//*其實Iterator指向的是ArrayList的內部類Itr*
		Iterator<String> iterator = 集合.iterator();
		//由於我們要循環判斷集合中有沒有下一個元素,利用while循環
		while(iterator.hasNext()){
			String element = iterator.next();
			System.out.print(element )
		}

注意事項

    先來一個需求:使用迭代器遍歷集合,判斷集合中是否有元素 “2”,如果有再爲集合中添加一個元素“4”。

public static void main(String[] args) {
        //創建集合
        Collection<String> collection = new ArrayList<>();

        //給集合添加數據
        collection.add("1");
        collection.add("2");
        collection.add("3");

        //獲取迭代器
        Iterator<String> iterator = collection.iterator();

        //使用迭代器循環
        while(iterator.hasNext()){
            String str = iterator.next();
            //判斷 如果集合中有 “2” 在爲集合添加元素 “4”
            if("2".equals(str))
                collection.add("4");
        }
    }

    看了上面的代碼,你可能覺得沒有任何問題,但是一運行就會報一個ConcurrentModificationException(併發修改異常)異常。至於爲什麼還要研究一下底層實現源碼。

    所以:使用迭代器去操作元素的過程中,不要修改元素長度!!

解決辦法

    可以使用ListIterator這個接口:允許程序員按任一方向遍歷列表、迭代期間修改列表,並獲得迭代器在列表中的當前位置。
    ListIterator中的方法

  • void add(E e) 添加元素
  • boolean hasNext() 判斷有沒有下一個元素
  • E next() 獲取下一個元素
    演示
public static void main(String[] args) {
        //創建集合
        Collection<String> collection = new ArrayList<>();

        //給集合添加數據
        collection.add("1");
        collection.add("2");
        collection.add("3");

        //獲取ListIterator迭代器
        ListIterator<String> iterator = ((ArrayList<String>) collection).listIterator();

        //使用ListIterator迭代器循環
        while(iterator.hasNext()){
            String str = iterator.next();
            //判斷 如果集合中有 “2” 在爲集合添加元素 “4”
            if("2".equals(str))
                iterator.add("4");//這裏必須使用ListIterator這個接口重寫的add方法
        }
    }

增強for – foreach

概念

    遍歷數組和集合 使用方法比迭代器簡單,但是他遍歷集合的時候底層也是迭代器,遍歷數組不是!!

格式

  for(容器中元素的類型 變量名 :要變遍歷的容器的名字){
            變量名就是要接受的元素;
       }

例:

		//創建集合
		ArrayList<String> list = new ArrayList();
		list.add("1");
		list.add("2");
		list.add("3");
		
		//利用迭代器遍歷
		Iterator iterator = list.Iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
		//利用增強for簡歷
		for(String element:list){
			System.out.println(element:list);
		}

注意事項

  • 使用foreach去操作元素的過程中,也不要修改元素長度!!
  • foreach在遍歷集合的時候底層原理是迭代器。
  • 在遍歷數組的時候底層原理不是迭代器。

泛型

好處

    定義的時候:讓代碼更通用,接收任意引用數據類型
    使用的時候:可以規定數據類型,防止類型轉換異常

定義

1.定義類
      格式 :
          修飾符 class 類名<代碼泛型變量一般用E表示>{}
創建對象的時候確定具體類型。

2.定義方法
      格式:
          修飾符<代碼泛型變量一般用E表示> 返回值類型 方法名(參數){}
調用方法的時候確定泛型的類型

3.定義接口
      格式:
          修飾符 interface 接口名{}
實現類的時候確定泛型類型,如果在實現類的時候泛型沒有確定,那麼就要在new對象的時候確定了。

泛型通配符(瞭解)

一般使用在方法的參數上
    格式:
        修飾符 返回值類型 方法名(類型名稱<?> 對象名){}
可以存Object類型

受限泛型

上限:

  格式:
      類型名稱<? extent 類>對象名
  意義:
      ?只能接受extends後面類型的本身及它的子類類型

下限:

  格式
      類型名稱<? suoer 類>對象名
  意義:
      ?只能接受super後面類型的本身及它的父類類型


數據結構(簡單介紹)

  採用該數據結構集合的特點:先進後出(舉例:壓子彈)

隊列

  採用該數據結構集合的特點:先進先出(舉例:排隊)

數組

  採用該數據結構集合的特點:有序的元素序列,查詢快(下標直接定位),增刪慢(要想給數組添加元素,需要創建新數組。)

鏈表

單向鏈表
概念

  • 就是把多個節點鏈接起來
  • 一個節點它是由兩個部分組成,數據域(存儲的數值),指針域(存儲的地址)
  • 第二部分存的是下一個節點的地址。
  • 上一個節點保存着下一個節點的地址
  • 下一個節點沒有保存上一個節點的地址
  • 不能保證元素的順序

採用該數據結構集合的特點:查詢慢,增刪快

雙向鏈表
概念

  • 有兩個指針域
  • 一個節點它是由三個部分組成,上一個節點地址,數據域,下一個節點地址
  • 上一個節點記錄下一個節點地址
  • 下一個節點記錄着上一個節點地址
  • 可以保證元素的順序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章