說數據結構沒用那是不可能的,但是要看你做什麼了。
比如說你要血java,如果你想搞網站方面的話就簡單了。
數據結構基本可以不用學,因為在web應用中,能用到的演算法的地方少之又少,幾乎就那麼幾個,想記不住都難。
但是如果你要往軟體方面和手軟方面發展的話就要學一部分了,但是這東西學是學不到的,能學到的只不過是思路,到時候自己發揮一下,想個演算法就行了,演算法這東西說難不難,難的東西有,但是沒有你能用到的。
像你這樣的情況我想說兩點:
首先,說你想從事演算法類的工作,那麼選擇什麼樣的語言都是一樣的,演算法肯定有,但是用到的都不多。剛進公司的時候一般是用不到演算法的,因為演算法都是別人想的,你也許有好的演算法,但是別人不一定採用,但是你的演算法基礎不要丟掉,因為等你當了項目經理後這個是必不可少的。
其次,你要知道,在學計算機的路上,很少有人能學什麼就做什麼,大家都在被社會潮流推動,想要不掉隊就只能隨波逐流。因為畢竟我們都不想一輩子寫代碼。大家都是拿這東西做個跳板。
學java的路很長,但是也很有趣,希望你能學好。我想以你的演算法基礎,以後想成為專業精英不是問題。加油吧。
⑵ 如果你是一個 Java 面試官,你會問哪些問題
1、談談你對 Java 平台的理解?「Java 是解釋執行」,這句話正確嗎?考點分析:對於這類籠統的問題,你需要盡量表現出自己的思維深入並系統化,Java 知識理解得也比較全面,一定要避免讓面試官覺得你是個「知其然不知其所以然」的人。畢竟明白基本組成和機制,是日常工作中進行問題診斷或者性能調優等很多事情的基礎,相信沒有招聘方會不喜歡「熱愛學習和思考」的面試者。回歸正題,對於 Java 平台的理解,可以從很多方面簡明扼要地談一下,例如:Java 語言特性,包括泛型、Lambda 等語言特性;基礎類庫,包括集合、IO/NIO、網路、並發、安全等基礎類庫。對於我們日常工作應用較多的類庫,面試前可以系統化總結一下,有助於臨場發揮。2、對比Hashtable、HashMap、TreeMap有什麼不同?考點分析:上面的回答,只是對一些基本特徵的簡單總結,針對Map相關可以擴展的問題很多,從各種數據結構、典型應用場景,到程序設計實現的技術考量,尤其是在Java 8里,HashMap本身發生了非常大的變化,這些都是經常考察的方面。很多朋友向我反饋,面試官似乎鍾愛考察HashMap的設計和實現細節,所以今天我會增加相應的源碼解讀,主要專注於下面幾個方面:理解Map相關類似整體結構,尤其是有序數據結構的一些要點。從源碼去分析HashMap的設計和實現要點,理解容量、負載因子等,為什麼需要這些參數,如何影響Map的性能,實踐中如何取捨等。理解樹化改造的相關原理和改進原因。除了典型的代碼分析,還有一些有意思的並發相關問題也經常會被提到,如HashMap在並發環境可能出現無限循環佔用CPU、size不準確等詭異的問題。我認為這是一種典型的使用錯誤,因為HashMap明確聲明不是線程安全的數據結構,如果忽略這一點,簡單用在多線程場景里,難免會出現問題。理解導致這種錯誤的原因,也是深入理解並發程序運行的好辦法。對於具體發生了什麼,你可以參考這篇很久以前的分析,裡面甚至提供了示意圖,我就不再重復別人寫好的內容了。3、Java 提供了哪些 IO 方式? NIO 如何實現多路復用?考點分析:在實際面試中,從傳統 IO 到 NIO、NIO 2,其中有很多地方可以擴展開來,考察點涉及方方面面,比如:基礎 API 功能與設計, InputStream/
⑶ 關於JAVA和數據結構的問題
編程語言大同小異,基本的邏輯操作都是一樣的。比如與或,if,while這些。
但是java是面向對象,c是面向程序。我先學的c,後學的java,怎麼都轉不過來。現在習慣用java了,又不會用c了。
其實吧,沒必要學c。如果你java學的好,那麼一般的函數調用,參數傳遞和邏輯語句都應該會了吧。這樣接觸一門新的語言就不是啥難事了。編程重要的是思想,
個人覺得初學編程的時候最難的就是邏輯操作。還有參數和函數的調用。這些都會了之後,不用專門學某種編程,都觸類旁通了(匯編除外)。
我學了c之後自學java,現在用的最好的是java,然後可以重構別人的asp,c#,不會寫但是都可以看懂了,看多了就會寫了
⑷ Java演算法與數據結構代碼
第1題:我給你搭建演算法框架,具體需求,你只需往裡面寫Code即可:
publicclassProgram{
privatestaticfinalintN=6;
publicstaticvoidmain(String[]args){
Nodehead=newNode(-1,null);//定義頭指針,帶頭結點的單鏈表
for(inti=0;i<N;i++){
Nodee=newNode(i+1,null);
tailInsert(head,e);
}
//Test
Nodep=head;
while(p.getNext()!=null){
p=p.getNext();
}
}
/**
*@paramhead實施尾插法演算法的單鏈表頭指針
*@parame所需的元素
*/
privatestaticvoidtailInsert(Nodehead,Nodee){
Nodep=head;
while(p.getNext()!=null){
p=p.getNext();//尋訪單鏈表,直至到達單鏈表末尾
}
//實施尾插法
p.setNext(e);
}
}
classNode{
privateintid;//編號
privateNodenext;//單鏈表後繼指針
privateStringvote;//選票
publicNode(){}
publicNode(intid,Nodenext){
super();
this.id=id;
this.next=next;
}
publicNode(intid,Nodenext,Stringvote){
super();
this.id=id;
this.next=next;
this.vote=vote;
}
@Override
publicStringtoString(){
return"Node[id="+id+",next="+next+"]";
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicNodegetNext(){
returnnext;
}
publicvoidsetNext(Nodenext){
this.next=next;
}
}
第2題:參看我以前的回答:https://..com/question/431512924412893084
演算法思想已經寫的清楚得不能在清楚了。轉成Java就是小菜一碟。