Ⅰ 請問HashMap 的構造函數是什麼意思啊
HashMap有以下4個構造函數(JDK6):
HashMap()
構造一個具有默認初始容量 (16) 和默認載入因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity)
構造一個帶指定初始容量和默認載入因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity, float loadFactor)
構造一個帶指定初始容量和載入因子的空 HashMap。
HashMap(Map<? extends K,? extends V> m)
構造一個映射關系與指定 Map 相同的新 HashMap。
有兩個傳入參數的並不是表示key,value的意思啊
Ⅱ 求助:在mapgis中如何放大局部圖形
地信網有鼠馬象雞的教程:
A001 mapgis工程中部分內容進行縮放的方法(一)
A002 mapgis工程中部分內容進行縮放的方法(二)
A003 mapgis工程中部分內容進行縮放的方法(三)
你自己搜一下,發鏈接會屏蔽!
Ⅲ java中幾種Map在什麼情況下使用,並簡單介紹原因及原理
一、Map用於保存具有映射關系的數據,Map里保存著兩組數據:key和value,它們都可以使任何引用類型的數據,但key不能重復。所以通過指定的key就可以取出對應的value。Map介面定義了如下常用的方法:
1、void clear():刪除Map中所以鍵值對。
2、boolean containsKey(Object key):查詢Map中是否包含指定key,如果包含則返回true。
3、boolean containsValue(Object value):查詢Map中是否包含指定value,如果包含則返回true。
4、Set entrySet():返回Map中所包含的鍵值對所組成的Set集合,每個集合元素都是Map.Entry對象(Entry是Map的內部類)。
5、Object get(Object key):返回指定key所對應的value,如Map中不包含key則返回null。
6、boolean isEmpty():查詢Map是否為空,如果空則返回true。
7、Set keySet():返回該Map中所有key所組成的set集合。
8、Object put(Object key,Object value):添加一個鍵值對,如果已有一個相同的key值則新的鍵值對覆蓋舊的鍵值對。
9、void putAll(Map m):將指定Map中的鍵值對復制到Map中。
10、Object remove(Object key):刪除指定key所對應的鍵值對,返回可以所關聯的value,如果key不存在,返回null。
11、int size():返回該Map里的鍵值對的個數。
12、Collection values():返回該Map里所有value組成的Collection。
Map中包含一個內部類:Entry。該類封裝了一個鍵值對,它包含了三個方法:
1、Object getKey():返回該Entry里包含的key值。
2、Object getValeu():返回該Entry里包含的value值。
3、Object setValue(V value):設置該Entry里包含的value值,並返回新設置的value值。
二、HashMap和Hashtable實現類:
1、HashMap與HashTable的區別:
1) 同步性:Hashtable是同步的,這個類中的一些方法保證了Hashtable中的對象是線程安全的。而HashMap則是非同步的,因此HashMap中的對象並不是線程安全的。因為同步的要求會影響執行的效率,所以如果你不需要線程安全的集合那麼使用HashMap是一個很好的選擇,這樣可以避免由於同步帶來的不必要的性能開銷,從而提高效率。
2) 值:HashMap可以讓你將空值作為一個表的條目的key或value,但是Hashtable是不能放入空值的。HashMap最多隻有一個key值為null,但可以有無數多個value值為null。
2、性能:HashMap的性能最好,HashTable的性能是最差(因為它是同步的)
3、注意:
1)用作key的對象必須實現hashCode和equals方法。
2)不能保證其中的鍵值對的順序
3)盡量不要使用可變對象作為它們的key值。
三、LinkedHashMap:
它的父類是HashMap,使用雙向鏈表來維護鍵值對的次序,迭代順序與鍵值對的插入順序保持一致。LinkedHashMap需要維護元素的插入順序,so性能略低於HashMap,但在迭代訪問元素時有很好的性能,因為它是以鏈表來維護內部順序。
四、TreeMap:
Map介面派生了一個SortMap子介面,SortMap的實現類為TreeMap。TreeMap也是基於紅黑樹對所有的key進行排序,有兩種排序方式:自然排序和定製排序。Treemap的key以TreeSet的形式存儲,對key的要求與TreeSet對元素的要求基本一致。
1、Map.Entry firstEntry():返回最小key所對應的鍵值對,如Map為空,則返回null。
2、Object firstKey():返回最小key,如果為空,則返回null。
3、Map.Entry lastEntry():返回最大key所對應的鍵值對,如Map為空,則返回null。
4、Object lastKey():返回最大key,如果為空,則返回null。
5、Map.Entry higherEntry(Object key):返回位於key後一位的鍵值對,如果為空,則返回null。
6、Map.Entry lowerEntry(Object key):返回位於key前一位的鍵值對,如果為空,則返回null。
7、Object lowerKey(Object key):返回位於key前一位key值,如果為空,則返回null。
8、NavigableMap subMap(Object fromKey,boolean fromlnclusive,Object toKey,boolean toInciusive):返回該Map的子Map,其key范圍從fromKey到toKey。
9、SortMap subMap(Object fromKey,Object toKey );返回該Map的子Map,其key范圍從fromkey(包括)到tokey(不包括)。
10、SortMap tailMap(Object fromkey ,boolean inclusive):返回該Map的子Map,其key范圍大於fromkey(是否包括取決於第二個參數)的所有key。
11、 SortMap headMap(Object tokey ,boolean inclusive):返回該Map的子Map,其key范圍小於tokey(是否包括取決於第二個參數)的所有key。
五、WeakHashMap:
WeakHashMap與HashMap的用法基本相同,區別在於:後者的key保留對象的強引用,即只要HashMap對象不被銷毀,其對象所有key所引用的對象不會被垃圾回收,HashMap也不會自動刪除這些key所對應的鍵值對對象。但WeakHashMap的key所引用的對象沒有被其他強引用變數所引用,則這些key所引用的對象可能被回收。WeakHashMap中的每個key對象保存了實際對象的弱引用,當回收了該key所對應的實際對象後,WeakHashMap會自動刪除該key所對應的鍵值對。
六、IdentityHashMap類:
IdentityHashMap與HashMap基本相似,只是當兩個key嚴格相等時,即key1==key2時,它才認為兩個key是相等的 。IdentityHashMap也允許使用null,但不保證鍵值對之間的順序。
七、EnumMap類:
1、EnumMap中所有key都必須是單個枚舉類的枚舉值,創建EnumMap時必須顯示或隱式指定它對應的枚舉類。
2、EnumMap根據key的自然順序,即枚舉值在枚舉類中定義的順序,來維護鍵值對的次序。
3、EnumMap不允許使用null作為key值,但value可以。
Ⅳ java Map復制的問題
你指的是對get出來的Set對象執行add方法嗎?
使用put方法,是將同樣的對象從popSizeChoice放到MpopSizeChoice中,兩個map是兩個不同的引用,但是裡面保存的對象還是指向同一個引用。所以調用add方法對這個同一個對象進行add的時候,兩個map里都會更新。
要解決這個辦法,map里存放的set也必須new一個新的,然後調用putAll方法得到一個拷貝。
Ⅳ c++的map對象賦值問題
你要知道結構體變數名也是指針,不過這個指針比較特別。(至於怎麼特別就得自己去看書了)
將你的代碼改為
memcpy(stuout,buff,sizeof(mapTest));
就可以了
Ⅵ c++ map使用問題
map<string,int> m[11]; std::map沒有這種構造函數.
map的構造函數就以下幾種
Template<class T1, class T2>
map(); // 默認構造函數
map(const map& m) // 拷貝構造函數
map(iterator begin, iterator end ); //區間構造函數
map(iterator begin, iterator end, const traits& _compare) //帶比較謂詞的構造函數
map(iterator begin, iterator end, const traits& _compare, const allocator& all) //帶分配器
Ⅶ 如何快速復制一份map
java的基本數據類型是值傳遞的,其實是引用傳值。你修改某個對象,就是修改了。
storeList 用putAll在復制一份。這個好像是深度復制,
Map<Integer, Goods> storeList1=new HashMap<Integer, Goods>();
storeList1.putAll(storeList)
然後去的時候從storeList1中取,試試吧。
API的解釋
putAll
void putAll(Map<? extends K,? extends V> m)
Copies all of the mappings from the specified map to this map (optional operation). The effect of this call is equivalent to that of calling put(k, v) on this map once for each mapping from key k to value v in the specified map. The behavior of this operation is undefined if the specified map is modified while the operation is in progress.
Parameters:
m - mappings to be stored in this map
Throws:
UnsupportedOperationException - if the putAll operation is not supported by this map
ClassCastException - if the class of a key or value in the specified map prevents it from being stored in this map
NullPointerException - if the specified map is null, or if this map does not permit null keys or values, and the specified map contains null keys or values
IllegalArgumentException - if some property of a key or value in the specified map prevents it from being stored in this map
Ⅷ stl map存自定義的struct需要提供拷貝構造函數嗎
是必須的,拷貝構造函數要求參數必須是一個指向待復制對象的引用。 去掉&編譯器會報錯 C++ PRIMER上說,const不加是可以的,但是大多數情況也都會加上
Ⅸ 如何傳遞復雜數據類型,如C++中的map怎麼傳遞
一般分2種,按值傳遞和按引用傳遞。
比如一個函數
void
foo(map<string,
int>
x)
就是按值傳遞的,每次這個map會被整個拷貝一遍傳入函數內,函數內對x的操作不會影響原來的那個map。
如果按引用則是
void
foo(map<string,
int>&
x),傳進函數的是引用,不發生拷貝,函數內外的map其實是一個。
因為map往往比較大,拷貝成本比較高,除非必要,還是以引用傳遞為主。
Ⅹ C++中的map構造函數怎麼用
1. map最基本的構造函數;
map<string ,int>mapstring; map<int,string >mapint;
map<sring,char>mapstring; map< char ,string>mapchar;
map<char,int>mapchar; map<int ,char>mapint;
2. map添加數據;
map<int ,string>maplive;
1. maplive.insert(pair<int,string>(102,"aclive"));
2. maplive.insert(map<int,string>::value_type(321,"hai"));
3. maplive[112]="April";//map中最簡單最常用的插入添加!
3. map中元素的查找:
find()函數返回一個迭代器指向鍵值為key的元素,如果沒找到就返回指向map尾部的迭代器。
map<int ,string >::iteratorl_it;;
l_it=maplive.find(112);//返回的是一個指針
if(l_it==maplive.end())
cout<<"we do not find112"<<endl;
elsecout<<"wo find112"<<endl;
map<string,string>m;
if(m[112]=="")
cout<<"we do not find112"<<endl;
4. map中元素的刪除:
如果刪除112;
map<int ,string>::iterator l_it;;
l_it =maplive.find(112);
if( l_it == maplive.end())
cout<<"we do not find112"<<endl;
else maplive.erase(l_it);//delete 112;
5. map中 swap的用法:
Map中的swap不是一個容器中的元素交換,而是兩個容器交換;
For example:
#include<map>
#include<iostream>
usingnamespace std;
int main()
{
map <int, int> m1, m2, m3;
map <int,int>::iterator m1_Iter;
m1.insert( pair <int, int>(1, 10 ) );
m1.insert ( pair <int,int> ( 2, 20 ) );
m1.insert ( pair <int,int> ( 3, 30 ) );
m2.insert ( pair <int,int> ( 10, 100 ) );
m2.insert ( pair <int,int> ( 20, 200 ) );
m3.insert ( pair <int,int> ( 30, 300 ) );
cout << "The original map m1is:";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )
cout << " "<<m1_Iter->second;
cout << "."<< endl;
// This isthe member function version of swap
// m2 is said to be theargument map; m1 the target map
m1.swap( m2);
cout << "Afterswapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
cout << "After swapping with m2, mapm2 is:";
for ( m1_Iter = m2.begin( ); m1_Iter != m2.end(); m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout << "Afterswapping with m3, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end(); m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
}