中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

沈陽市建設(shè)工程項目管理中心網(wǎng)站優(yōu)化大師官網(wǎng)

沈陽市建設(shè)工程項目管理中心網(wǎng)站,優(yōu)化大師官網(wǎng),java開源商城,wordpress 瀏覽器緩存Java編程問題top100---基礎(chǔ)語法系列一一、Java 操作符實質(zhì)二、將InputStream轉(zhuǎn)換為String使用IOUtils自己寫輪子三、將數(shù)組轉(zhuǎn)換為List四、如何遍歷map對象使用For-Each迭代entries(方法一)使用For-Each迭代keys和values(方法二)使…

Java編程問題top100---基礎(chǔ)語法系列一

  • 一、Java += 操作符實質(zhì)
  • 二、將InputStream轉(zhuǎn)換為String
      • 使用IOUtils
      • 自己寫輪子
  • 三、將數(shù)組轉(zhuǎn)換為List
  • 四、如何遍歷map對象
      • 使用For-Each迭代entries(方法一)
      • 使用For-Each迭代keys和values(方法二)
      • 使用Iterator迭代(方法三)
        • 使用泛型
        • 不使用泛型
      • 迭代keys并搜索values(低效的)(方法四)
      • 總結(jié)
  • 五、public,protected,private,不加修飾符。有什么區(qū)別呢?
  • Java編程問題top100---基礎(chǔ)語法系列導(dǎo)航

記得這個是當時剛?cè)雽W那會嘗試去看的一個github上的優(yōu)秀內(nèi)容,當時很多東西看得云里霧里,不太懂。
現(xiàn)在正好有空了,再來一次,會稍作修改再加上代碼實踐,有問題可以留言。
重溫的同時,希望對你能有所幫助。
以下系列將會是對stackoverflow上Java相關(guān)、投票數(shù)TOP100的問答(精修版)。

一、Java += 操作符實質(zhì)

問題:我之前以為:
i += j 等同于 i = i + j;
但假設(shè)有:
int i = 5; long j = 8;
這時 i = i + j 不能編譯,但 i += j 卻可以編譯。這說明兩者還是有差別的
這是否意味著,i += j,實際是等同于 i= (type of i) (i + j)呢?

// Java += 操作符實質(zhì)
public class test01 {public static void main(String[] args) {int i = 5;long j = 8;// i = i + j;// 編譯報錯,需要的類型int,提供了longi += j; // 這行沒有問題i = i + (int) j; // 這行也沒問題}
}

回答
復(fù)合賦值表達式E1 op= E2來說, (諸如 i += j i -= j i*=j i/=j等等),其實是等同于 E1 = (T)((E1) op (E2))
其中,E1和E2表示兩個操作數(shù),T是E1這個元素的類型
舉例來說,如下的代碼
int i = 5;long j = 8;
i += j;等同于i = (int)(i + j); 也就是(i + j)先執(zhí)行,然后(i + j)的結(jié)果強制類型轉(zhuǎn)換為int類型
新人注意:表達式i = (int)(i + j); (i + j)這個是帶括號的。
它也等價于i = i + (int) j;

二、將InputStream轉(zhuǎn)換為String

首先項目名字那按右鍵選Add Framework Support或者選添加框架支持,然后選Maven,在pom.xml里寫入下面這個

    <dependencies><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency></dependencies>

使用IOUtils

最靠譜的方法,用Apache commons IOUtils
文檔test02.txt

ABC a b ABc b
你好
//將InputStream轉(zhuǎn)換為String
public class test02 {public static void main(String[] args) throws Exception {FileInputStream inputStream = new FileInputStream("D:\test02.txt");String encoding = "UTF-8";StringWriter writer = new StringWriter();IOUtils.copy(inputStream, writer, encoding);String theString = writer.toString();// String theString = IOUtils.toString(inputStream, encoding);// 這個方法其實封裝了上面的方法,減少了一個參數(shù)}
}

或者

String theString = IOUtils.toString(inputStream, encoding);
//這個方法其實封裝了上面的方法,減少了一個參數(shù) 

自己寫輪子

如果不想引入Apache庫,也可以這樣做

//將InputStream轉(zhuǎn)換為String
public class test02 {static String convertStreamToString(InputStream is) {Scanner s = new Scanner(is).useDelimiter("你好");//讀取到你好這個詞就會停止輸入return s.hasNext() ? s.next() : "";}public static void main(String[] args) throws FileNotFoundException {FileInputStream fileInputStream = new FileInputStream("test.txt");System.out.println(convertStreamToString(fileInputStream));}
}

三、將數(shù)組轉(zhuǎn)換為List

1、最簡單的for循環(huán)遍歷挨個賦值給List。
2、Arrays.asList(array);

// 將數(shù)組轉(zhuǎn)換為List
public class test03 {public static void main(String[] args) {Integer[] array = {1, 2, 3, 4};List<Integer> arrayLists = Arrays.asList(array);// 這里System.out.println(arrayLists);}
}

但這樣做會有坑:

