亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java中Map集合的常用方法總結(jié)大全

 更新時(shí)間:2024年01月18日 11:36:44   作者:sugarJava  
開(kāi)發(fā)中最常用的就是List集合和Map集合,Map集合是基于java核心類(lèi)java.util中的,下面這篇文章主要給大家總結(jié)介紹了關(guān)于java中Map集合的一些常用方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

1、如何把一個(gè)Map轉(zhuǎn)化為L(zhǎng)ist

日常開(kāi)發(fā)中,我們經(jīng)常遇到這種場(chǎng)景,把一個(gè)Map轉(zhuǎn)化為L(zhǎng)ist。map轉(zhuǎn)List有以下三種轉(zhuǎn)化方式:

  • 把map的鍵key轉(zhuǎn)化為list

  • 把map的值value轉(zhuǎn)化為list

  • 把map的鍵值key-value轉(zhuǎn)化為list

示例代碼:

//語(yǔ)法
/**
key 轉(zhuǎn)list
List keyList = new ArrayList(map.keySet());

value轉(zhuǎn)list
List valueList = new ArrayList(map.values());

//map轉(zhuǎn)list
List entryList = new ArrayList(map.entrySet());
*/

public class Test {
    public static void main(String[] args) {
        Map<Integer,String> userMap=new HashMap<>();
        userMap.put(1, "劉備");
        userMap.put(2, "諸葛亮");
        userMap.put(3, "關(guān)羽");
        userMap.put(4, "張飛");
        userMap.put(5, "趙云");
        userMap.put(6, "黃忠");
        userMap.put(7, "馬超");
        //把一個(gè)map的鍵轉(zhuǎn)化成list
        List<Integer>keyList=new ArrayList<>(userMap.keySet());
        System.out.println(keyList);
        //把一個(gè)map的值轉(zhuǎn)化成list
        List<String> valueList = new ArrayList<>(userMap.values());
        System.out.println(valueList);
        //把map的鍵值轉(zhuǎn)化成list
        List entryList=new ArrayList(userMap.entrySet());
        System.out.println(entryList);
    }
}
------------------------------------------------------------------------
// 結(jié)果:
[1, 2, 3, 4, 5, 6, 7]
[劉備, 諸葛亮, 關(guān)羽, 張飛, 趙云, 黃忠, 馬超]
[1=劉備, 2=諸葛亮, 3=關(guān)羽, 4=張飛, 5=趙云, 6=黃忠, 7=馬超]  

2、如何遍歷一個(gè)Map

我們經(jīng)常需要遍歷一個(gè)map,可以有以下兩種方式實(shí)現(xiàn):

通過(guò)entrySet+for實(shí)現(xiàn)遍歷

public class Test {
    public static void main(String[] args) {
        Map<Integer,String> userMap=new HashMap<>();
        userMap.put(1, "劉備");
        userMap.put(2, "諸葛亮");
        userMap.put(3, "關(guān)羽");
        userMap.put(4, "張飛");
        userMap.put(5, "趙云");
        userMap.put(6, "黃忠");
        userMap.put(7, "馬超");
        //把一個(gè)map的鍵轉(zhuǎn)化成list
        List<Integer>keyList=new ArrayList<>(userMap.keySet());
     //   System.out.println(keyList);
        //把一個(gè)map的值轉(zhuǎn)化成list
        List<String> valueList = new ArrayList<>(userMap.values());
       // System.out.println(valueList);
        //把map的鍵值轉(zhuǎn)化成list
        List entryList=new ArrayList(userMap.entrySet());
      //  System.out.println(entryList);

//        for (Object o : entryList) {
//         String[] str=String.valueOf(o).split("=");
//            System.out.println(str[0]);
//            System.out.println(str[1]);
//        }

        for(Map.Entry entry:userMap.entrySet()){
            System.out.println(entry);
        }

    }
}
-----------------------------------------------
結(jié)果:
1=劉備
2=諸葛亮
3=關(guān)羽
4=張飛
5=趙云
6=黃忠
7=馬超

通過(guò)Iterator+while實(shí)現(xiàn)遍歷

