當前位置:首頁 » 編程語言 » java中map集合

java中map集合

發布時間: 2022-09-18 17:22:43

java題map集合

packagetest;

importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileWriter;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map;
importjava.util.Map.Entry;

publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
//創建一個map集合
Map<String,String>map=newHashMap<String,String>();
//香蕉=5.6;櫻桃=25;桃子=5.6蘋果=2.3
map.put("香蕉","5.6");
map.put("櫻桃","25");
map.put("桃子","5.6");
map.put("蘋果","2.3");
System.out.println("map.size="+map.size());

//遍歷該map並且統計出有多少種水果Key用兩種方法遍歷
System.out.println("方法一:begin");
//遍歷map中的鍵
for(Stringkey:map.keySet()){
System.out.println("key="+key);
}
//遍歷map中的值
for(Stringvalue:map.values()){
System.out.println("value="+value);
}
System.out.println("方法一:end");
System.out.println("------------");
System.out.println("方法二:begin");
Iterator<Entry<String,String>>it=map.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String,String>entry=(Map.Entry<String,String>)it.next();
System.out.println("key="+entry.getKey()+"value="+entry.getValue());
}
System.out.println("方法二:end");

//將香蕉的價格改為10.9
map.put("香蕉","10.9");
//刪除桃子這組數據
map.remove("桃子");

//寫入文件
StringfilePath=Test.class.getClass().getResource("/").getPath()+"map.txt";
System.out.println(filePath);
Filef=newFile(filePath);
FileWriterfw=newFileWriter(f);;
BufferedWriterbw=newBufferedWriter(fw);
Iterator<Entry<String,String>>it2=map.entrySet().iterator();
while(it2.hasNext()){
Map.Entry<String,String>entry=(Map.Entry<String,String>)it2.next();
bw.write(entry.getKey()+"="+entry.getValue()+"元");
bw.newLine();
}
bw.flush();
bw.close();
fw.close();
}
}

② Java集合中List和 Map區別

一個是存儲單列數據的集合,,另外一個是存儲鍵
和值
這樣的雙列數的集合,List中存儲的數據是有順序的,並且允許重復。。。Map中存儲的數據是沒有順序的,其鍵是不能重復的,它的值是可以有重復的。。。
List繼承
Collection介面
,,Map不繼承Collection介面。

③ java中map集合能不能存另兩個集合

java中map集合能放另外兩個集合,主要是使用map的putall集合,加入另一個集合,如下代碼:

importjava.util.HashMap;
importjava.util.Map;

publicclassceshi{

publicstaticvoidmain(String[]args){

Mapmap1=newHashMap();
map1.put("key1","values1");
Mapmap2=newHashMap();
map2.put("key2","values2");

Mapmap3=newHashMap();//將前兩個map放入map3中
map3.putAll(map1);//加入map1
map3.putAll(map2);//加入map2
System.out.println(map3);//輸出結果
}

}

運行結果如下:

④ java中Map集合如何修改裡面的Key值

修改map的key但是不改變該key對應的value值,可以使用
map.put("key2",map.remove("key1"));
比如:
map.put("key1","value1");--此時:key1--value1
map.put("key2",map.remove("key1"));--此時 :key2--value1

⑤ JAVA裡面set,map,list的區別是什麼(盡量詳細)

一、List介面
List是一個繼承於Collection的介面,即List是集合中的一種。List是有序的隊列,List中的每一個元素都有一個索引;第一個元素的索引值是0,往後的元素的索引值依次+1。和Set不同,List中允許有重復的元素。實現List介面的集合主要有:ArrayList、LinkedList、Vector、Stack。

ArrayList
ArrayList是一個動態數組,也是我們最常用的集合。它允許任何符合規則的元素插入甚至包括null。每一個ArrayList都有一個初始容量:

private static final int DEFAULT_CAPACITY = 10;

隨著容器中的元素不斷增加,容器的大小也會隨著增加。在每次向容器中增加元素的同時都會進行容量檢查,當快溢出時,就會進行擴容操作。所以如果我們明確所插入元素的多少,最好指定一個初始容量值,避免過多的進行擴容操作而浪費時間、效率。

