真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

如何在Java中使用Collection方法移除元素-創(chuàng)新互聯

本篇文章為大家展示了如何在Java中使用Collection方法 移除元素,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

成都創(chuàng)新互聯于2013年成立,先為白水等服務建站,白水等地企業(yè),進行企業(yè)商務咨詢服務。為白水企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

1. 前言

操作集合是一個 Java 編程人員幾乎每天都在重復的事情。今天我們來研究一下從 Java Collection 中刪除元素的方法。我構建了一個簡單的集合,我們以此為例子來展開探索。

 List servers = new ArrayList<>();
 servers.add("Felordcn");
 servers.add("Tomcat");
 servers.add("Jetty");
 servers.add("Undertow");
 servers.add("Resin");

2. for 循環(huán)并不一定能從集合中移除元素

讓我們使用傳統的 foreach 循環(huán)移除 F 開頭的假服務器,但是你會發(fā)現這種操作引發(fā)了 ConcurrentModificationException 異常。

 // 錯誤的示范 千萬不要使用
 for (String server : servers) {
 if (server.startsWith("F")) {
 servers.remove(server);
 }
 }

難道 for 循環(huán)就不能移除元素了嗎?當然不是!我們如果能確定需要被移除的元素的索引還是可以的。

 // 這種方式是可行
 for (int i = 0; i < servers.size(); i++) {
 if (servers.get(i).startsWith("F")) {
 servers.remove(i);
 }
}

但是這種方式我目前只演示了 ArrayList,其它的類型并沒有嚴格測試,留給你自己探索。

3. 迭代器 Iterator 可以刪除集合中的元素

在傳統方式中我們使用 Iterator 是可以保證刪除元素的:

 Iterator iterator = servers.iterator();

 while (iterator.hasNext()) {
  String next = iterator.next();
  if (next.startsWith("F")) {
  iterator.remove();
  }
 }

4. 遍歷刪除元素的缺點

  • 我們需要遍歷集合的每一個元素并對它們進行斷言,哪怕你刪除一個元素。

  • 盡管我們可以通過迭代的方式刪除特定的元素,但是操作繁瑣,根據集合類型的不同有潛在的 ConcurrentModificationException 異常。

  • 根據數據結構的不同,刪除元素的時間復雜度也大大不同。比如數組結構的 ArrayList 在刪除元素的速度上不如鏈表結構的 LinkedList。

5. 新的集合元素刪除操作

Java 8 提供了新的集合操作 API 和 Stream 來幫助我們解決這個問題。我在以前的文章中已經介紹了 Java 8 Stream API,如果有興趣可以去看看。

5.1 Collection.removeIf()

新的 Collection Api removeIf(Predicate filter) 。該 Api 提供了一種更簡潔的使用 Predicate (斷言)刪除元素的方法,于是我們可以更加簡潔的實現開始的需求:

servers.removeIf(s-> s.startsWith("F"));

同時根據測試,ArrayList 和 LinkedList 的性能接近。一般推薦使用這種方式進行操作。

5.2 Stream 實現移除元素

和上面所有移除操作不同的是,其實任何操作都不會改變 Stream 源,我們僅僅是使用 Stream Api 操作數據源的副本。遵循了 數據源 -> 中間操作 -> 歸納終止 的生命周期。我們來看看使用 Stream 如何實現我們的意圖。

5.2.1 通過 filter 斷言實現

我們可以使用 Stream 的 filter 斷言。filter 斷言會把符合斷言的流元素匯集成一個新的流,然后歸納起來即可,于是我們可以這么寫:

// 跟以上不同的是 該方式中的斷言是取反的操作。
List newServers = servers.stream().filter(s -> !s.startsWith("F")).collect(Collectors.toList());

這個優(yōu)點上面已經說了不會影響原始數據,生成的是一個副本。缺點就是可能會有內存占用問題。

5.2.2 通過 Collectors.partitioningBy 歸納

這種方法雖然可以滿足需要但是我感覺有點投機取巧的成份。Collectors.partitioningBy() 方法本意是做二分類的。該方法會將流中符合斷言的、不符合斷言的元素分別歸納到兩個 key 分別為 true 和 false 的 Map 中,我們可以歸類得到符合和不符合的元素集。實現如下:

Map> f = servers.stream().collect(Collectors.partitioningBy(s -> !s.startsWith("F")));
 
 List trues = f.get(Boolean.TRUE);
 System.out.println("不以 F 開頭的: " + trues);

 List falses = f.get(Boolean.FALSE);
 System.out.println("以 F 開頭的: " + falses);

Java可以用來干什么

Java主要應用于:1. web開發(fā);2. Android開發(fā);3. 客戶端開發(fā);4. 網頁開發(fā);5. 企業(yè)級應用開發(fā);6. Java大數據開發(fā);7.游戲開發(fā)等。

上述內容就是如何在Java中使用Collection方法 移除元素,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯網站建設公司行業(yè)資訊頻道。

另外有需要云服務器可以了解下創(chuàng)新互聯建站www.cdcxhl.com,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


分享文章:如何在Java中使用Collection方法移除元素-創(chuàng)新互聯
本文鏈接:http://weahome.cn/article/cdidhj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部