public class Test {
    public static void main(String[] args) {
        Map<Integer,String> userMap=new HashMap<>();
        userMap.put(1, "劉備");
        userMap.put(2, "諸葛亮");
        userMap.put(3, "關(guān)羽");
        userMap.put(4, "張飛");
        userMap.put(5, "趙云");
        userMap.put(6, "黃忠");
        userMap.put(7, "馬超");

        Iterator iterator=userMap.entrySet().iterator();

        while (iterator.hasNext()){
           Map.Entry entry=(Map.Entry)iterator.next();
           //get key
            Integer key=(Integer) entry.getKey();
            //get value
            String value=(String) entry.getValue();System.out.println("key:"+key+",value:"+value);

        }
        
    }
}
------------------------------------------------------------
    //結(jié)果:
key:1,value:劉備
key:2,value:諸葛亮
key:3,value:關(guān)羽
key:4,value:張飛
key:5,value:趙云
key:6,value:黃忠
key:7,value:馬超  

3、如何根據(jù)Map的keys進(jìn)行排序

對(duì)Map的keys進(jìn)行排序,在日常開(kāi)發(fā)很常見(jiàn),主要有以下兩種方式實(shí)現(xiàn)。

把Map.Entry放進(jìn)list,再用Comparator對(duì)list進(jìn)行排序

public class Test {
    public static void main(String[] args) {
        Map<String,String> userMap=new HashMap<>();
        userMap.put("104", "諸葛亮");
        userMap.put("106", "關(guān)羽");
        userMap.put("105", "張飛");
        userMap.put("107", "趙云");
        userMap.put("103", "黃忠");
        userMap.put("102", "馬超");
        userMap.put("101", "劉備");

     List<Map.Entry<String,String>> list=new ArrayList<>(userMap.entrySet());
     Collections.sort(list, Comparator.comparing((Map.Entry e) -> e.getKey().toString()));

     for(Map.Entry entry:list){
         System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
     }

    }
}
------------------------------------------------
    //結(jié)果:
key:101,value:劉備
key:102,value:馬超
key:103,value:黃忠
key:104,value:諸葛亮
key:105,value:張飛
key:106,value:關(guān)羽
key:107,value:趙云

使用SortedMap+TreeMap+Comparator實(shí)現(xiàn)

public class Test {
    public static void main(String[] args) {
        Map<String,String> userMap=new HashMap<>();
        userMap.put("104", "諸葛亮");
        userMap.put("106", "關(guān)羽");
        userMap.put("105", "張飛");
        userMap.put("107", "趙云");
        userMap.put("103", "黃忠");
        userMap.put("102", "馬超");
        userMap.put("101", "劉備");

     SortedMap sortedMap=new TreeMap(new Comparator<String>(){

         @Override
         public int compare(String k1, String k2) {
             return k1.compareTo(k2);
         }
     });
        sortedMap.putAll(userMap);

        Iterator  itr=sortedMap.entrySet().iterator();
        while (itr.hasNext()){
            Map.Entry entry=(Map.Entry) itr.next();
            //get key
            String key=(String) entry.getKey();
            //get value
            String value=(String) entry.getValue();
            System.out.println("key:"+key+",value:"+value);
        }
    }
}
----------------------------------------------
   //結(jié)果:
key:101,value:劉備
key:102,value:馬超
key:103,value:黃忠
key:104,value:諸葛亮
key:105,value:張飛
key:106,value:關(guān)羽
key:107,value:趙云

4、如何使用Map中的value進(jìn)行排序

public class SortValuesMapTest {
 public static void main(String[] args) {
 Map<String, String> map = new HashMap<>();
        map.put("2010", "jay");
        map.put("1999", "whx");
        map.put("3010", "huaxiao");
 List <Map.Entry<String,String>>list = new ArrayList<>(map.entrySet());
 Collections.sort(list, (Map.Entry e1, Map.Entry e2)-> {
 return e1.getValue().toString().compareTo(e2.getValue().toString());
 }
 );
 for (Map.Entry entry : list) {
 System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
 }
 }
}
 

5、如何初始化一個(gè)靜態(tài)/不可變的Map

//初始化一個(gè)靜態(tài)不可變的map,單單static final+static代碼塊還是不行的,如下:
public class Test1 {
 private static final Map <Integer,String>map;
  static { 
        map = new HashMap<Integer, String>() 
        map.put(1, "one");
        map.put(2, "two");
 }
 
