今天要學的是 Map
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args){
Map<String, String> languages = new HashMap<>();
languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python"," an interpreted, object-oriented, high-level programming language.");
languages.put("Algol"," an algorithmic language");
languages.put("BASIC"," Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp"," Therein lies madness"); System.out.println(languages.get("Java"));
}
}
輸出結果:
a compiled high level, object-oriented, platform independent language.
map 是一組 key 跟 value
選定一個就可以得出另一個
補充:
為什麼要寫作 Map<String, String> languages = new HashMap<>()
前面跟後面的 type 不一樣呢?
因為 Map 本身是 Interface 是不能 create object
所以透過 HashMap 來實現
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args){
Map<String, String> languages = new HashMap<>();
languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python"," an interpreted, object-oriented, high-level programming language.");
languages.put("Algol"," an algorithmic language");
languages.put("BASIC"," Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp"," Therein lies madness"); System.out.println(languages.get("Java"));
languages.put("Java", " this course is about Java");
System.out.println(languages.get("Java")); }
}
輸出結果:
a compiled high level, object-oriented, platform independent language.
this course is about Java
重寫就覆蓋掉了
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args){
Map<String, String> languages = new HashMap<>();
languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python"," an interpreted, object-oriented, high-level programming language.");
languages.put("Algol"," an algorithmic language");
languages.put("BASIC"," Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp"," Therein lies madness");// System.out.println(languages.get("Java"));
System.out.println(languages.put("Java", " this course is about Java"));
System.out.println(languages.get("Java")); }
}
輸出結果:
a compiled high level, object-oriented, platform independent language.
this course is about Java
用這個方法可得知上一個設定的值為何
倒數第二行打印的就是上一個值
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args){
Map<String, String> languages = new HashMap<>();
// languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
// languages.put("Python"," an interpreted, object-oriented, high-level programming language.");
// languages.put("Algol"," an algorithmic language");
System.out.println(languages.put("BASIC", " Beginners All Purposes Symbolic Instruction Code."));
System.out.println(languages.put("Lisp", " Therein lies madness"));// System.out.println(languages.get("Java"));
// System.out.println(languages.put("Java", " this course is about Java"));
// System.out.println(languages.get("Java")); }
}
輸出結果:
null
null
此為證明,上一個值尚未設定
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args) {
Map<String, String> languages = new HashMap<>();
if (languages.containsKey("Java")) {
System.out.println("Java already exists");
} else {
languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
System.out.println("Java added successfully");
}
languages.put("Python", " an interpreted, object-oriented, high-level programming language.");
languages.put("Algol", " an algorithmic language");
languages.put("BASIC", " Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp", " Therein lies madness"); if (languages.containsKey("Java")) {
System.out.println("Java is already in the map.");
} else {
System.out.println(languages.put("Java", " this course is about Java"));
} }
}
輸出結果:
Java added successfully
Java is already in the map.
這樣就可以確保若已經有相同的 key,而 value 不會被覆寫
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args) {
Map<String, String> languages = new HashMap<>(); languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python", " an interpreted, object-oriented, high-level programming language.");
languages.put("Algol", " an algorithmic language");
languages.put("BASIC", " Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp", " Therein lies madness");
for (String key : languages.keySet()) {
System.out.println(key + " : " + languages.get(key));
} }
}
輸出結果:
Java : a compiled high level, object-oriented, platform independent language.
BASIC : Beginners All Purposes Symbolic Instruction Code.
Lisp : Therein lies madness
Python : an interpreted, object-oriented, high-level programming language.
Algol : an algorithmic language
循環打印 ,但注意打印後的順序跟前面放入時不同
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args) {
Map<String, String> languages = new HashMap<>(); languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python", " an interpreted, object-oriented, high-level programming language.");
languages.put("Algol", " an algorithmic language");
languages.put("BASIC", " Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp", " Therein lies madness"); languages.remove("Lisp");
if(languages.remove("Algol", "a family of algorithmic languages")){
System.out.println("Algol removed");
}else{
System.out.println("Algo not removed.");
}
for (String key : languages.keySet()) {
System.out.println(key + " : " + languages.get(key));
} }
}
輸出結果:
Algo not removed.
Java : a compiled high level, object-oriented, platform independent language.
BASIC : Beginners All Purposes Symbolic Instruction Code.
Python : an interpreted, object-oriented, high-level programming language.
Algol : an algorithmic language
put 是新增,移除就是 remove
移除 lisp
並檢測有無移除 Algol 且 value 也要對應,相同才會移除
此處 value 並不相同,所以沒被移除
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args) {
Map<String, String> languages = new HashMap<>(); languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python", " an interpreted, object-oriented, high-level programming language.");
languages.put("Algol", " an algorithmic language");
languages.put("BASIC", " Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp", " Therein lies madness"); languages.remove("Lisp");
if(languages.remove("Algol", " an algorithmic language")){
System.out.println("Algol removed");
}else{
System.out.println("Algo not removed.");
}
for (String key : languages.keySet()) {
System.out.println(key + " : " + languages.get(key));
} }
}
輸出結果:
Algol removed
Java : a compiled high level, object-oriented, platform independent language.
BASIC : Beginners All Purposes Symbolic Instruction Code.
Python : an interpreted, object-oriented, high-level programming language.
這次的 key Algol 跟 value 都對應到了,所以被移除了
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args) {
Map<String, String> languages = new HashMap<>(); languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python", " an interpreted, object-oriented, high-level programming language.");
languages.put("Algol", " an algorithmic language");
languages.put("BASIC", " Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp", " Therein lies madness"); System.out.println(languages.replace("Lisp", "a functional programming language with imperative features."));
System.out.println(languages.replace("Scala", "this will not be added.")); for (String key : languages.keySet()) {
System.out.println(key + " : " + languages.get(key));
} }
}
輸出結果:
Therein lies madness
null
Java : a compiled high level, object-oriented, platform independent language.
BASIC : Beginners All Purposes Symbolic Instruction Code.
Lisp : a functional programming language with imperative features.
Python : an interpreted, object-oriented, high-level programming language.
Algol : an algorithmic language
先打印了原本 Lisp 的 value
scala 本來就沒設定所以是 null
後來更新了 Lisp 先前的值
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args) {
Map<String, String> languages = new HashMap<>(); languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python", " an interpreted, object-oriented, high-level programming language.");
languages.put("Algol", " an algorithmic language");
languages.put("BASIC", " Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp", " Therein lies madness"); if (languages.replace("Lisp", "This will not work", "a functional programming language with imperative features.")) {
System.out.println("List replace");
} else {
System.out.println("Lisp was not replaced");
} for (String key : languages.keySet()) {
System.out.println(key + " : " + languages.get(key));
} }
}
輸出結果:
Lisp was not replaced
Java : a compiled high level, object-oriented, platform independent language.
BASIC : Beginners All Purposes Symbolic Instruction Code.
Lisp : Therein lies madness
Python : an interpreted, object-oriented, high-level programming language.
Algol : an algorithmic language
import java.util.HashMap;
import java.util.Map;public class MapProgram {
public static void main(String[] args) {
Map<String, String> languages = new HashMap<>(); languages.put("Java", " a compiled high level, object-oriented, platform independent language.");
languages.put("Python", " an interpreted, object-oriented, high-level programming language.");
languages.put("Algol", " an algorithmic language");
languages.put("BASIC", " Beginners All Purposes Symbolic Instruction Code.");
languages.put("Lisp", " Therein lies madness"); if (languages.replace("Lisp", " Therein lies madness", "a functional programming language with imperative features.")) {
System.out.println("Lisp replace");
} else {
System.out.println("Lisp was not replaced");
} for (String key : languages.keySet()) {
System.out.println(key + " : " + languages.get(key));
} }
}
輸出結果:
Lisp replace
Java : a compiled high level, object-oriented, platform independent language.
BASIC : Beginners All Purposes Symbolic Instruction Code.
Lisp : a functional programming language with imperative features.
Python : an interpreted, object-oriented, high-level programming language.
Algol : an algorithmic language
這方法就能確定符合目標的值,才能被更新
避免了更新到非目標值的機會
Tim 舉例說:像是更新結婚後的姓氏,先確保原姓氏符合,符合了再更新,這樣就避免出現意外覆蓋的情況