size、isEmpty、get、set、iterator 和 listIterator 操作都以固定時間運行。add 操作以分攤的固定時間運行,也就是說,添加 n 個元素需要 O(n) 時間(由於要考慮到擴容,所以這不只是添加元素會帶來分攤固定時間開銷那樣簡單)。

ArrayList擅長於隨機訪問。同時ArrayList是非同步的。

LinkedList
同樣實現List介面的LinkedList與ArrayList不同,ArrayList是一個動態數組,而LinkedList是一個雙向鏈表。所以它除了有ArrayList的基本操作方法外還額外提供了get,remove,insert方法在LinkedList的首部或尾部。

由於實現的方式不同,LinkedList不能隨機訪問,它所有的操作都是要按照雙重鏈表的需要執行。在列表中索引的操作將從開頭或結尾遍歷列表(從靠近指定索引的一端,節約一半時間)。這樣做的好處就是可以通過較低的代價在List中進行插入和刪除操作。

與ArrayList一樣,LinkedList也是非同步的。如果多個線程同時訪問一個List,則必須自己實現訪問同步。一種解決方法是在創建List時構造一個同步的List:

List list = Collections.synchronizedList(new LinkedList(…));

Vector
與ArrayList相似,但是Vector是同步的。所以說Vector是線程安全的動態數組。它的操作與ArrayList幾乎一樣。

Stack
Stack繼承自Vector,實現一個後進先出的堆棧。Stack提供5個額外的方法使得Vector得以被當作堆棧使用。基本的push和pop方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。Stack剛創建後是空棧。

二、Set介面
Set是一個繼承於Collection的介面,Set是一種不包括重復元素的Collection。它維持它自己的內部排序,所以隨機訪問沒有任何意義。與List一樣,它同樣運行null的存在但是僅有一個。由於Set介面的特殊性,所有傳入Set集合中的元素都必須不同,關於API方面。Set的API和Collection完全一樣。實現了Set介面的集合有:HashSet、TreeSet、LinkedHashSet、EnumSet。

HashSet
HashSet堪稱查詢速度最快的集合,因為其內部是以HashCode來實現的。集合元素可以是null,但只能放入一個null。它內部元素的順序是由哈希碼來決定的,所以它不保證set的迭代順序;特別是它不保證該順序恆久不變。

TreeSet
TreeSet是二叉樹實現的,基於TreeMap,生成一個總是處於排序狀態的set,內部以TreeMap來實現,不允許放入null值。它是使用元素的自然順序對元素進行排序,或者根據創建Set時提供的 Comparator 進行排序,具體取決於使用的構造方法。

LinkedHashSet
LinkedHashSet集合同樣是根據元素的hashCode值來決定元素的存儲位置,但是它同時使用鏈表維護元素的次序。這樣使得元素看起 來像是以插入順序保存的,也就是說,當遍歷該集合時候,LinkedHashSet將會以元素的添加順序訪問集合的元素。LinkedHashSet在迭代訪問Set中的全部元素時,性能比HashSet好,但是插入時性能稍微遜色於HashSet。

三、Map介面
Map與List、Set介面不同,它是由一系列鍵值對組成的集合,提供了key到Value的映射。在Map中它保證了key與value之間的一一對應關系。也就是說一個key對應一個value,所以它不能存在相同的key值,當然value值可以相同。實現map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。

HashMap
以哈希表數據結構實現,查找對象時通過哈希函數計算其位置,它是為快速查詢而設計的,其內部定義了一個hash表數組(Entry[] table),元素會通過哈希轉換函數將元素的哈希地址轉換成數組中存放的索引,如果有沖突,則使用散列鏈表的形式將所有相同哈希地址的元素串起來,可能通過查看HashMap.Entry的源碼它是一個單鏈表結構。

HashTable
也是以哈希表數據結構實現的,解決沖突時與HashMap也一樣也是採用了散列鏈表的形式。HashTable繼承Dictionary類,實現Map介面。其中Dictionary類是任何可將鍵映射到相應值的類(如 Hashtable)的抽象父類。每個鍵和每個值都是一個對象。在任何一個 Dictionary 對象中,每個鍵至多與一個值相關聯。Map是」key-value鍵值對」介面。 HashTable採用」拉鏈法」實現哈希表不過性能比HashMap要低。

