A. java單線鏈表、雙向鏈表及循環鏈表中插入某節點,和刪除某節點的演算法(可能是頭結點、中間節點、尾節點)
API里有現成的,直接用好了
java.util.List
remove
E remove(int index)移除列表中指定位置的元素(可選操作)。將所有的後續元素向左移動(將其索引減 1)。返回從列表中移除的元素。
參數:
index - 要移除的元素的索引
返回:
以前在指定位置的元素
拋出:
UnsupportedOperationException - 如果列表不支持 remove 操作
IndexOutOfBoundsException - 如果索引超出范圍 (index < 0 || index >= size())
remove
boolean remove(Object o)從此列表中移除第一次出現的指定元素(如果存在)(可選操作)。如果列表不包含元素,則不更改列表。更確切地講,移除滿足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i 的元素(如果存在這樣的元素)。如果此列表已包含指定元素(或者此列表由於調用而發生更改),則返回 true。
指定者:
介面 Collection<E> 中的 remove
參數:
o - 要從該列表中移除的元素,如果存在的話
返回:
如果列表包含指定的元素,則返回 true
拋出:
ClassCastException - 如果指定元素的類型和此列表不兼容(可選)
NullPointerException - 如果指定的元素是 null,並且此列表不允許 null 元素(可選)
UnsupportedOperationException - 如果列表不支持 remove 操作
B. 誰幫我總結下java中的知識要點 和易錯點 要系統的
下面簡單列舉一下學習java的一個系統知識點的一些介紹():
一:java基礎部分:java基礎的時候,有些知識點是非常重要的,比如循環系列。For,while,do-while.這方面只要用心點基本沒什麼難點。
二:面向對象:oop面向對象的時候,偏重理論,相信這方面的文章也很多,可以多看看,在這就不說了。重點掌握面向對象的三大特徵和基本原理。
三:java核心一:這方面主要偏重API,所以在學習了這章的時候,一定要對照API去學習,多看API,主要就是方法多,string和集合的方法最為重要。
四:java核心二:主要講解了異常,線程和IO流,其實個人認為重點掌握線程就行,對於流和異常多寫就行,線程偏重理論也最為重要。
五:oracle資料庫方面:建議學習資料庫的時候一定要端正態度,資料庫極為重要,本人當時在學習這個的時候,一直以為資料庫只是為了增刪改查,故沒有認真學習,後期面試的時候吃了不少虧,因為現在軟體公司對資料庫的要求跟java一樣重要,基本都會單獨一張筆試題筆試資料庫。
六:JDBC/XML系列:JDBC主要是3個核心介面(Connection) (Statement) (ResultSet)的使用,在學習的時候,熟練運用3介面,jdbc的原理也相當重要,雖然後期學習了HIbernate之後,JDBC不需要再用,但其底層原理還是JDBC,而且現在很多軟體公司不一定會用到Hibernate框架,所以建議還是把「本」學好,XML:重點掌握解析互換的2個核心介面方法。
七:HTML/CSS/js:對於這個,本人相當糾結,因為這個有點偏向於美工的意思,所以後期想從事後台開發的同學一般不會太重視,但是現在都是web項目,而且很多軟體公司並不是把許多這方面的事情交給美工(除非是那種有很高要求的靜態頁面),而且現在html代碼都是在jsp裡面寫,所以建議還是好好學學,因為公司不會讓一個美工去專門為你寫一些簡單的html代碼,包括js!這章其實不難,就是屬性方法知識點比較多,多記記,多寫寫,重在多練!
八:Servlet/Jsp:如果想從事web和b/s開發(現在基本都是web和b/s開發),這章極為重要,伺服器的訪問以及配置。tomcat的使用都在這一章,雖然後期struts框架的學習簡化了servlet代碼的繁瑣性,但是你可知道現在有些公司只用servlet不用struts!即使用了框架技術也不一定是struts!servlet跟JDBC一樣都是「本」,而struts和Hibernate一樣都是封裝了它們而後簡化代碼而已。所以只有把「本」學會了,就不怕框架的變化!jsp就不多說了,如果你學習java這個就不會缺少!後期b/s項目頁面的布局以及功能就全靠它了。
九:Ajax/Jquery:當初學習這個的時候,本人沒有用心去學,然後結果就是本人在進公司之後花了一個星期的時間練習jQuery!這個對於強化web伺服器頁面的功能技術實在是強大.這個封裝了js對象的技術,可以對jsp頁面元素進行樣式的更改以及操作,想要玩好web項目,這個技術必須玩好!
十:SSH:傳說中的三大框架;
Struts:前面已經提到,這個框架技術主要是為了彌補servlet和jsp頁面之間交互的復雜性,可以有效的提高客戶端與伺服器之間的交互。而且採用了MVC思想進行改善減弱代碼之間的復雜性。
Hibernate:主要封裝了jdbc的核心功能,可以採用映射方式訪問並操作資料庫,一定程度上講是簡化了程序代碼,但前面已經提到,由於是框架,而框架是隨著時代而改變的,並且很多公司不一定用到這個框架,所以,只有掌握好JDBC的根本原理,才會更加理解這個框架。
Spring框架:其實後期學框架知識大家都會覺得很無趣和乏味,因為框架的知識都是理論很深的知識點,spring主要是要完善代碼之間的耦合度,包括類似工廠模式的對象自動控制,AOP的事物日誌管理等,都其實是為了減少程序員的工作量,但不得不說是有很大的作用的,而且這個框架可以整合JDBC以及Hibernate,struts技術,可以把所有的框架技術都整合在一起。相當於一塊主板把內存,風扇,cpu,顯卡都集中在一起。
前
面所有的都是個人學習之中的一點感受,希望你也能有所感觸,主要想說明的是前面的基礎一定要打好,對於學習方法的問題也可以和大家聊一聊,本人在學習之
初,由於面向對象和集合一些理論較深的知識點出現,導致後期比較注重理論,最終在寫實際項目的時候吃了苦頭,因為代碼量沒有跟上,即使理論都懂,但很多功
能還是無法自己寫出,所以要強調的是在注重理論的情況下一定要多寫代碼,我的建議是在理論比較深刻的知識點面前,比如面向對象,集合,線程這些知識,多看
點理論,而對於html,css以及API方法比較多的知識點的情況下,多寫代碼。總之,各50%最好!當然,這就需要大家付出更多的時間和精力辛苦勤勞下了!其實java的學習還是要多練代碼,多思考,舉一反三,任何的知識點只要你認真的去做,沒有拿不下的頑石,勤能補拙,相信自己,然後用功,你就勝利了。
下面為提供部分本人整理的筆記:
String的核心方法:
字元串轉換整數:Integer.parseInt(字元串變數);
整數轉換字元串:String.valueOf(整型變數)
日期轉字元串:new SimpleDateFormat().format(date類型)
返回字元串元素的字元長度:length()方法
Int IndexOf(String a),在字元串元素中檢索a字元,返回第一個出現的下標位置。
Int indexOf(String a,int fromIndex ),從formIndex位置開始檢索字元串,找到之後的a字元。
Char charAt(int
index):用於返回字元串index位置的字元.
Substring(begin,end):返回子字元串
valueOf(Object):返回Object參數的字元串表示形式。
toUpperCase():返回字元串的大寫形式。
toLowerCase():返回小寫形式。
StringBuilder核心方法:
StringBuilder:性能好,非線程安全.
Append(String s):追加字元串。
Insert(3,」String」)插入字元串
Delete(int start,int
end):刪除字元串。
Replace(int start,int
end, String s):替換字元串
Reverse():字元串反轉.
集合核心方法:
Boolean isEmpty():判斷集合是否為空
Size():判斷集合裡面元素的個數
Boolean Contains(Object):判斷集合元素中是否包含Object元素.
Clear():清空集合。
Boolean Add(Object):向集合中添加元素,返回是否添加成功.
Boolean
remove(Object):從集合中刪除元素。
Iterator
iterator():迭代元素。
增強for循環:for(Point p:list):遍歷list,每次循環從list中取出一個元素賦值給p.
List單獨的方法:
get(index):得到index下標的集合元素.
Set(index,元素o):設置index處的元素為元素o,前面的元素將被覆蓋,並且方法返回的值是前面的元素。
Add(index,元素):在指定下標index添加元素
Remove(index):刪除指定下標的元素值
List:定義線性表數據結構.
ArrayList:動態數組方式,適合隨機訪問對象.
LinkedList:鏈表方式,適合於插入和刪除.
subList():用於獲取子List,獲取的List與原List佔有相同的存貯空間,操作會影響原List.
List<E> subList(int 開始下標,int 結束下標);
C. JAVA的集合類型有哪些
集合類型主要有3種:set(集)、list(列表)和map(映射)。
1、List(有序、可重復)
List里存放的對象是有序的,同時也是可以重復的,List關注的是索引,擁有一系列和索引相關的方法,查詢速度快。因為往list集合里插入或刪除數據時,會伴隨著後面數據的移動,所有插入刪除數據速度慢。
2、Set(無序、不能重復)
Set里存放的對象是無序,不能重復的,集合中的對象不按特定的方式排序,只是簡單地把對象加入集合中。
3、Map(鍵值對、鍵唯一、值不唯一)
Map集合中存儲的是鍵值對,鍵不能重復,值可以重復。根據鍵得到值,對map集合遍歷時先得到鍵的set集合,對set集合進行遍歷,得到相應的值。
(3)javaapi循環鏈表擴展閱讀:
JAVA集合類型四種常見輸出方式:
1、Iterator:迭代輸出,是使用最多的輸出方式。
2、ListIterator:是Iterator的子介面,專門用於輸出List中的內容。
3、foreach輸出:JDK1.5之後提供的新功能,可以輸出數組或集合。
4、for循環。
代碼示例如下:
for的形式:for(inti=0;i<arr.size();i++){...}
foreach的形式:for(inti:arr){...}
iterator的形式:
Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}
參考資料來源:網路:java集合類
D. java linked list里的元素順序反過來
定義一個LinkedList<Integer> templist = new LinkedList<>();來存儲list裡面的值,通過迭代list,將值插入在templist的頭上,那麼templist就是list的反轉了,最後將templist賦值給list就行了!
如下代碼:
publicvoidreverse(){
LinkedList<Integer>list=newLinkedList<>();
LinkedList<Integer>templist=newLinkedList<>();
inti=0;
while(i<6){
list.add(i);
i++;
}
Iterator<Integer>it=list.iterator();
intm;
while(it.hasNext()&&i>=0){
m=it.next();
templist.addFirst(m);
i--;
}
list=templist;
System.out.println(list);
}
運行結果為:
5 4 3 2 1 0
從API中可以看到List等Collection的實現並沒有同步化,如果在多線程應用程序中出現同時訪問,而且出現修改操作的時候都要求外部操作同步化;調用Iterator操作獲得的Iterator對象在多線程修改Set的時候也自動失效,並拋出java.util.。這種實現機制是fail-fast,對外部的修改並不能提供任何保證。
Iterator是工作在一個獨立的線程中,並且擁有一個 mutex鎖,就是說Iterator在工作的時候,是不允許被迭代的對象被改變的。
Iterator被創建的時候,建立了一個內存索引表(單鏈表),這個索引表指向原來的對象,當原來的對象數量改變的時候,這個索引表的內容沒有同步改變,所以當索引指針往下移動的時候,便找不到要迭代的對象,於是產生錯誤。
List、Set等是動態的,可變對象數量的數據結構,但是Iterator則是單向不可變,只能順序讀取,不能逆序操作的數據結構,當 Iterator指向的原始數據發生變化時,Iterator自己就迷失了方向。
所以如果像下面這么寫就會拋出異常java.util.
:
publicvoidreverse(){
LinkedList<Integer>list=newLinkedList<>();
inti=0;
while(i<6){
list.add(i);
i++;
}
Iterator<Integer>it=list.iterator();
intm;
while(it.hasNext()&&i>=0){
m=it.next();
list.add(m);
list.remove(0);
i--;
}
System.out.println(list);
}