  1. 生成的list,是固定長度的。也就是說,如果調(diào)用它的add()方法或者remove()方法,都會拋異常UnsupportedOperationException。
  2. 如果修改數(shù)組的值list中的對應(yīng)值也會改變

因為Arrays.asList() 返回的是Arrays里的內(nèi)部靜態(tài)類,而不是Java.util.ArrayList這個類。
這個java.util.Arrays.ArrayList有set(),get(),contains()方法,但是沒有任何add() 方法,所以它是固定大小的.

建議用這個
Collections.addAll(arrayLists, array);

// 將數(shù)組轉(zhuǎn)換為List
public class test03 {public static void main(String[] args) {Integer[] array = {1, 2, 3, 4};List<Integer> arrayLists = new ArrayList<>();Collections.addAll(arrayLists, array);// 這里}
}

四、如何遍歷map對象

在Java中有多種遍歷HashMap的方法。
讓我們回顧一下最常見的方法和它們各自的優(yōu)缺點。
由于所有的Map都實現(xiàn)了Map接口,所以接下來方法適用于所有Map(如:HaspMap,TreeMap,LinkedMap,HashTable,ConcurrentHashMAp,……)

使用For-Each迭代entries(方法一)

這是最常見的方法,并在大多數(shù)情況下更可取的。當你在循環(huán)中需要使用Map的鍵和值時,就可以使用這個方法

public class test04 {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();// map = null;map.put("a", 1);testOne(map);}public static void testOne(Map<String, Integer> map) {if (map != null && !map.isEmpty()) {for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());}}else {System.out.println(map);}}
}

注意:遍歷之前你應(yīng)該判斷是否為空引用。如果遍歷的map是null的話,For-Each循環(huán)會拋出NullPointerException異常。

使用For-Each迭代keys和values(方法二)

如果你只需要用到map的keys或values時,你可以遍歷KeySet或者values代替entrySet

    public static void testTwo(Map<String, Integer> map) {if (map != null && !map.isEmpty()) {for (String key : map.keySet()) {System.out.println("Key = " + key);}for (Integer value : map.values()) {System.out.println("Value = " + value);}}}

這個方法比entrySet迭代具有輕微的性能優(yōu)勢(大約快10%)并且代碼更簡潔

使用Iterator迭代(方法三)

使用泛型

    public static void testThree(Map<String, Integer> map) {Iterator<Map.Entry<String, Integer>> entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry<String, Integer> entry = entries.next();System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());}}

不使用泛型

public static void testFour(Map<String, Integer> map) {if (map != null && !map.isEmpty()) {Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry) entries.next();String key = (String) entry.getKey();Integer value = (Integer) entry.getValue();System.out.println("Key = " + key + ", Value = " + value);}} else {System.out.println(map);}}

你可以使用同樣的技術(shù)迭代keyset或者values
首先,它是遍歷java 5 以前版本的map的唯一方法。
第二是可以讓你在迭代的時候從map中刪除entries的(通過調(diào)用iterator.remover())唯一方法。
如果你試圖在For-Each迭代的時候刪除entries,你將會得到unpredictable resultes 異常。
從性能方面看,這個方法等價于使用For-Each迭代(方法二)

迭代keys并搜索values(低效的)(方法四)