TreeMap
有序散列表,實現SortedMap介面,底層通過紅黑樹實現。

WeakHashMap
談WeakHashMap前先看一下Java中的引用(強度依次遞減)

強引用:普遍對象聲明的引用,存在便不會GC
軟引用:有用但並非必須,發生內存溢出前,二次回收
弱引用:只能生存到下次GC之前,無論是否內存足夠
虛引用:唯一目的是在這個對象被GC時能收到一個系統通知
以弱鍵實現的基於哈希表的Map。在 WeakHashMap 中,當某個鍵不再正常使用時,將自動移除其條目。更精確地說,對於一個給定的鍵,其映射的存在並不阻止垃圾回收器對該鍵的丟棄,這就使該鍵成為可終止的,被終止,然後被回收。丟棄某個鍵時,其條目從映射中有效地移除,因此,該類的行為與其他的 Map 實現有所不同。null值和null鍵都被支持。該類具有與HashMap類相似的性能特徵,並具有相同的效能參數初始容量和載入因子。像大多數集合類一樣,該類是不同步的。

四、總結
1、List、Set都是繼承自Collection介面,Map則不是。

2、List特點:元素有放入順序,元素可重復 ,Set特點:元素無放入順序,元素不可重復,重復元素會覆蓋掉,(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的,加入Set 的Object必須定義equals()方法 ,另外list支持for循環,也就是通過下標來遍歷,也可以用迭代器,但是set只能用迭代,因為他無序,無法用下標來取得想要的值。)

3、Set和List對比:
Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
List:和數組類似,List可以動態增長,查找元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。

4、Map適合儲存鍵值對的數據

5、線程安全集合類與非線程安全集合類 :

LinkedList、ArrayList、HashSet是非線程安全的,Vector是線程安全的;
HashMap是非線程安全的,HashTable是線程安全的;
StringBuilder是非線程安全的,StringBuffer是線程安全的。

⑥ 在java的Map集合中,怎樣更改value的值

map集合沒有專門更改value的方法,更改value的方法就是map.put(key,value),更改就是直接替換,比如想改變key是"1",value是"一"的組合,就是map.put("1","壹"),直接替換就行。

import java.util.HashMap;

public class Demo {

public static void main(String[] args) {

HashMap<String, Integer> map = new HashMap<String, Integer>();

map.put("張三", 89);

map.put("趙四", 100);

System.out.println(map);

if (map.containsKey("張三")) {//判斷如果存在 key ,就修改value

map.put("張三", 98);//修改

}

System.out.println("------分割線------");

System.out.println(map);

}

avaMap集合

Map集合沒有繼承Collection介面,,Map中不能包含相同的key值,每個key只能影射一個相同的value。key值還決定了存儲對象在映射中的存儲位置。

但不是key對象本身決定的,而是通過散列技術進行處理,可產生一個散列碼的整數值,散列碼通常用作一個偏移量,該偏移量對應分配給映射的內存區域的起始位置,從而確定存儲對象在映射中的存儲位置。Map集合包括Map介面以及Map介面所實現的類。

以上內容參考:網路-JavaMap集合

⑦ 在java的Map集合中,怎樣更改value的值

map集合沒有專門更改value的方法,更改value的方法就是map.put(key,value),更改就是直接替換,比如想改變key是"1",value是"一"的組合,就是map.put("1","壹"),直接替換就行。

import java.util.HashMap;

import java.util.Map;

public class Demo {

public static void main(String[] args) {

Map<Integer,Integer> m = new HashMap<Integer,Integer>();

m.put(1, 1);

print(m);

m.put(1, 2);

print(m);

}

private static void print(Map<Integer, Integer> m) {

for(Map.Entry<Integer, Integer> mm : m.entrySet())

System.out.println("K: "+mm.getKey()+",V: "+mm.getValue());

}

}

(7)java中map集合擴展閱讀

集合類有一個共同特點,就是它們只容納對象(實際上是對象名,即指向地址的指針)。這一點和數組不同,數組可以容納對象和簡單數據。如果在集合類中既想使用簡單數據類型,又想利用集合類的靈活性,就可以把簡單數據類型數據變成該數據類型類的對象,然後放入集合中處理,但這樣執行效率會降低。

集合類容納的對象都是Object類的實例,一旦把一個對象置入集合類中,它的類信息將丟失,也就是說,集合類中容納的都是指向Object類對象的指針。

這樣的設計是為了使集合類具有通用性,因為Object類是所有類的祖先,所以可以在這些集合中存放任何類而不受限制。當然這也帶來了不便,這令使用集合成員之前必須對它重新造型。

集合類是Java數據結構的實現。在編寫程序時,經常需要和各種數據打交道,為了處理這些數據而選用數據結構對於程序的運行效率是非常重要的。

⑧ java中map集合用法

Map map=new HashMap();//實例化map對象map.put("key","value");//存放值(值以鍵(key)-值(value)方式存放。)System.out.print(map.get("key").toString());//取值 根據鍵就可以取到值

⑨ JAVA裡面set,map,list的區別是什麼(盡量詳細)

java集合的主要分為三種類型:

