集合框架面試題,集合框架-Collection與List集合

 2023-11-05 阅读 18 评论 0

摘要:對象數組的內存圖解: 集合框架面試題?? ? 集合的繼承體系圖解: 什么是集合框架? ? * 數組和集合的區別? * A:長度區別 * 數組的長度固定 * 集合長度可變 * B:內容不同 * 數組存儲的是同一種類型的元素 * 而集合可以存儲不同類型的元素 * C:元素的數據類型問題

對象數組的內存圖解:

集合框架面試題??

?

集合的繼承體系圖解:

什么是集合框架?

?

* 數組和集合的區別?
* A:長度區別
* 數組的長度固定
* 集合長度可變
* B:內容不同
* 數組存儲的是同一種類型的元素
* 而集合可以存儲不同類型的元素
* C:元素的數據類型問題
* 數組可以存儲基本數據類型,也可以存儲引用數據類型
* 集合只能存儲引用類型
*
* 剛說過集合是存儲多個元的,但是呢,存儲多個元素我們也是有不同需求的:比如說,我要這多個元素中不能有相同的元素,
* 再比如說,我要這多個元素按照某種規則排序一下。針對不同的需求,Java就提供了不同的集合類,這樣呢,Java就提供了很多個集合類。
* 這多個集合類的數據結構不同,結構不同不重要的,重要的是你要能夠存儲東西,并且還要能夠使用這些東西,比如說判斷,獲取等。
* 既然這樣,那么,這多個集合類是有共性的內容的,我們把這些集合類的共性內容不斷的向上提取,最終就能形成集合的繼承體系結構。
*
* 數據結構:數據的存儲方式。
*
* Collection:是集合的頂層接口,它的子體系有重復的,有唯一的,有有序的,有無序的。(后面會慢慢的講解)
*
* Collection的功能概述:
* 1:添加功能
* boolean add(Object obj):添加一個元素
* boolean addAll(Collection c):添加一個集合的元素
* 2:刪除功能
* void clear():移除所有元素
* boolean remove(Object o):移除一個元素
* boolean removeAll(Collection c):移除一個集合的元素(是一個還是所有)。只要有一個元素被移除了,就返回true。
* 3:判斷功能
* boolean contains(Object o):判斷集合中是否包含指定的元素
* boolean containsAll(Collection c):判斷集合中是否包含指定的集合元素(是一個還是所有)。只有包含所有的元素,才叫包含
* boolean isEmpty():判斷集合是否為空
* 4:獲取功能
* Iterator<E> iterator()(重點)
* 5:長度功能
* int size():元素的個數
* 面試題:數組有沒有length()方法呢?字符串有沒有length()方法呢?集合有沒有length()方法呢?

集合框架技術、
* 6:交集功能
* boolean retainAll(Collection c):兩個集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢??

//假設有兩個集合A,B。

//A對B做交集,最終的結果保存在A中,B不變。
//返回值表示的是A是否發生過改變。