 public static void main(String[] args) {
 
        map.put(3, "three");
 
 Iterator itr = map.entrySet().iterator();
 
 while(itr.hasNext()) {
 Map.Entry entry = (Map.Entry) itr.next(); 
 // get key
 Integer key = (Integer) entry.getKey(); 
 // get value
 String value = (String) entry.getValue();
  
 System.out.println("key:"+key+",value:"+value);
 
 }
 }
}
---------------------------------------------
//這里面,map繼續(xù)添加元素(3,"three"),發(fā)現(xiàn)是OK的,運(yùn)行結(jié)果如下:
key:1,value:one
key:2,value:two
key:3,value:three


-----------------------------------------------------------------------
//真正實(shí)現(xiàn)一個(gè)靜態(tài)不可變的map,需要Collections.unmodifiableMap,代碼如下:
public class Test2 {
 
 private static final Map<Integer, String> map;
 
 static {
 
 Map<Integer,String> aMap = new HashMap<>();
 
        aMap.put(1, "one");
 
        aMap.put(2, "two");
 
        map = Collections.unmodifiableMap(aMap);
 
 }
  
 public static void main(String[] args) { 
        map.put(3, "3");
 
 Iterator itr = map.entrySet().iterator();
 
 while(itr.hasNext()) { 
 Map.Entry entry = (Map.Entry) itr.next();
 // get key 
 Integer key = (Integer) entry.getKey();
 
 // get value
 String value = (String) entry.getValue(); 
 System.out.println("key:"+key+",value:"+value);

 }
 }
}
 ----------------------------------------------------
//真正實(shí)現(xiàn)一個(gè)靜態(tài)不可變的map,需要Collections.unmodifiableMap,代碼如下:
public class Test {
    private  static final Map<Integer,String> map; //凡是靜態(tài)變量都得初始化
    static {
        Map<Integer,String>aMap=new HashMap<>();
        aMap.put(1,"one");
        aMap.put(2,"two");
        aMap.put(3,"three");
        aMap.put(4,"four");
        map = Collections.unmodifiableMap(aMap);
    }
    public static void main(String[] args) {
           map.put(5,"five");
    }
    Iterator itr=map.entrySet().iterator();
    while(itr. hasNext()){
        Map.Entry entry = (Map.Entry) itr.next();
        // get key
        Integer key = (Integer) entry.getKey();
        // get value
        String value = (String) entry.getValue();
        System.out.println("key:"+key+",value:"+value);
    }
}
------------------------------------------------
//結(jié)果:
Erro報(bào)錯(cuò)

6、如何創(chuàng)建一個(gè)空map

如果map是不可變的,可以這樣創(chuàng)建:

Map map=Collections.emptyMap();
or
Map<String,String> map=Collections.<String, String>emptyMap(); 
//map1.put("1", "1"); 運(yùn)行出錯(cuò)
---------------------------------
//如果你希望你的空map可以添加元素的,可以這樣創(chuàng)建
Map map = new HashMap();

7、有關(guān)于map的復(fù)制

有關(guān)于hashmap的復(fù)制,在日常開(kāi)發(fā)中,使用也比較多。主要有 =,clone,putAll,但是他們都是淺復(fù)制,使用的時(shí)候注意啦,可以看一下以下例子:

例子一,使用=復(fù)制一個(gè)map:

public class CopyMapAssignTest { 
 public static void main(String[] args) { 
 Map<Integer, User> userMap = new HashMap<>();
        userMap.put(1, new User("jay", 26));
        userMap.put(2, new User("fany", 25));
 //Shallow clone
 Map<Integer, User> clonedMap = userMap;
 //Same as userMap 
 System.out.println(clonedMap);
 System.out.println("\nChanges reflect in both maps \n");
 //Change a value is clonedMap
        clonedMap.get(1).setName("test");
 //Verify content of both maps
 System.out.println(userMap);
 System.out.println(clonedMap);
 }
}
 

運(yùn)行結(jié)果:

{1=User{name='jay', age=26}, 2=User{name='fany', age=25}}
Changes reflect in both maps
{1=User{name='test', age=26}, 2=User{name='fany', age=25}}
{1=User{name='test', age=26}, 2=User{name='fany', age=25}}

