ListMapSet的操作和遍歷

List&Map&Set的操作和遍歷

Java的三大集合即:Set、List、Map。

  • Set:代表無序、不可重復的集合,常用的有HashSet(哈希表實現)、TreeSet(紅黑樹實現);
  • List:代表有序、可以重復的集合,比較常用的有ArrayList(數組實現)、LinkedList(鏈表實現);
  • Map:代表具有映射關系的集合,常用的有HashMap(哈希表實現)、TreeMap(紅黑樹實現);

Java5以后又增加了Queue體系集合,代表一種隊列集合實現,這里先不介紹。

List的實現類原理比較簡單,Map比較復雜,而Set其實是基于Map的一種實現。

下面從各個集合的基本操作介紹一下,分別選取HashSet、ArrayList、HashMap三個典型的實現類:

1. HashSet

/** * HashSet的增刪遍歷* @author wangjun * @email  scuwangjun@hotmail.com* @time   2018年4月6日 下午2:40:33 */
public class HashSetOperation {public static void main(String[] args) {//初始化HashSet<String> set = new HashSet<>();//增set.add("key1");set.add("key2");set.add("key3");//刪set.remove("key1");//遍歷1//使用set.descendingIterator()方法可以反向遍歷System.out.println("HashSet遍歷1,使用Iterator:");Iterator<String> it = set.iterator();while(it.hasNext()) {System.out.println(it.next());}//遍歷2System.out.println("HashSet遍歷2,使用for:");for(String str: set) {System.out.println(str);}}

運行結果:

HashSet遍歷1,使用Iterator:
key2
key3
HashSet遍歷2,使用for:
key2
key3

2.ArrayList

/** * ArrayList的增刪查改,遍歷* @author wangjun * @email  scuwangjun@hotmail.com* @time   2018年4月6日 下午2:25:43 */
public class ArrayListOperation {public static void main(String[] args) {//初始化List<String> list = new ArrayList<>();//增list.add("str1");list.add("str2");list.add("str3");//刪list.remove(1);//查System.out.println("list的第二個元素是:" + list.get(1));//改list.set(0, "str11");System.out.println("最終的list:" + list.toString());//遍歷1,使用forSystem.out.println("LinkedList遍歷1,使用for:");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}//遍歷2,使用增強forSystem.out.println("LinkedList遍歷1,使用增強for:");for(String str: list) {System.out.println(str);}//遍歷3,使用Iterator,集合類的通用遍歷方式System.out.println("LinkedList遍歷3,使用Iterator:");Iterator<String> it = list.iterator();while(it.hasNext()) {System.out.println(it.next());}}}

運行結果:

list的第二個元素是:str3
最終的list:[str11, str3]
LinkedList遍歷1,使用for:
str11
str3
LinkedList遍歷1,使用增強for:
str11
str3
LinkedList遍歷3,使用Iterator:
str11
str3

3.HashMap

/** * hashMap的增刪查改* 無序* key相當于set,不可重復* value相當于list,可重復* @author wangjun * @email  scuwangjun@hotmail.com* @time   2018年4月6日 下午2:30:31 */
public class HashMapOperation {public static void main(String[] args) {//初始化HashMap<String,String> map = new HashMap<>();//增map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");//刪map.remove("key2");//查System.out.println("key1對應的valve為:" + map.get("key1"));//改map.replace("key3", "value33");System.out.println("最終的map是:" + map.toString());//遍歷1,取出map中所有的key組成一個setSystem.out.println("HashMap遍歷1,取出map中所有的key組成一個set:");for(String key: map.keySet()) {System.out.println("key:" + key + ",value:" + map.get(key));}//遍歷2,取出key組成set后,通過Iterator遍歷keySystem.out.println("HashMap遍歷2,取出key組成set后,通過Iterator遍歷key:");Iterator<String> it = map.keySet().iterator();while(it.hasNext()) {String key = it.next();String value = map.get(key);System.out.println("key:" + key + ",value:" + value);}//遍歷3,取出map中實際存儲的數據結構--Map.Entry,在HashMap中使用的是Node靜態內部類//推薦這種,尤其是數據很大時System.out.println("HashMap遍歷3,通過Map.Entry:");Set<Map.Entry<String, String>> entry = map.entrySet();for(Map.Entry<String, String> entryItem: entry) {String key = entryItem.getKey();String value = entryItem.getValue();System.out.println("key:" + key + ",value:" + value);}//遍歷4,只能遍歷value,不能遍歷key,相當于取出map中左右的value組成一個listSystem.out.println("HashMap遍歷4,只遍歷value:");for(String value: map.values()) {System.out.println("value:" + value);}}}

運行結果:

key1對應的valve為:value1
最終的map是:{key1=value1, key3=value33}
HashMap遍歷1,取出map中所有的key組成一個set:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷2,取出key組成set后,通過Iterator遍歷key:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷3,通過Map.Entry:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷4,只遍歷value:
value:value1
value:value33

可以看到:

遍歷Set一般常用2種方式;

遍歷List一般常用3種方式;

遍歷Map一般常用4種方式;

根據使用場景,選擇合適的遍歷方式。

轉載于:https://www.cnblogs.com/scuwangjun/p/8734023.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250596.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250596.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250596.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP中的魔術方法

概述 在面向對象編程中&#xff0c;PHP提供了一系列的魔術方法&#xff0c;這些魔術方法為編程提供了很多便利。PHP中的魔術方法通常以__(兩個下劃線)開始&#xff0c;并且不需要顯示的調用而是由某種特定的條件出發。這篇文章簡單總結了PHP中提供的魔術方法。 開始之前 在總結…

執行caffe的draw_net.py出現“GraphViz's executable dot not found”的解決方法

執行caffe的draw_net.py出現“GraphVizs executable "dot" not found”的解決方法 控制臺輸入如下指令畫網絡圖&#xff1a;python ../../../python/draw_net.py train.prototxt train.png --rankdirTB &#xff08;Top-Bottom形式&#xff0c;縱向圖&#xff09;pyt…

配置 --- vscode自定義代碼段Snippets

目標 在vscode中輸入vbs-vue 然后產生一個自己想要的模板 寫好模板 在線上寫好模板傳送門: https://snippet-generator.app/ 1是標題,對應 2是前綴.對應在vue中使用的快捷鍵 vbs-vue3就是需要顯示的代碼段了 在vscode中配置 1.ctrlshiftp2.選擇 Preferences: Configure U…

centos6安裝composer

需要使用到curl&#xff0c;沒有的話需要 yum -y install curl ###安裝一、下載&#xff1a;curl -sS https://getcomposer.org/installer | php &#xff08;如果是網絡原因多試幾次&#xff09; 二、移動composer.phar移動到環境下讓其變成可執行&#xff1a;mv compose…

透明圖與元素居中

1,定位讓元素居中 1. 透明度 opacity 默認值是1 不透明 0是全透明轉載于:https://www.cnblogs.com/Shinigami/p/9709382.html

配置 --- vscode中react格式化解決方案

選擇右下角的語言 在彈出框搜react選擇 JavaScript React(或者根據需求選擇 TypeScript React) 快捷鍵, windows下 Alt SHIFT F

【商城購物車】購物車邏輯

轉載于:https://www.cnblogs.com/xuzhengzong/p/8746677.html

PHP遞歸實現無限極分類

PHP遞歸實現無限極分類 摘要 今天在編碼的時候要用到二級的欄目分類&#xff0c;所以順便就把無限極分類給整理了一下&#xff0c;采用的是遞歸方法 //實現無限級分類public function getTree(){$categorys Category::all();return $this->makeTree($categorys, cate_id,…

IO NIO

1,Java NIO Java non-blocking IO 即 非阻塞IO,線程在等待的時候&#xff0c;可以做其他的事情。 2,IO 對比NIO IO 是面向流&#xff0c;NIO 是面向緩沖 面向流是指每次從流中讀出一個或者多個字節&#xff0c;直到全部讀出為止 面向緩沖區是指將數據先存到一個緩存區 IO 是阻…

react --- 生命周期 給子組件傳遞數據

子組件 /src/components/LifeCycle.js import React, { Component } from reactexport class LifeCycle extends Component {constructor(props) {super(props);// 常用于初始化狀態(狀態初始化、屬性初始化)console.log("1.組件構建函數執行");}componentWillMoun…

Vue---mock.js 使用

mockjs 概述 在我們的生產實際中&#xff0c;后端的接口往往是較晚才會出來&#xff0c;并且還要寫接口文檔&#xff0c;于是我們的前端的許多開發都要等到接口給我們才能進行&#xff0c;這樣對于我們前端來說顯得十分的被動&#xff0c;于是有沒有可以制造假數據來模擬后端接…

Java 的抽象類

Java 的抽象類 用abstract關鍵字來修飾一個類時&#xff0c;這個類叫做抽象類&#xff1b;用abstract來修飾一個方法時&#xff0c;該方法叫做抽象方法。 抽象方法&#xff1a;只有方法的聲明&#xff0c;沒有方法的實現。以分號結束&#xff1a;abstract int abstractMethod…

react --- 按需加載組件

問題描述 使用 antd庫時使用按鈕,須導入如下 import Button from antd/lib/button import antd/dist/antd.css這樣會導入全局的樣式. 解決方案,配置按需加載 1.安裝 react-app-rewired取代 react-scripts, 可以擴展webapack 的配置, 類似vue.config.jsnpm install react-ap…

flask 實現異步非阻塞----gevent

我們都知道&#xff0c;flask不支持異步非阻塞的請求&#xff0c;我們可以創建一個新項目去測試一下&#xff0c;推薦大家使用pycharm去開發我們的flask 使用特別的方便。 rom flask import Flask import time app Flask(__name__) app.route(/) def hello_world():time.slee…

Axure下拉框級聯操作

現實生活中有很多的下拉框是級聯操作的&#xff0c;即因為第一個下拉框的選擇&#xff0c;影響到后面的下拉框的選擇的列表的數據。或許在代碼中&#xff0c;這些操作相對比較簡單&#xff0c;通過前一個下拉框的選擇項來控制后一個下拉框的數據的動態添加。那么&#xff0c;如…

react --- render持續調用解決方案

問題描述: 在某個組件中.有可能頻繁的取數據(但是數據未改變,因此不需要更新).數據的頻繁請求會觸發render函數,造成性能消耗模擬代碼如下 export class CommentList extends Component {constructor(props) {super(props);this.state {comments: []}}// 模擬頻繁的獲取新數…

Java 的工廠方法及代理模式

Java 的工廠方法及代理模式 工廠方法(FactoryMethod) 概述&#xff1a;定義一個用于創建對象的接口&#xff0c;讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。 適用性&#xff1a; 當一個類不知道它所必須創建的對象的類的時候當一個類希望由它的…

Linux 和 Vim 常用命令整理

Sftp常用命令&#xff1a; lcd f&#xff1a;本地切換到 F盤 lpwd本地 當前目錄 lls本地 文件列表 put 本地 上傳文件到服務器(put輸入后&#xff0c;回車會有彈窗&#xff0c;選擇上傳文件) get下載文件到本地 Linux命令&#xff1a; 1.文件夾的操作 1 pwd&#xff1a;顯示…

Socket網絡編程——C++實現

本代碼可直接使用 根據TCP/IP三次握手&#xff0c;實驗時可使用兩臺電腦&#xff0c;或者打開兩個終端模擬通信。 服務器端&#xff1a; #include <iostream> #include <windows.h>using namespace std;#pragma comment(lib,"ws2_32.lib") //引用靜態鏈接…

react --- 復合組件,傳遞屬性

組件復合 復合組件給予你足夠的靈活去定義組件的外觀和行為,而且是以一種明確和安全的方式進行.如果組件間有公用的非UI邏輯,將它們抽取為JS模塊導入使用而不是繼承它/src/components/Composition.js // Dialog作為容器不關心內容和邏輯 function Dialog(props){return <d…