java中collection和collections的區別。
* 7:把集合轉成數組,可以實現集合的遍歷
* Object[] toArray()

 1         // 遍歷
 2         // Object[] toArray():把集合轉成數組,可以實現集合的遍歷
 3         Object[] objs = c.toArray();
 4         for (int x = 0; x < objs.length; x++) {
 5             // System.out.println(objs[x]);
 6             // 我知道元素是字符串,我在獲取到元素的的同時,還想知道元素的長度。
 7             // System.out.println(objs[x] + "---" + objs[x].length());
 8             // 上面的實現不了,原因是Object中沒有length()方法
 9             // 我們要想使用字符串的方法,就必須把元素還原成字符串
10             // 向下轉型
11             String s = (String) objs[x];
12             System.out.println(s + "---" + s.length());

?

* Iterator iterator():迭代器,集合的專用遍歷方式
* Object next():獲取元素,并移動到下一個位置。
* NoSuchElementException:沒有這樣的元素,因為你已經找到最后了。
* boolean hasNext():如果仍有元素可以迭代,則返回 true。

java集合框架的組成、?

 1         // 創建集合對象
 2         Collection c = new ArrayList();
 3 
 4         // 創建并添加元素
 5         c.add("hello");
 6         c.add("world");
 7         c.add("java");
 8 
 9         // Iterator iterator():迭代器,集合的專用遍歷方式
10         Iterator it = c.iterator(); // 實際返回的肯定是子類對象,這里是多態
11 
12         // 最終版代碼
13         while (it.hasNext()) {
14             // System.out.println(it.next());
15             String s = (String) it.next();
16             System.out.println(s);
17         }

?

1         // for循環改寫
2          for(Iterator it = c.iterator();it.hasNext();){
3          Student s = (Student) it.next();
4          System.out.println(s.getName() + "---" + s.getAge());

?

// NoSuchElementException 不要多次使用it.next()方法
// System.out.println(((Student) it.next()).getName() + "---"
// + ((Student) it.next()).getAge());

?

迭代器使用圖解和原理解析:

?

* List集合的特點:
* 有序(存儲和取出的元素一致),可重復的。

?

* List集合的特有功能:
* A:添加功能
* void add(int index,Object element):在指定位置添加元素
* B:獲取功能
* Object get(int index):獲取指定位置的元素
* C:列表迭代器
* ListIterator listIterator():List集合特有的迭代器
* D:刪除功能
* Object remove(int index):根據索引刪除元素,返回被刪除的元素
* E:修改功能
* Object set(int index,Object element):根據索引修改元素,返回被修飾的元素

?

* 列表迭代器:
* ListIterator listIterator():List集合特有的迭代器
* 該迭代器繼承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法。
*
* 特有功能:
* Object previous():獲取上一個元素
* boolean hasPrevious():判斷是否有元素
*
* 注意:ListIterator可以實現逆向遍歷,但是必須先正向遍歷,才能逆向遍歷,所以一般無意義,不使用。

 1         // 創建List集合對象
 2         List list = new ArrayList();
 3         list.add("hello");
 4         list.add("world");
 5         list.add("java");
 6 
 7         // ListIterator listIterator()
 8         ListIterator lit = list.listIterator(); // 子類對象
 9 
10          while (lit.hasNext()) {
11          String s = (String) lit.next();
12          System.out.println(s);
13          }
14 
15         while (lit.hasPrevious()) {
16             String s = (String) lit.previous();
17             System.out.println(s);
18         }

?

?

* 問題?
* 我有一個集合,如下,請問,我想判斷里面有沒有"world"這個元素,如果有,我就添加一個"javaee"元素,請寫代碼實現。
*
* ConcurrentModificationException:當方法檢測到對象的并發修改,但不允許這種修改時,拋出此異常。
* 產生的原因:
* 迭代器是依賴于集合而存在的,在判斷成功后,集合的中新添加了元素,而迭代器卻不知道,所以就報錯了,這個錯叫并發修改異常。
* 其實這個問題描述的是:迭代器遍歷元素的時候,通過集合是不能修改元素的。
* 如何解決呢?
* A:迭代器迭代元素,迭代器修改元素
* 元素是跟在剛才迭代的元素后面的。
* B:集合遍歷元素,集合修改元素(普通for)
* 元素在最后添加的。

// 方式1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器卻沒有添加功能,所以我們使用其子接口ListIterator

1          ListIterator lit = list.listIterator();
2          while (lit.hasNext()) {
3            String s = (String) lit.next();
4            if ("world".equals(s)) {
5            lit.add("javaee");
6            }
7          }

?

// 方式2:集合遍歷元素,集合修改元素(普通for)

1         for (int x = 0; x < list.size(); x++) {
2             String s = (String) list.get(x);
3             if ("world".equals(s)) {
4                 list.add("javaee");
5             }
6         }

?

數據結構之棧和隊列:

?

數據結構之數組和鏈表:

?

List:(面試題List的子類特點)
ArrayList:
底層數據結構是數組,查詢快,增刪慢。
線程不安全,效率高。
Vector:
底層數據結構是數組,查詢快,增刪慢。
線程安全,效率低。
LinkedList:
底層數據結構是鏈表,查詢慢,增刪快。
線程不安全,效率高。

List有三個兒子,我們到底使用誰呢?
看需求(情況)。

要安全嗎?
要:Vector(即使要安全,也不用這個了,后面有替代的)
不要:ArrayList或者LinkedList
查詢多:ArrayList
增刪多:LinkedList

如果你什么都不懂,就用ArrayList。

轉載于:https://www.cnblogs.com/samuraihuang/p/9824315.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/166312.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息