前言
本周是學(xué)習(xí)java的第三周,專注于看視頻學(xué)習(xí)而沒有做題。。
參考教程:
本周學(xué)習(xí)要點(diǎn):
1.接口都是抽象類,[訪問修飾符] interface 接口名 [extends 父接口1,父接口2,... ]{常量定義,方法定義}。
2.內(nèi)部類:即一個類在另一個類的內(nèi)部,實(shí)例化Outer.Inner inner = new Outer().new Inner()。
3.System.arraycopy(src, srcPos, dest, destPos, length)可用于數(shù)組自身的拷貝,參數(shù)分別是原數(shù)組,拷貝位置,目標(biāo)數(shù)組,目標(biāo)數(shù)組起始位置,拷貝長度,若要刪除數(shù)組內(nèi)某個元素,只需要對數(shù)組自身拷貝后令最后一個值為null即可。數(shù)組擴(kuò)容可以定義另一個更大的數(shù)組然后將原數(shù)組拷貝過去。
4.Arrays.binarySearch(array,key)在數(shù)組中查找指定數(shù)字所在數(shù)字內(nèi)的索引,找不到則返回-1。
5.Arrays.toString()可將數(shù)組打印出來。
6.包裝類,因?yàn)閕nt,char等不是對象,無法向上獲取到Object提供的方法,所以才有了包裝類,即是把基本數(shù)據(jù)類型和一些方法包裝到一個類中。
7.包裝類可用intvalue doublevalue等轉(zhuǎn)換成基本數(shù)據(jù)類型。Integer.parseInt可把字符串轉(zhuǎn)換成包裝類對象,包裝類轉(zhuǎn)字符串用`toString。
8.包裝類可直接Integer a = 10=Integer a = Integer.valueof(10)編譯器會幫我們自動裝箱。同理,也有自動拆箱,int b = a=int b = a.intValue()。
9.兩個包裝類如Integer a=1234,Integer b =1234但a!=b,因?yàn)樗麄兪莾蓚€不同的對象,但比較值a.equals(b)是為true,但若處于[-128,127]范圍內(nèi)則a=b為true,因?yàn)閇-128,127]處于緩存范圍內(nèi)。
Java集合框架初步了解

在力扣中做了好多題,發(fā)現(xiàn)java的題大部分都需要運(yùn)用到集合框架,該框架提供了一些接口:
1.Collection(Collection 接口存儲一組不唯一,無序的對象。)
2.List(List 接口存儲一組不唯一,有序(插入順序)的對象。)
3.Set(Set 接口存儲一組唯一,無序的對象。)
4.SortedSet(繼承于Set保存有序的集合)
5.Map(Map 接口存儲一組鍵值對象,提供key(鍵)到value(值)的映射。)
6.Map.Entry(描述在一個Map中的一個元素(鍵/值對)。是一個Map的內(nèi)部類。)
7.SortedMap(繼承于 Map,使 Key 保持在升序排列。)
8.Enumeration(這是一個傳統(tǒng)的接口和定義的方法,通過它可以枚舉(一次獲得一個)對象集合中的元素。這個傳統(tǒng)接口已被迭代器取代。)
集合框架中提供了一些集合類:
1.AbstractCollection
實(shí)現(xiàn)了大部分的集合接口。
2.AbstractList
繼承于AbstractCollection 并且實(shí)現(xiàn)了大部分List接口。
3.AbstractSequentialList
繼承于 AbstractList ,提供了對數(shù)據(jù)元素的鏈?zhǔn)皆L問而不是隨機(jī)訪問。
4.LinkedList
該類實(shí)現(xiàn)了List接口,允許有null(空)元素。主要用于創(chuàng)建鏈表數(shù)據(jù)結(jié)構(gòu),該類沒有同步方法,如果多個線程同時訪問一個List,則必須自己實(shí)現(xiàn)訪問同步,解決方法就是在創(chuàng)建List時候構(gòu)造一個同步的List。例如:
Listlist=Collections.synchronizedList(newLinkedList(...));
LinkedList 查找效率低。
5.ArrayList
該類也是實(shí)現(xiàn)了List的接口,實(shí)現(xiàn)了可變大小的數(shù)組,隨機(jī)訪問和遍歷元素時,提供更好的性能。該類也是非同步的,在多線程的情況下不要使用。ArrayList 增長當(dāng)前長度的50%,插入刪除效率低。
6.AbstractSet
繼承于AbstractCollection 并且實(shí)現(xiàn)了大部分Set接口。
7.HashSet
該類實(shí)現(xiàn)了Set接口,不允許出現(xiàn)重復(fù)元素,不保證集合中元素的順序,允許包含值為null的元素,但最多只能一個。
8.LinkedHashSet
具有可預(yù)知迭代順序的 Set 接口的哈希表和鏈接列表實(shí)現(xiàn)。
9.TreeSet
該類實(shí)現(xiàn)了Set接口,可以實(shí)現(xiàn)排序等功能。
10.AbstractMap
實(shí)現(xiàn)了大部分的Map接口。
11.HashMap
HashMap 是一個散列表,它存儲的內(nèi)容是鍵值對(key-value)映射。
該類實(shí)現(xiàn)了Map接口,根據(jù)鍵的HashCode值存儲數(shù)據(jù),具有很快的訪問速度,最多允許一條記錄的鍵為null,不支持線程同步。
12.TreeMap
繼承了AbstractMap,并且使用一顆樹。
13.WeakHashMap
繼承AbstractMap類,使用弱密鑰的哈希表。
14.LinkedHashMap
繼承于HashMap,使用元素的自然順序?qū)υ剡M(jìn)行排序.
15.IdentityHashMap
繼承AbstractMap類,比較文檔時使用引用相等。
目前我對于集合框架還沒做進(jìn)一步了解,正在看視頻學(xué)習(xí)中。
回溯算法
大致就是對問題進(jìn)行探索求解,但不滿足條件時就進(jìn)行回溯,調(diào)用它自己,實(shí)際上也就是遞歸,事實(shí)上就是把問題的每一種可能都列出來,也就是窮舉法。回溯法可以理解為通過選擇不同的岔路口尋找目的地,一個岔路口一個岔路口的去嘗試找到目的地。如果走錯了路,繼續(xù)返回來找到岔路口的另一條路,直到找到目的地。

n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,并且使皇后彼此之間不能相互攻擊。
上圖為 8 皇后問題的一種解法。
給定一個整數(shù) n,返回所有不同的 n 皇后問題的解決方案。
每一種解法包含一個明確的 n 皇后問題的棋子放置方案,該方案中 'Q' 和 '.' 分別代表了皇后和空位。
這道題我目前的思路就是使用回溯法,在棋盤上對于皇后而言放置一只皇后之后它的行與列以及對角線都不能放置其他皇后,所以是使用回溯法在每下一次之后若不滿足則回溯。但限于我能力我目前連官方給的題解都看不懂。。所以還需要再進(jìn)一步學(xué)習(xí)java的集合與泛型。
歡迎訪問我的博客www.redmango.top