mapjava實現
⑴ java中如何在map中實現一對多的關系
1、可以使用Map<Integer, List>格式來達到一對多的關系
2、key值可以為一個整型數,作為一個類似ID主鍵來使用,value值可以用List集合來保存多條數據
3、這樣就達到了一個key,對應多條記錄。
⑵ java map是基於什麼實現的
並不是,實現Collection介面是Set和List,Map就是Util包下的超級介面,要說基於什麼,只能說基於映射,一對一的鍵值對
⑶ java實現遍歷哈希映射表map的方法匯總
方法/步驟
1、JDK,開發必須的環境
2、IDE,還是推薦Eclipse,如果你的電腦夠快,可以安裝Idea,用過一次,太吃內存,就被拋棄了,但是很多同行都在推薦,聽說很好。
現在開始進入今天的正題,使用Java代碼遍歷Map集合的方法匯總。
1、創建一個Java類,命名為MapTest
2、創建一個Map集合,並定義類型和put值:
3、循環遍歷Map集合的第一種方法,代碼如下:
/**
* 第一種
* foreach循環進行遍歷
* 遍歷的是key值,然後通過get(key)或者值
* key和keyset
*/
private static void firstMethod(HashMap<Integer, String> map){
System.out.println("foreach循環進行遍歷");
for (Integer key : map.keySet()) {
System.out.println("key:"+key+"對應的值為:"+map.get(key));
}
}
4、通過Iterator遍歷Map集合的第二種方法獲取,代碼如下:
/**
* 第二種
* 通過Iterator遍歷獲取
* 和List的遍歷原理相同
*/
public static void secondMethod(HashMap<Integer, String> map){
System.out.println("通過Iterator遍歷獲取");
Iterator<Entry<Integer, String>> inte = map.entrySet().iterator();
while(inte.hasNext()){
Map.Entry<Integer, String> m = inte.next();
System.out.println("key:"+m.getKey()+"對應的值為:"+m.getValue());
}
}
5、通過map方法map.entrySet()遍歷獲取值的第三種方法,代碼如下:
/**
* 第三種,通過map方法map.entrySet()遍歷獲取值
*/
public static void thirdMethod(HashMap<Integer, String> map){
System.out.println("第三種方式:entry");
for (Entry<Integer, String> str : map.entrySet()) {
System.out.println("key:"+str.getKey()+"對應的值為:"+str.getValue());
}
}
6、通過for循環,map.values()循環遍歷獲取值的第四種方法,代碼如下:
這種方法是直接獲取值,不獲取key值:
/**
* 第四種,通過for循環,map.values()循環遍歷獲取值 直接獲取值
*/
public static void fourthMethod(HashMap<Integer, String> map) {
System.out.println("通過map.values()循環遍歷直接獲取值");
for (String string : map.values()) {
System.out.println("map的值為:" + string);
}
}
7
7、不管是遍歷Map還是List的,其本質都是獲取對應的值,程序員在開發中可以根據開發場景適當的選擇各種方法,但是理解其本質才是最主要的。
⑷ java中map有哪幾種實現方式,並且比較異同
Map是一種把鍵對象和值對象進行關聯的容器,而一個值對象又可以是一個Map,依次類推,這樣就可形成一個多級映射。對於鍵對象來說,像Set 一樣,一個Map容器中的鍵對象不允許重復,這是為了保持查找結果的一致性;如果有兩個鍵對象一樣,那你想得到那個鍵對象所對應的值對象時就有問題了,可 能你得到的並不是你想的那個值對象,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。當然在使用過程中,某個鍵所對應的值對象可能會發生變 化,這時會按照最後一次修改的值對象與鍵對應。對於值對象則沒有唯一性的要求。你可以將任意多個鍵都映射到一個值對象上,這不會發生任何問題(不過對你的 使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值對象)。
Map有兩種比較常用的實現:HashMap和TreeMap,WeakMap。HashMap 也用到了哈希碼的演算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它便有一些擴展的方法,比如firstKey(),lastKey() 等,你還可以從TreeMap中指定一個范圍以取得其子Map。鍵和值的關聯很簡單,用pub(Object key,Object value)方法即可將一個鍵與一個值對象相關聯。用get(Object key)可得到與此key對象所對應的值對象,WeakMap這個用於內存自動釋放的。
⑸ java怎麼實現map 緩存技術
/**
*緩存池
*@authorxiaoquan
*@create2015年3月13日上午10:32:13
*@see
*/
publicclassCachePool{
;//緩存池唯一實例
privatestaticMap<String,Object>cacheItems;//緩存Map
privateCachePool(){
cacheItems=newHashMap<String,Object>();
}
/**
*得到唯一實例
*@return
*/
(){
if(instance==null){
instance=newCachePool();
}
returninstance;
}
/**
*清除所有Item緩存
*/
(){
cacheItems.clear();
}
/**
*獲取緩存實體
*@paramname
*@return
*/
(Stringname){
if(!cacheItems.containsKey(name)){
returnnull;
}
CacheItemcacheItem=(CacheItem)cacheItems.get(name);
if(cacheItem.isExpired()){
returnnull;
}
returncacheItem.getEntity();
}
/**
*存放緩存信息
*@paramname
*@paramobj
*@paramexpires
*/
(Stringname,Objectobj,longexpires){
if(!cacheItems.containsKey(name)){
cacheItems.put(name,newCacheItem(obj,expires));
}
CacheItemcacheItem=(CacheItem)cacheItems.get(name);
cacheItem.setCreateTime(newDate());
cacheItem.setEntity(obj);
cacheItem.setExpireTime(expires);
}
(Stringname,Objectobj){
putCacheItem(name,obj,-1);
}
/**
*移除緩存數據
*@paramname
*/
(Stringname){
if(!cacheItems.containsKey(name)){
return;
}
cacheItems.remove(name);
}
/**
*獲取緩存數據的數量
*@return
*/
publicintgetSize(){
returncacheItems.size();
}
}
publicclassCacheItem{
privateDatecreateTime=newDate();//創建緩存的時間
privatelongexpireTime=1;//緩存期滿的時間
privateObjectentity;//緩存的實體
publicCacheItem(Objectobj,longexpires){
this.entity=obj;
this.expireTime=expires;
}
publicbooleanisExpired(){
return(expireTime!=-1&&newDate().getTime()-createTime.getTime()>expireTime);
}
/**
*省略getter、setter方法
*/
}