從運(yùn)行結(jié)果看出,對(duì)cloneMap修改,兩個(gè)map都改變了,所以=是淺復(fù)制。

例子二,使用hashmap的clone復(fù)制:

public class CopyCloneMapTest { 
 public static void main(String[] args) {
 HashMap<Integer, User> userMap = new HashMap<>();
        userMap.put(1, new User("jay", 26));
        userMap.put(2, new User("fany", 25));
 //Shallow clone
 HashMap<Integer, User> clonedMap = (HashMap<Integer, User>) userMap.clone();
 //Same as userMap 
 System.out.println(clonedMap); 
 System.out.println("\nChanges reflect in both maps \n");
 
 //Change a value is clonedMap
 
        clonedMap.get(1).setName("test");

 //Verify content of both maps
 
 System.out.println(userMap);
 
 System.out.println(clonedMap);
 
 }
} 

運(yùn)行結(jié)果:

{1=User{name='jay', age=26}, 2=User{name='fany', age=25}}

Changes reflect in both maps

{1=User{name='test', age=26}, 2=User{name='fany', age=25}}
 
{1=User{name='test', age=26}, 2=User{name='fany', age=25}}

從運(yùn)行結(jié)果看出,對(duì)cloneMap修改,兩個(gè)map都改變了,所以hashmap的clone也是淺復(fù)制。

例子三,通過(guò)putAll操作

public class CopyPutAllMapTest {
 public static void main(String[] args) {
 HashMap<Integer, User> userMap = new HashMap<>();
        userMap.put(1, new User("jay", 26));
        userMap.put(2, new User("fany", 25));
 //Shallow clone
 HashMap<Integer, User> clonedMap = new HashMap<>();
        clonedMap.putAll(userMap);
 //Same as userMap
 System.out.println(clonedMap);
 System.out.println("\nChanges reflect in both maps \n");
 //Change a value is clonedMap
        clonedMap.get(1).setName("test");
 //Verify content of both maps
 System.out.println(userMap);
 System.out.println(clonedMap);
 }
}
 

運(yùn)行結(jié)果:

{1=User{name='jay', age=26}, 2=User{name='fany', age=25}}
Changes reflect in both maps
{1=User{name='test', age=26}, 2=User{name='fany', age=25}}
 
{1=User{name='test', age=26}, 2=User{name='fany', age=25}}

從運(yùn)行結(jié)果看出,對(duì)cloneMap修改,兩個(gè)map都改變了,所以putAll還是淺復(fù)制。

那么,如何實(shí)現(xiàn)深度復(fù)制呢?

可以使用序列化實(shí)現(xiàn),如下為谷歌Gson序列化HashMap,實(shí)現(xiàn)深度復(fù)制的例子:

public class CopyDeepMapTest {
 public static void main(String[] args) {
 HashMap<Integer, User> userMap = new HashMap<>();
        userMap.put(1, new User("jay", 26));
        userMap.put(2, new User("fany", 25));
 //Shallow clone
 Gson gson = new Gson();
 String jsonString = gson.toJson(userMap);
 Type type = new TypeToken<HashMap<Integer, User>>(){}.getType();
 HashMap<Integer, User> clonedMap = gson.fromJson(jsonString, type);
 //Same as userMap
 System.out.println(clonedMap);
 System.out.println("\nChanges reflect in only one map \n");
 //Change a value is clonedMap
        clonedMap.get(1).setName("test");
 //Verify content of both maps
 System.out.println(userMap);
 System.out.println(clonedMap);
 }
}
 

運(yùn)行結(jié)果:

{1=User{name='jay', age=26}, 2=User{name='fany', age=25}}

Changes reflect in only one map
 
{1=User{name='jay', age=26}, 2=User{name='fany', age=25}}
 
{1=User{name='test', age=26}, 2=User{name='fany', age=25}}

從運(yùn)行結(jié)果看出,對(duì)cloneMap修改,userMap沒(méi)有被改變,所以是深度復(fù)制。

總結(jié)

到此這篇關(guān)于java中Map集合的常用方法總結(jié)的文章就介紹到這了,更多相關(guān)java Map常用方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論