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

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

皇崗網(wǎng)站建設(shè)成都自然排名優(yōu)化

皇崗網(wǎng)站建設(shè),成都自然排名優(yōu)化,青島 網(wǎng)站制作,常州哪家做網(wǎng)站好前置:問題 判空集合轉(zhuǎn)map集合遍歷集合去重集合轉(zhuǎn)數(shù)組數(shù)組轉(zhuǎn)集合 一:集合判空 《阿里巴巴 Java 開發(fā)手冊》的描述如下: 判斷所有集合內(nèi)部的元素是否為空,使用 isEmpty() 方法,而不是 size()0 的方式。 我們在開發(fā)中也…

前置:問題

  1. 判空
  2. 集合轉(zhuǎn)map
  3. 集合遍歷
  4. 集合去重
  5. 集合轉(zhuǎn)數(shù)組
  6. 數(shù)組轉(zhuǎn)集合

一:集合判空

《阿里巴巴 Java 開發(fā)手冊》的描述如下:

判斷所有集合內(nèi)部的元素是否為空,使用 isEmpty() 方法,而不是 size()==0 的方式。
我們在開發(fā)中也常用Spring提供的CollectionUtil.isEmpty(list)

// ConcurrentHashMap 的 size() 方法和 isEmpty() 方法的源碼。
public int size() {long n = sumCount();return ((n < 0L) ? 0 :(n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE :(int)n);
}
final long sumCount() {CounterCell[] as = counterCells; CounterCell a;long sum = baseCount;if (as != null) {for (int i = 0; i < as.length; ++i) {if ((a = as[i]) != null)sum += a.value;}}return sum;
}
public boolean isEmpty() {return sumCount() <= 0L; // ignore transient negative values
}

Spring中的源碼

// 判null+判內(nèi)容
public static boolean isEmpty(@Nullable Collection<?> collection) {return (collection == null || collection.isEmpty());}

Spring底層是直接使用isEmpty進行判空的。

這是因為 isEmpty() 方法的可讀性更好,并且時間復雜度為 O(1)。

絕大部分我們使用的集合的 size() 方法的時間復雜度也是 O(1),不過,也有很多復雜度不是 O(1) 的,比如 java.util.concurrent 包下的某些集合(ConcurrentLinkedQueue\ConcurrentHashMap…)出于時間復雜度的考慮


二:集合轉(zhuǎn)Map

《阿里巴巴 Java 開發(fā)手冊》的描述如下:

在使用 java.util.stream.Collectors 類的 toMap() 方法轉(zhuǎn)為 Map 集合時,一定要注意當 value 為 null 時會拋 NPE 異常。

class Dog {private String id;private String sex;
}List<Dog> list = new ArrayList<>();
list.add(new Dog("1212121","公"));
// value為null值,會報npe
list.add(new Dog("435",null));
// 空指針異常
list.stream().collect(Collectors.toMap(Dog::getId, Dog::getSex));

異常原因

  • value判空
    在這里插入圖片描述

集合遍歷

《阿里巴巴 Java 開發(fā)手冊》的描述如下:

不要在 foreach 循環(huán)里進行元素的 remove/add 操作(這個問題我踩過坑,和你想刪的東西絕對不一樣)。remove 元素請使用 Iterator 方式,如果并發(fā)操作,需要對 Iterator 對象加鎖。

通過反編譯你會發(fā)現(xiàn) foreach 語法底層其實還是依賴 Iterator 。不過, remove/add 操作直接調(diào)用的是集合自己的方法,而不是 Iterator 的 remove/add方法

這就導致 Iterator 莫名其妙地發(fā)現(xiàn)自己有元素被 remove/add ,然后,它就會拋出一個 ConcurrentModificationException 來提示用戶發(fā)生了并發(fā)修改異常。這就是單線程狀態(tài)下產(chǎn)生的 fail-fast 機制。

Java8之后使用removeIf

List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 10; ++i) {list.add(i);
}
// 這個蠻好用的
list.removeIf(filter -> filter % 2 == 0); /* 刪除list中的所有偶數(shù) */
System.out.println(list); /* [1, 3, 5, 7, 9] */

集合去重

《阿里巴巴 Java 開發(fā)手冊》的描述如下:

可以利用 Set 元素唯一的特性,可以快速對一個集合進行去重操作,避免使用 List 的 contains() 進行遍歷去重或者判斷包含操作。

// Set 去重代碼示例// 無hash沖突時時間復雜度O(1)
public static <T> Set<T> removeDuplicateBySet(List<T> data) {if (CollectionUtils.isEmpty(data)) {return new HashSet<>();}return new HashSet<>(data);
}// List 去重代碼示例//時間復雜度O(n) ,跟進去看contains方法就可以看出來
public static <T> List<T> removeDuplicateByList(List<T> data) {if (CollectionUtils.isEmpty(data)) {return new ArrayList<>();}List<T> result = new ArrayList<>(data.size());for (T current : data) {if (!result.contains(current)) {result.add(current);}}return result;
}// testMyList<Integer> integers = Arrays.asList(1, 1, 1, 12, 32, 32, 3245, 3123, 6, 6);// 推薦去重方式HashSet<Integer> integers1 = new HashSet<>(integers);System.out.println(JSON.toJSONString(integers1));

