Java 學習記錄65 — Maps 1/3

張小雄
5 min readMay 28, 2021

--

今天要學的是 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 舉例說:像是更新結婚後的姓氏,先確保原姓氏符合,符合了再更新,這樣就避免出現意外覆蓋的情況

--

--

張小雄
張小雄

Written by 張小雄

記錄成為軟體工程師的過程

No responses yet