網站首頁 編程語言 正文
文章目錄
- 1. 前言
- 2. 正片
- 1. keySet()方式
- 2. entrySet()方式
- 3. propertyNames()方式
- 4. stringPropertyNames()方式
1. 前言
- 無意有次需求是遍歷Properties對象,但突然就不知道怎么遍歷了,因此寫文章記錄一下。
2. 正片
- Properties 是鍵值對 存儲的,key—value,因此遍歷方式跟Map基本一致。
1. keySet()方式
public class demo {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("1", "11");
properties.put("2", "22");
properties.put("3", "31");
properties.put("4", "41");
Set<Object> keySet = properties.keySet();
for (Object key : keySet) {
System.out.println(key + ": " + properties.get(key));
}
}
}
2. entrySet()方式
public class demo {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("1", "11");
properties.put("2", "22");
properties.put("3", "31");
properties.put("4", "41");
Set<Map.Entry<Object, Object>> entries = properties.entrySet();
for (Map.Entry<Object, Object> map : entries) {
System.out.println(map.getKey() + ":" + map.getValue());
}
}
}
3. propertyNames()方式
public class demo {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("1", "11");
properties.put("2", "22");
properties.put("3", "31");
properties.put("4", "41");
// 就是迭代器
Enumeration<?> enumeration = properties.propertyNames();
while (enumeration.hasMoreElements()) {
Object key = enumeration.nextElement();
System.out.println(key + ":" + properties.get(key));
}
}
}
4. stringPropertyNames()方式
-
stringPropertyNames() 是把key全部獲取封裝到Set中,之后直接用增強foreach來操作,但是只是針對key,value都是String類型的情況下,這個是重點。
-
下面是正常使用情況:
public class demo { public static void main(String[] args) { Properties properties = new Properties(); properties.put("1", "11"); properties.put("2", "22"); properties.put("3", "31"); properties.put("4", "41"); Set<String> keys = properties.stringPropertyNames(); for (String key : keys) { System.out.println(key + ":" + properties.get(key)); } } }
-
如果我把key,value 改成不是String 類型的,如下:
public class demo { public static void main(String[] args) { Properties properties = new Properties(); properties.put(1, "11"); properties.put("2", 22); properties.put("3", 31); properties.put(4, "41"); Set<String> keys = properties.stringPropertyNames(); System.out.println("keys的size:" + keys.size()); for (String key : keys) { System.out.println(key + ":" + properties.get(key)); } } }
由上可以看出,key,value如果有一個不是String類型,則不會接受。我們從源碼角度來看:public Set<String> stringPropertyNames() { Hashtable<String, String> h = new Hashtable<>(); enumerateStringProperties(h); return h.keySet(); } private synchronized void enumerateStringProperties(Hashtable<String, String> h) { if (defaults != null) { defaults.enumerateStringProperties(h); } for (Enumeration<?> e = keys() ; e.hasMoreElements() ;) { Object k = e.nextElement(); Object v = get(k); // 這里就是關鍵了 if (k instanceof String && v instanceof String) { h.put((String) k, (String) v); } } }
原文鏈接:https://blog.csdn.net/xueyijin/article/details/123968385
相關推薦
- 2022-05-21 C語言實現銀行管理系統(文件操作)_C 語言
- 2022-06-11 C#實現文件Move和Copy操作_C#教程
- 2022-12-15 ORACLE中%TYPE和%ROWTYPE的使用詳解_oracle
- 2023-09-18 Echarts常見問題總結(持續更新)
- 2022-05-24 淺談C#中Action和Func回調的常用方式_C#教程
- 2022-06-29 超級詳細的nginx負載均衡配置_nginx
- 2022-12-14 Jetpack?Compose重寫TopAppBar實現標題多行折疊詳解_Android
- 2022-08-22 Docker安裝LNMP環境的詳細過程(可部署TP項目)_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支