linq判断集合中相同元素个数_JavaSe集合的概念以及集合框架介绍
###集合
今天任務
1.概念1.1 集合的概念1.2 集合的框架結果介紹1.3 集合和數組的對比 2.Collection接口2.1 Collections中常用的方法 3.泛型3.1 什么是泛型3.2 泛型的聲明3.3 說明3.4 泛型使用時的注意事項3.5 受限泛型3.6 泛型應用在集合上 4.Iterator迭代器4.1 迭代器的工作原理4.2 迭代器的使用 5.List接口5.1 List接口的存儲特點5.2 List接口的實現類教學目標
1.掌握集合的概念以及和數組的對比 2.了解集合的框架 3.了解Collection接口中的常用方法 4.了解泛型的使用及注意事項 5.掌握Iterator的工作原理以及使用 6.掌握List接口的存儲特點 7.掌握ArrayList的使用 8.了解LinkedList、Vector和Stack的使用第一節 概念
#####1.1 集合的概念
集合與數組一樣,也是一個容器,與數組不同的是,集合的長度不定,可以無限的想集合中添加元素,而且集合中存儲的元素類型可以隨意#####1.2 集合的框架結構介紹
Collection集合的框架結構Map集合的框架結構#####1.3 集合與數組的對比
相同點:
都是數據的容器,在一個數組或集合中可以聲明(存儲)多個數據不同點:
元素:數組中的元素只能是相同(相兼容類型)集合中的元素是任意的(泛型) ? 數組中可以存儲基本類型和引用類型,集合只能存儲引用類型 ? 長度(元素個數):數組是定長的,一旦初始化長度就不可以修改集合長度可以修改,可以刪除元素和添加元素####第二節 Collection接口
#####2.1 Collection中常用的方法
方法名描述add(E e)確保此 collection 包含指定的元素(可選操作)。addAll(Collection<? extends E> c)將指定 collection 中的所有元素都添加到此 collection 中(可選操作)。clear()移除此 collection 中的所有元素(可選操作)。contains(Object o)如果此 collection 包含指定的元素,則返回true。containsAll(Collection<?> c)如果此 collection 包含指定 collection 中的所有元素,則返回 true。equals(Object o)比較此 collection 與指定對象是否相等。isEmpty()如果此 collection 不包含元素,則返回true。iterator()返回在此 collection 的元素上進行迭代的迭代器。remove(Object o)從此 collection 中移除指定元素的單個實例,如果存在的話(可選操作)。removeAll(Collection<?> c)移除此 collection 中那些也包含在指定 collection 中的所有元素(可選操作)。retainAll(Collection<?> c)僅保留此 collection 中那些也包含在指定 collection 的元素(可選操作)。size()返回此 collection 中的元素數。toArray()返回包含此 collection 中所有元素的數組。
####第三節 泛型
3.1 什么是泛型
泛型就是可以表示一個廣泛數據類型的類型參數(泛型只能表示引用類型) 形式參數:聲明方法時,在方法的參數列表中聲明,而且在方法體中會使用到,但是是一個未知的數據 類型參數:在一個類中聲明一個未知的數據類型,在類中可以使用這個類型,但是具體類型取決于實例化時傳入的實際類型3.2 泛型的聲明
1)泛型可以聲明在方法中:(泛型方法) public static <標識符> void fun(){} ? 2)泛型可以聲明在類中:(泛型類) public class 類名<標識符>{//類體//泛型可以在類中充當成員變量//泛型可以再類中充當方法的返回值//泛型可以在類中充當方法的參數 } ? 3)泛型可以聲明在接口中:(泛型接口) public interface 接口名<標識符>{//成員//泛型可以充當接口中方法的返回值//泛型可以充當接口中方法的參數 }3.3 說明
1)標識符:只要是一個合法的標識符即可,一般情況下,只使用一個大寫字母表示泛型 例:public class Person<T>{} 2)泛型的類型與聲明的類或接口不需要有任何的關系 3)泛型可以在類中充當任何的成員 4)泛型具體類型取決于實例化對象時傳入的實際類型3.4 泛型使用時的注意事項
1)泛型不能在類中聲明靜態常量屬性 final修飾的屬性必須在聲明的同時初始化,所以泛型不能聲明常量 static修飾的屬性是靜態屬性,先于對象,泛型類型取決于創建對象時傳入的實際類型,所以泛型不能聲明靜態屬性 綜上所述:不能使用泛型聲明靜態常量屬性 ? 2)泛型不能在類中初始化數組,但是可以聲明數組 初始化數組時需要給元素進行分配空間,但是泛型類型不確定無法分配空間 ? 3)在類中不能使用泛型聲明參數個數相同的重載方法 當一個類中有兩個泛型時,創建對象時,兩個泛型使用相同類型替換,那么重載方法就是相同的方法(同名,參數列表也相同) ? 4)使用不同實際類型創建出的泛型類對象的引用不可以相互賦值3.5 受限泛型
1)<? extends T>:表示T類或者T類的子類 2)<? super T>:表示T類或者T類的父類 3)<?>:表示任意類型#####3.6 泛型應用在集合上
泛型在集合中應用,表示的是集合中元素的類型####第四節 Iterator迭代器
#####4.1 迭代器的工作原理
迭代器相當于一個游標,最初獲取迭代器時,迭代器的位置在所有元素的前面,每迭代一個元素,迭代器向后移動一個位置#####4.2 迭代器的使用
方法名描述hasNext()判斷迭代器是否存在下一個元素可以迭代器next()迭代器迭代下一個元素remove()從迭代器指向的 collection 中移除迭代器返回的最后一個元素(可選操作)。
####第五節 List接口
方法名描述add(int index, E element)在列表的指定位置插入指定元素(可選操作)。addAll(int index, Collection<? extends E> c)將指定 collection 中的所有元素都插入到列表中的指定位置(可選操作)。containsAll(Collection<?> c)如果列表包含指定 collection 的所有元素,則返回true。get(int index)返回列表中指定位置的元素。indexOf(Object o)返回此列表中第一次出現的指定元素的索引;如果此列表不包含該元素,則返回 -1。lastIndexOf(Object o)返回此列表中最后出現的指定元素的索引;如果列表不包含此元素,則返回 -1。listIterator()返回此列表元素的列表迭代器(按適當順序)。remove(int index)移除列表中指定位置的元素(可選操作)。set(int index, E element)用指定元素替換列表中指定位置的元素(可選操作)。subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之間的部分視圖。
#####5.1 List接口的存儲特點
相對有序存儲,可以存儲相同元素(不排重),可以通過下標訪問集合元素 List接口中可以使用獨有的迭代器ListIterator,具有反向遍歷的功能#####5.2 List接口的實現類
5.2.1 ArrayList類
ArrayList類是List接口的大小可變數組的實現。實現了所有可選列表操作,并允許包括null在內的所有元素。 ? 存儲特點:相對有序存儲,可以存儲相同元素(不排重),可以通過下標訪問集合元素,通過數組實現的集合代碼實現:
public class ArrayListDemo {public static void main(String[] args) {//創建一個ArrayList集合ArrayList<String> list = new ArrayList<>();//構造方法中的泛型可以省略list.add("zhangsan");//向集合中添加元素list.add("lisi");list.add("wangwu");System.out.println(list.isEmpty());//判斷list集合是否為空集合System.out.println(list.size());//查看集合中元素的個數System.out.println(list.get(1));//獲取集合中下標為1的元素System.out.println(list.set(1,"zhaoliu"));//修改集合中下標為1的元素System.out.println(list.contains("wangwu"));//查看"wangwu"是否是集合中的元素list.remove("wangwu");//刪除集合中"wangwu"元素list.remove(1);//刪除集合中下標為1的元素//for循環遍歷集合for(int i=0; i<list.size(); i++){System.out.println(list.get(i));}//使用Iterator迭代器遍歷Iterator<String> it = list.iterator();//獲取迭代器while(it.hasNext()){System.out.println(it.next());}//使用ListIterator迭代器遍歷ListIterator<String> lit = list.listIterator();while(lit.hasNext()){System.out.println(lit.next());}//反向遍歷while(lit.hasPrevious()){System.out.println(lit.previous());}} }5.2.2 LinkedList類
LinkedList類是List接口的鏈接列表實現。實現所有可選的列表操作,并且允許所有元素(包括null)。 存儲特點:相對有序存儲,可以存儲相同元素(不排重),可以通過下標訪問集合元素,通過鏈表實現的集合 ? LinkedList集合適用在對元素插入和刪除操作較頻繁的時候 ArrayList集合適用在對元素查詢操作較頻繁的時候5.2.3 Vector
Vector類可以實現可增長的對象數組。與數組一樣,它包含可以使用整數索引進行訪問的組件。但是Vector 的大小可以根據需要增大或縮小,以適應創建 Vector后進行添加或移除項的操作。5.2.4 Stack
Stack類表示后進先出(LIFO)的對象棧。是Vector的子類。5.2.5 ArrayList與LinkedList,Vector三種實現類存儲的比較
a.在用法上和ArrayList完全相同【Vector就是ArrayList的前身】 ? b.底層存儲采用的數據結構是數組 c.Vector是一個古老的集合,從JDK1.0開始就有了,Vector存在一些方法名比較長的方法,xxxxElement d.Vector是線程安全的,效率低 ? ArrayLIst是線程不安全的,效率高,推薦使用ArrayList【Collections工具類中有相應的方法可以將ArrayList改為線程安全的】總結
以上是生活随笔為你收集整理的linq判断集合中相同元素个数_JavaSe集合的概念以及集合框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络技术基础教学内容,计算机网络技
- 下一篇: 信用卡逾期五年没还 拿什么来拯救