  • Set(集)

  • List(列表)

  • Map(映射)

  • 要深入理解集合首先要了解下我們熟悉的數組:

    數組是大小固定的,並且同一個數組只能存放類型一樣的數據(基本類型/引用類型),而JAVA集合可以存儲和操作數目不固定的一組數據。 所有的JAVA集合都位於 java.util包中! JAVA集合只能存放引用類型的的數據,不能存放基本數據類型。

    簡單說下集合和數組的區別:(參考文章:《Thinking In Algorithm》03.數據結構之數組)

Java所有「存儲及隨機訪問一連串對象」的做法,array是最有效率的一種。

1、
效率高,但容量固定且無法動態改變。
array還有一個缺點是,無法判斷其中實際存有多少元素,length只是告訴我們array的容量。

2、Java中有一個Arrays類,專門用來操作array。
arrays中擁有一組static函數,
equals():比較兩個array是否相等。array擁有相同元素個數,且所有對應元素兩兩相等。
fill():將值填入array中。
sort():用來對array進行排序。
binarySearch():在排好序的array中尋找元素。
System.array():array的復制。

若撰寫程序時不知道究竟需要多少對象,需要在空間不足時自動擴增容量,則需要使用容器類庫,array不適用。所以就要用到集合。

那我們開始討論java中的集合。

集合分類:

Collection:List、Set
Map:HashMap、HashTable

⑩ java中map集合怎麼遍歷

遍歷方法代碼如下:

importjava.util.HashMap;
importjava.util.Map;

publicclassApp01{

publicstaticvoidmain(String[]args){

Map<String,String>map1=newHashMap<String,String>();
map1.put("A","ABC");
map1.put("B","BCD");
map1.put("C","CDE");

//遍歷
for(Map.Entry<String,String>entry:map1.entrySet()){
System.out.println(entry.getKey()+"->"+entry.getValue());
}
}
}
熱點內容
突破伺服器ip限制 發布:2025-01-11 17:11:23 瀏覽:817
支付寶上傳憑證 發布:2025-01-11 17:10:29 瀏覽:875
怎麼打開行李箱的密碼鎖 發布:2025-01-11 17:09:51 瀏覽:591
蘋果怎麼刪除id賬號和密碼 發布:2025-01-11 17:09:50 瀏覽:782
7z解壓很慢 發布:2025-01-11 16:51:23 瀏覽:941
電腦改文檔伺服器 發布:2025-01-11 16:41:14 瀏覽:869
編譯匯編語言實例 發布:2025-01-11 16:36:55 瀏覽:670
海康ntp校時伺服器地址 發布:2025-01-11 16:34:35 瀏覽:743
伺服器運行超時怎麼辦 發布:2025-01-11 16:34:32 瀏覽:299
人妖迅雷種子ftp 發布:2025-01-11 16:33:04 瀏覽:916