集合轉(zhuǎn)數(shù)組

《阿里巴巴 Java 開發(fā)手冊》的描述如下:

使用集合轉(zhuǎn)數(shù)組的方法,必須使用集合的 toArray(T[] array),傳入的是類型完全一致、長度為 0 的空數(shù)組。

toArray(T[] array) 方法的參數(shù)是一個泛型數(shù)組,如果 toArray 方法中沒有傳遞任何參數(shù)的話返回的是 Object類 型數(shù)組。

String [] s= new String[]{"dog", "lazy", "a", "over", "jumps", "fox", "brown", "quick", "A"
};
List<String> list = Arrays.asList(s);
Collections.reverse(list);
//沒有指定類型的話會報錯
s=list.toArray(new String[0]);

由于 JVM 優(yōu)化,new String[0]作為Collection.toArray()方法的參數(shù)現(xiàn)在使用更好,new String[0]就是起一個模板的作用,指定了返回數(shù)組的類型,0 是為了節(jié)省空間,因為它只是為了說明返回的類型。詳見:https://shipilev.net/blog/2016/arrays-wisdom-ancients/


數(shù)組轉(zhuǎn)集合

《阿里巴巴 Java 開發(fā)手冊》的描述如下:

使用工具類 Arrays.asList() 把數(shù)組轉(zhuǎn)換成集合時,不能使用其修改集合相關(guān)的方法, 它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常。

Arrays.asList()在平時開發(fā)中還是比較常見的,我們可以使用它將一個數(shù)組轉(zhuǎn)換為一個 List 集合。

String[] myArray = {"Apple", "Banana", "Orange"};
List<String> myList = Arrays.asList(myArray);
//上面兩個語句等價于下面一條語句
List<String> myList = Arrays.asList("Apple","Banana", "Orange");

JDK源碼

/***返回由指定數(shù)組支持的固定大小的列表。此方法作為基于數(shù)組和基于集合的API之間的橋梁,* 與 Collection.toArray()結(jié)合使用。返回的List是可序列化并實現(xiàn)RandomAccess接口。*/
public static <T> List<T> asList(T... a) {return new ArrayList<>(a);
}
http://www.risenshineclean.com/news/48769.html

相關(guān)文章:

  • 備案 手機網(wǎng)站專門做推廣的軟文
  • 專業(yè)做網(wǎng)站設(shè)計公司價格新網(wǎng)站如何推廣
  • 網(wǎng)站優(yōu)化主要工作有那些內(nèi)容的磁力搜索引擎
  • 網(wǎng)站底部怎么做需要放些什么獨立站建站需要多少錢
  • 北京虛擬注冊地址新政中國seo公司
  • 專門教ps的網(wǎng)站千峰培訓可靠嗎?
  • 橙子官方網(wǎng)站友鏈申請
  • 學術(shù)網(wǎng)站怎么做百度關(guān)鍵詞seo
  • php企業(yè)網(wǎng)站源碼藍色湖南seo網(wǎng)站策劃
  • 網(wǎng)站設(shè)計用什么軟件做的懷化網(wǎng)站seo
  • 酷炫網(wǎng)站推薦如何讓網(wǎng)站被百度收錄
  • 個人做網(wǎng)站需要注意什么seo 優(yōu)化
  • 有什么做節(jié)能報告的網(wǎng)站福州網(wǎng)站建設(shè)
  • v9網(wǎng)站模板網(wǎng)頁怎么制作
  • 東莞智通人才網(wǎng)招聘信息網(wǎng)windows優(yōu)化軟件
  • 網(wǎng)站鏈接改名怎做301sem 優(yōu)化價格
  • 做畫冊封面的網(wǎng)站快速排序優(yōu)化
  • 中國建設(shè)網(wǎng)站企業(yè)網(wǎng)上銀行業(yè)務(wù)功能0元入駐的電商平臺
  • java答題對戰(zhàn)網(wǎng)站開發(fā)巨量廣告投放平臺
  • 電腦系統(tǒng)做的好的網(wǎng)站百度app客服電話
  • 青島高端網(wǎng)站開發(fā)廚師培訓機構(gòu) 廚師短期培訓班
  • 有哪些h5做的網(wǎng)站怎么卸載windows優(yōu)化大師
  • wordpress多站點sitemap免費建站網(wǎng)站大全
  • 360網(wǎng)站攔截做韶關(guān)新聞最新今日頭條
  • 網(wǎng)站建設(shè)預算策劃百度seo霸屏軟件
  • 做磁力解析網(wǎng)站今日nba比賽直播
  • java做網(wǎng)站如何引流推廣軟件
  • 介紹國外的網(wǎng)站有什么不同谷歌瀏覽器下載安裝2022
  • 童裝 技術(shù)支持 東莞網(wǎng)站建設(shè)百度快速收錄seo工具軟件
  • 網(wǎng)站模版制作口碑營銷案例分析