集合只能存儲簡單數據類型,例如:List<Integer> = new ArrayList<>();這里存儲的也是引用類型
1--數組
1:對象數組(掌握) (1)數組既可以存儲基本數據類型,也可以存儲引用類型。它存儲引用類型的時候的數組就叫對象數組。 (2)案例: 用數組存儲5個學生對象,並遍歷數組。
2--一般的集合(collection)
Collection |--List |--ArrayList |--Vector |--LinkedList |--Set |--HashSet |--TreeSet
集合和數組的區別:
集合和數組的區別?
A:長度區別
數組固定
集合可變
B:內容區別
數組可以是基本類型,也可以是引用類型
集合只能是引用類型
C:元素內容
數組只能存儲同一種類型
集合可以存儲不同類型(其實集合一般存儲的也是同一種類型)
用法:
Collection的功能概述
A:添加功能
boolean add(Object object):添加一個元素。
boolean addAll(Collection c):添加一個集合的元素。
B:刪除功能
vouid clear():移除所有元素。
boolean remove(Object o):移除一個元素。
boolean removeAll(Collection c):移除一個集合的元素。(是一個還是所有)
C:判斷功能
boolean contains(Object o):判斷集合中是否包含指定的元素。
boolean containsAll(Collection c):判斷集合中是否包含指定的集合元素。(是一個還是所有)
boolean isEmpty():判斷集合是否為空。
D:獲取功能
Iterator<E> iterator():(重點)
E:長度功能
int size():元素的個數。
面試題:數組有沒有length()方法呢?字符串有沒有length()方法呢?集合有沒有length()方法呢?
沒有,有,沒有
F:交集(了解)
boolean retainAll(Collection c):兩個集合都有的元素?思考元素去哪了,返回boolean又是什么意思呢?
G:把集合轉數組(了解)
Object[] toArray():
3--list
List集合的特有遍歷功能 A:由size()和get()結合。 B:代碼演示 //創建集合對象 List list = new ArrayList(); //創建並添加元素 list.add("hello"); list.add("world"); list.add("java"); //遍歷集合 Iterator it = list.iterator(); while(it.hasNext()) { String s =(String) it.next(); System.out.println(s); } System.out.println("----------"); for(int x=0; x<list.size(); x++) { String s =(String) list.get(x); System.out.println(s); } (4)列表迭代器的特有功能;(了解) 可以逆向遍歷,但是要先正向遍歷,所以無意義,基本不使用。 (5)並發修改異常 A:出現的現象 迭代器遍歷集合,集合修改集合元素 B:原因 迭代器是依賴於集合的,而集合的改變迭代器並不知道。 C:解決方案 a:迭代器遍歷,迭代器修改(ListIterator) 元素添加在剛才迭代的位置 b:集合遍歷,集合修改(size()和get()) 元素添加在集合的末尾
(6)常見數據結構 A:棧 先進后出 B:隊列 先進先出 C:數組 查詢快,增刪慢 D:鏈表 查詢慢,增刪快 (7)List的子類特點(面試題) ArrayList 底層數據結構是數組,查詢快,增刪慢。 線程不安全,效率高。 Vector 底層數據結構是數組,查詢快,增刪慢。 線程安全,效率低。 LinkedList 底層數據結構是鏈表,查詢慢,增刪快。 線程不安全,效率高。 到底使用誰呢?看需求? 分析: 要安全嗎? 要:Vector(即使要,也不使用這個,后面再說) 不要:ArrayList或者LinkedList 查詢多;ArrayList 增刪多:LinkedList 什么都不知道,就用ArrayList。 (8)List集合的案例(遍歷方式 迭代器和普通for) A:存儲字符串並遍歷 B:存儲自定義對象並遍歷
引用:http://blog.csdn.net/l1585931143/article/details/53749787