前言
本周是學(xué)習(xí)java的第三周,專(zhuān)注于看視頻學(xué)習(xí)而沒(méi)有做題。。
參考教程:
本周學(xué)習(xí)要點(diǎn):
1.接口都是抽象類(lèi),[訪問(wèn)修飾符] interface 接口名 [extends 父接口1,父接口2,... ]{常量定義,方法定義}。
2.內(nèi)部類(lèi):即一個(gè)類(lèi)在另一個(gè)類(lè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ù)組起始位置,拷貝長(zhǎng)度,若要?jiǎng)h除數(shù)組內(nèi)某個(gè)元素,只需要對(duì)數(shù)組自身拷貝后令最后一個(gè)值為null即可。數(shù)組擴(kuò)容可以定義另一個(gè)更大的數(shù)組然后將原數(shù)組拷貝過(guò)去。
4.Arrays.binarySearch(array,key)在數(shù)組中查找指定數(shù)字所在數(shù)字內(nèi)的索引,找不到則返回-1。
5.Arrays.toString()可將數(shù)組打印出來(lái)。
6.包裝類(lèi),因?yàn)閕nt,char等不是對(duì)象,無(wú)法向上獲取到Object提供的方法,所以才有了包裝類(lèi),即是把基本數(shù)據(jù)類(lèi)型和一些方法包裝到一個(gè)類(lèi)中。
7.包裝類(lèi)可用intvalue doublevalue等轉(zhuǎn)換成基本數(shù)據(jù)類(lèi)型。Integer.parseInt可把字符串轉(zhuǎn)換成包裝類(lèi)對(duì)象,包裝類(lèi)轉(zhuǎn)字符串用`toString。
8.包裝類(lèi)可直接Integer a = 10=Integer a = Integer.valueof(10)編譯器會(huì)幫我們自動(dòng)裝箱。同理,也有自動(dòng)拆箱,int b = a=int b = a.intValue()。
9.兩個(gè)包裝類(lèi)如Integer a=1234,Integer b =1234但a!=b,因?yàn)樗麄兪莾蓚€(gè)不同的對(duì)象,但比較值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 接口存儲(chǔ)一組不唯一,無(wú)序的對(duì)象。)
2.List(List 接口存儲(chǔ)一組不唯一,有序(插入順序)的對(duì)象。)
3.Set(Set 接口存儲(chǔ)一組唯一,無(wú)序的對(duì)象。)
4.SortedSet(繼承于Set保存有序的集合)
5.Map(Map 接口存儲(chǔ)一組鍵值對(duì)象,提供key(鍵)到value(值)的映射。)
6.Map.Entry(描述在一個(gè)Map中的一個(gè)元素(鍵/值對(duì))。是一個(gè)Map的內(nèi)部類(lèi)。)
7.SortedMap(繼承于 Map,使 Key 保持在升序排列。)
8.Enumeration(這是一個(gè)傳統(tǒng)的接口和定義的方法,通過(guò)它可以枚舉(一次獲得一個(gè))對(duì)象集合中的元素。這個(gè)傳統(tǒng)接口已被迭代器取代。)
集合框架中提供了一些集合類(lèi):
1.AbstractCollection
實(shí)現(xiàn)了大部分的集合接口。
2.AbstractList
繼承于AbstractCollection 并且實(shí)現(xiàn)了大部分List接口。
3.AbstractSequentialList
繼承于 AbstractList ,提供了對(duì)數(shù)據(jù)元素的鏈?zhǔn)皆L問(wèn)而不是隨機(jī)訪問(wèn)。
4.LinkedList
該類(lèi)實(shí)現(xiàn)了List接口,允許有null(空)元素。主要用于創(chuàng)建鏈表數(shù)據(jù)結(jié)構(gòu),該類(lèi)沒(méi)有同步方法,如果多個(gè)線(xiàn)程同時(shí)訪問(wèn)一個(gè)List,則必須自己實(shí)現(xiàn)訪問(wèn)同步,解決方法就是在創(chuàng)建List時(shí)候構(gòu)造一個(gè)同步的List。例如:
Listlist=Collections.synchronizedList(newLinkedList(...));
LinkedList 查找效率低。
5.ArrayList
該類(lèi)也是實(shí)現(xiàn)了List的接口,實(shí)現(xiàn)了可變大小的數(shù)組,隨機(jī)訪問(wèn)和遍歷元素時(shí),提供更好的性能。該類(lèi)也是非同步的,在多線(xiàn)程的情況下不要使用。ArrayList 增長(zhǎng)當(dāng)前長(zhǎng)度的50%,插入刪除效率低。
6.AbstractSet
繼承于AbstractCollection 并且實(shí)現(xiàn)了大部分Set接口。
7.HashSet
該類(lèi)實(shí)現(xiàn)了Set接口,不允許出現(xiàn)重復(fù)元素,不保證集合中元素的順序,允許包含值為null的元素,但最多只能一個(gè)。
8.LinkedHashSet
具有可預(yù)知迭代順序的 Set 接口的哈希表和鏈接列表實(shí)現(xiàn)。
9.TreeSet
該類(lèi)實(shí)現(xiàn)了Set接口,可以實(shí)現(xiàn)排序等功能。
10.AbstractMap
實(shí)現(xiàn)了大部分的Map接口。
11.HashMap
HashMap 是一個(gè)散列表,它存儲(chǔ)的內(nèi)容是鍵值對(duì)(key-value)映射。
該類(lèi)實(shí)現(xiàn)了Map接口,根據(jù)鍵的HashCode值存儲(chǔ)數(shù)據(jù),具有很快的訪問(wèn)速度,最多允許一條記錄的鍵為null,不支持線(xiàn)程同步。
12.TreeMap
繼承了AbstractMap,并且使用一顆樹(shù)。
13.WeakHashMap
繼承AbstractMap類(lèi),使用弱密鑰的哈希表。
14.LinkedHashMap
繼承于HashMap,使用元素的自然順序?qū)υ剡M(jìn)行排序.
15.IdentityHashMap
繼承AbstractMap類(lèi),比較文檔時(shí)使用引用相等。
目前我對(duì)于集合框架還沒(méi)做進(jìn)一步了解,正在看視頻學(xué)習(xí)中。
回溯算法
大致就是對(duì)問(wèn)題進(jìn)行探索求解,但不滿(mǎn)足條件時(shí)就進(jìn)行回溯,調(diào)用它自己,實(shí)際上也就是遞歸,事實(shí)上就是把問(wèn)題的每一種可能都列出來(lái),也就是窮舉法。回溯法可以理解為通過(guò)選擇不同的岔路口尋找目的地,一個(gè)岔路口一個(gè)岔路口的去嘗試找到目的地。如果走錯(cuò)了路,繼續(xù)返回來(lái)找到岔路口的另一條路,直到找到目的地。

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