① 什麼是數據結構和演算法學演算法還需要去了解數據結構嗎
你這理解不完全正確。
因為數據結構不只是內存中數據的排列,它是對數據的一種組織方式,就像圖書館要排書一樣,是為了便於操作,同時它本身也集成了對通用操作:比如查找、比較等的支持。數組不是一種數據結構,而是一種數據類型。一個完整的數據結構包括邏輯結構和存儲結構。通常選擇了數據結構,演算法也隨之確定,是數據而不是演算法是系統構造的關鍵因素。
因此在語言實現上,數據結構通常也會包含與之相對應的演算法集合,這些演算法是指基本演算法:查找、索引、比較等。
數據結構的邏輯結構和硬體是沒有關系的,而其存儲結構受到計算機硬體系統工作方式的影響,通常這點影響在於數據時順序存儲還是離散存儲。演算法的基礎是數據結構。只有指定明確的數據結構,演算法才能設計完成,脫離數據結構,演算法是無法,也不可能成立的。因為不需要數據的演算法就不是一個有效的計算機演算法,演算法中任何對數據的組織形式都可以被稱之為數據結構。
2.數據結構在編程中的地位是極其重要的,是一個程序實現的基礎中的基礎,在此基礎上才能構建演算法。通常而言,你不了解什麼高深的演算法,一樣能完成工作,但是如果你不了解基本的數據結構,那麼可以說,你根本就不能完成一個任何有實質性內容的程序。Donald Ervin Knuth教授在其《計算機程序設計藝術》的第一卷《基本演算法》中花費的絕大部分的篇幅去論述數據結構。由此可見數據結構對演算法的重要性。
② Java哪些容器是底層容器
1.ArrayList(非線程安全的)
底層的數據結構其實就是數組,但是它比數組優秀的地方在於他是動態的,即不必像數組那樣固定大小,那麼他是如何實現這種數據結構是數組,但是給我們看起來確實不固定大小的呢?
ArrayList 是通過將底層Object數組復制的方式(System.array方法)來處理數組的增長;
當ArrayList 的容量不足時,其擴充容量的方式:先將容量擴充至當前容量的1.5倍,若還不夠,則將容量擴充至當前需要的數量。
所以由上面可以看出ArrayList用於查找的話就相當於數組十分快,但是如果是插入或者刪除的話則十分慢。
2.LinkedList(非線程安全)
顧名思義底層的數據結構是鏈表,而且是雙向鏈表,所以他也具有鏈表的特點,即插入或者刪除的話很快,但是如果是查找的話則比較緩慢。
3.HashSet(非線程安全)
底層數據結構是散列表(關於散列表看下面),僅僅存儲對象(而hashMap是存儲鍵值對),突出特點是存的對象不可重復,保證這一點是通過先對比每個對象的hashCode,如果hashCode相同,再對比equal()來確定兩個對象是否重復,所以放入hashset的對象一定要重寫hashCode()和equal().
4.HsahMap(非線程安全)
底層也是散列表(見下面),通過鍵值對來存儲數據,通過鍵來獲取值,速度比hashset快,鍵和值可以null.
5.LinkedHashMap
繼承自HashMap,只不過在HashMap哈希表的數據結構基礎上,又在每個entry裡面記錄上一個和下一個的引用,所以他有記錄每個item順序的功能(與hashmap相比),所以他實際上是哈希表加雙向鏈表的一種數據結構。LruCache裡面就是用的就是linkedhashmap來實現的。
現在介紹一下散列表(哈希表)這種數據結構:
首先每個對象產生一個哈希值(因為哈希值太大,數組不可能開這么大,會造成巨大浪費),所以需要通過一個哈希函數對哈希值進行轉化,如圖1000就轉化為0,,3013就放入3,這樣訪問對象就跟數組一樣便捷,插入對象也十分便捷,如果是碰到哈希值轉化後是同一值得,即產生沖突,則像上面這種解決沖突的方式就是 鏈表的方式,哈希值在數組里同一位置的都用鏈表鏈接起來。所以散列表實際上是查找快,插入刪除也快,解決了數組和鏈表各自的一些缺點。
③ 在JAVA中常用的數據結構(容器)有哪些有什麼特點
JAVA的容器---List,Map,Set
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
④ Java的數據結構你用過哪些Map與Set的本質區別是什麼
個人認為:
Map的本質就是Set<Map.Entry>; Set內部維護的是數組結構;
Map.Entry是Map的內部接回口,是key-value格式;
Map.Entry覆蓋答了hash()方法, hashCode就是key的hashCode, 因此key不能重復; 且按照key的hashCode決定了在HashMap中的位置;
Map.Entry覆蓋了CompareTo()方法, 返回的是key之間的比較, 因此TreeMap是按照key來排序的;