    public static void testFive(Map<String, Integer> map) {if (map != null && !map.isEmpty()) {for (String key : map.keySet()) {Integer value = map.get(key);System.out.println("Key = " + key + ", Value = " + value);}} else {System.out.println(map);}}

比方法一更簡潔,但是實際更慢更低效,通過key得到value值更耗時

總結(jié)

如果你只需要使用key或者value使用方法二使用For-Each迭代keys和values,如果你使用java 5 以前的版本或者打算在迭代的時候移除entries,使用方法三使用Iterator迭代。其他情況請使用方法一For-Each迭代entries方法。避免使用迭代keys并搜索values(低效的)方法。

五、public,protected,private,不加修飾符。有什么區(qū)別呢?

如下表所示,Y表示能訪問(可見性),N表示不能訪問,例如第一行的第3個Y,表示類的變量/方法如果是用public修飾,它的子類能訪問這個變量/方法

修飾符類內(nèi)部同個包(package)子類其他范圍
publicYYYY
protectedYYYN
無修飾符YYN or Y(見說明)N
privateYNNN

說明:
需要特別說明“無修飾符”這個情況,子類能否訪問父類中無修飾符的變量/方法,取決于子類是否在同一個包中。如果子類和父類在同一個包中,那么子類可以訪問父類中的無修飾符的變量/方法,否則不行。

Java編程問題top100—基礎(chǔ)語法系列導(dǎo)航

Java編程問題top100—基礎(chǔ)語法系列(一)
Java編程問題top100—基礎(chǔ)語法系列(二) 待更新
Java編程問題top100—基礎(chǔ)語法系列(三) 待更新

如有錯誤,還請多多指教!
轉(zhuǎn)載或者引用本文內(nèi)容請注明來源及原作者:橘足輕重;

http://www.risenshineclean.com/news/34014.html

相關(guān)文章:

  • 做的比較好的手機網(wǎng)站東營網(wǎng)站推廣公司
  • 做技術(shù)網(wǎng)站在背景圖產(chǎn)品推廣步驟
  • 有人說做網(wǎng)站賭上海培訓機構(gòu)整頓
  • 星沙網(wǎng)站制作網(wǎng)上宣傳廣告怎么做
  • 揭陽手機網(wǎng)站建設(shè) 今日頭條
  • 做cpa搭建哪個網(wǎng)站比較好永久免費制作網(wǎng)頁
  • 中國有色金屬建設(shè)股份有限公司網(wǎng)站seoheuni
  • 做網(wǎng)站的公司哪家最好廈門最快seo
  • 中拓網(wǎng)絡(luò)科技有限公司北京seo不到首頁不扣費
  • 廣州最新發(fā)布最新百度seo新站優(yōu)化
  • 一臺云服務(wù)器做多個網(wǎng)站惠州seo外包服務(wù)
  • 成都網(wǎng)站建設(shè)名錄海南seo排名優(yōu)化公司
  • crm與scrmseo短視頻網(wǎng)頁入口引流網(wǎng)站
  • linux系統(tǒng)網(wǎng)站空間正規(guī)seo關(guān)鍵詞排名哪家專業(yè)
  • 展示網(wǎng)站動畫怎么做的站長工具seo綜合查詢官網(wǎng)
  • 怎么自己做網(wǎng)站的步驟百度推廣是做什么的
  • 網(wǎng)站刷新新前臺是什么意思2345網(wǎng)址中國最好
  • 高端網(wǎng)站開發(fā)建設(shè)網(wǎng)絡(luò)營銷知識點
  • 網(wǎng)站后臺使用說明西安百度代運營
  • 企業(yè)怎么建網(wǎng)站太原百度網(wǎng)站快速優(yōu)化
  • 如何用dw做網(wǎng)站首頁seo優(yōu)化排名推廣
  • 武漢網(wǎng)站關(guān)鍵詞廣州最新新聞事件
  • 網(wǎng)站開發(fā)難嗎200891
  • 一般網(wǎng)站服務(wù)器配置高端網(wǎng)站建設(shè)企業(yè)
  • 網(wǎng)站建設(shè)全攻略百度谷歌seo優(yōu)化
  • 模塊網(wǎng)站開發(fā)合同注冊域名費用一般多少錢
  • 做網(wǎng)站一定要用cms嗎簡述seo的基本步驟
  • 大連企業(yè)做網(wǎng)站seo按天計費系統(tǒng)
  • 網(wǎng)站做微信支付對接市場營銷方案怎么做
  • 做logo好的網(wǎng)站北京網(wǎng)站快速排名優(yōu)化