本文目錄一覽:
- 1、Java如何通過位元組碼看if-else和switch-case?
- 2、JAVA的for循環的內循環和外循環哪個控制行哪個控制列兩者有什麼關係?
- 3、java 比較幾種常見循環方式的優劣
- 4、Java中for循環語句怎麼控制循環次數,書上寫的是i++,但為什麼要用這種表示,到底怎麼設定循環
- 5、如何分析JAVA位元組碼
Java如何通過位元組碼看if-else和switch-case?
如果理解這兩種條件語句的實現方式,如果不理解就去百度問度娘
參考意見如下:
如果條件簡單而且比較少if-else也沒問題,畢竟switch-case要生成一個table,佔用了一定的空間。主要是從位元組碼角度理解因為switch-case是有序的,採取諸如二分法的演算法,來提高查找效率。
如果條件多,if-else不但不美觀,而且順序執行的效率也是比較低的。所以這時候採用switch-case是合理的。
學好編程,高薪,大廠崗位不是夢。天天實習
JAVA的for循環的內循環和外循環哪個控制行哪個控制列兩者有什麼關係?
外循環控制列的變化,內循環控制行的變化,如9*9乘法表
for(int a=1;a10;a++){
for(int b=1;b=a;b++){
syso(b+”*”+a+”=”+a*b+”;”);
}
syso();//換行
}
結果應該是:
1*1=1;
1*2=2; 2*2=4;
。。。
這個簡單代碼就可以清楚的看到外循環『a』控制的是每一行的數字變化,內循環『b』控制的是每一列的數字變化;
java 比較幾種常見循環方式的優劣
集合一共有三種遍歷方法,以list循環舉例:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
ListInteger list = new ArrayList();
for (int i = 0; i 10; i++) {
list.add(i);
}
//for循環遍歷
for (int i = 0, size = list.size(); i size; i++) {
System.out.println(list.get(i));
}
//iterator迭代器遍歷
IteratorInteger it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//foreach循環
for (Integer i : list) {
System.out.println(i);
}
}
}
數據元素是怎樣在內存中存放的?
主要有2種存儲方式:
1、順序存儲,Random Access(Direct Access):
這種方式,相鄰的數據元素存放於相鄰的內存地址中,整塊內存地址是連續的。可以根據元素的位置直接計算出內存地址,直接進行讀取。讀取一個特定位置元素的平均時間複雜度為O(1)。正常來說,只有基於數組實現的集合,才有這種特性。Java中以ArrayList為代表。
2、鏈式存儲,Sequential Access:
這種方式,每一個數據元素,在內存中都不要求處於相鄰的位置,每個數據元素包含它下一個元素的內存地址。不可以根據元素的位置直接計算出內存地址,只能按順序讀取元素。讀取一個特定位置元素的平均時間複雜度為O(n)。主要以鏈表為代表。Java中以LinkedList為代表。
每個遍歷方法的實現原理是什麼?
1、傳統的for循環遍歷,基於計數器的:
遍歷者自己在集合外部維護一個計數器,然後依次讀取每一個位置的元素,當讀取到最後一個元素後,停止。主要就是需要按元素的位置來讀取元素。
2、迭代器遍歷,Iterator:
每一個具體實現的數據集合,一般都需要提供相應的Iterator。相比於傳統for循環,Iterator取締了顯式的遍歷計數器。所以基於順序存儲集合的Iterator可以直接按位置訪問數據。而基於鏈式存儲集合的Iterator,正常的實現,都是需要保存當前遍歷的位置。然後根據當前位置來向前或者向後移動指針。
3、foreach循環遍歷:
根據反編譯的位元組碼可以發現,foreach內部也是採用了Iterator的方式實現,只不過Java編譯器幫我們生成了這些代碼。
各遍歷方式的適用於什麼場合?
1、傳統的for循環遍歷,基於計數器的:
順序存儲:讀取性能比較高。適用於遍歷順序存儲集合。
鏈式存儲:時間複雜度太大,不適用於遍歷鏈式存儲的集合。
2、迭代器遍歷,Iterator:
順序存儲:如果不是太在意時間,推薦選擇此方式,畢竟代碼更加簡潔,也防止了Off-By-One的問題。
鏈式存儲:意義就重大了,平均時間複雜度降為O(n),還是挺誘人的,所以推薦此種遍歷方式。
3、foreach循環遍歷:
foreach只是讓代碼更加簡潔了,但是他有一些缺點,就是遍歷過程中不能操作數據集合(刪除等),所以有些場合不使用。而且它本身就是基於Iterator實現的,但是由於類型轉換的問題,所以會比直接使用Iterator慢一點,但是還好,時間複雜度都是一樣的。所以怎麼選擇,參考上面兩種方式,做一個折中的選擇。
Java中for循環語句怎麼控制循環次數,書上寫的是i++,但為什麼要用這種表示,到底怎麼設定循環
控制循環次數是用如下形式for(int i= 0; i10 ;i++)其中i10表示循環10次,i++代表每次循環之後i+1
如何分析JAVA位元組碼
java位元組碼是javac編譯後產生的,
當下次你再運行這個程序時,
java虛擬機就直接執行位元組碼,
不再調用java代碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/300799.html