Java中的Map允许有重复元素吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的Map允许有重复元素吗相关的知识,希望对你有一定的参考价值。

首先Map是键值对集合,因为map是无序的键和值是一一对应的,一个键(key)对应一个值,通过键(key)来找值,但是如果你定义两个同样的key,这样就违背了java对map的定义,键和值是一一对应的;

特别说明:建的值是不能相同的,这个语法会报错,

但是如果你的键是引用类型(存的是地址),在语法上是不会报错的,后一个会将前一个覆盖,从而指向后一个键的值

public class TestEquals 

public static void main(String[] args) 
String s1=new String("abc");
String s2=new String("abc");

Map map=new HashMap();
map.put(s1, "abc123");
map.put(s2, "ABC456");//第二个会覆盖第一个元素
System.out.println(map.size());
System.out.println(map.get(s1));

参考技术A key不可以重复,但是value是可以重复的,如果put了相同的key,那么后面的会覆盖前面的。。

java Map接口

映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value。Map里的key不允许重复。通过key总能找到唯一的value与之对应。

Map里的key集存储方式和对应的Set集合中的元素存储方式一致;

学生都有一个学号,我们能点学号就能找到某个学生,好比这个学号就是key,学生就是value。

Map.Entry是Map接口的内部接口,专门用来保存key-value内容:

 

Map常用方法

 

void clear():删除该Map对象中所有的key-value对。也就是清理该集合;

boolean containsKey(Object key):查询Map中是否包含指定的key;

boolean containsValue(Object  value):查询Map中是否包含至少一个value;

Set entrySet():返回Map所包含的key-value对所组成的Set集合,每个集合元素都是Map.Entry对象(Entry是Map内部类);

Object get(Object key):返回指定key所对应的value,若此Map中不包含该key,返回null;

boolean isEmpty():判断Map集合是否为空;

Set keySet():返回该Map中所有key所组成的Set集合;

Object put(Object key,Object value):添加一个key-value对,若Map中已有与key相等的key-value对,则新的key-value对覆盖原来的key-value对;

void putAll(Map m):将m中的key-value赋值到调用该方法的Map对象中;

Object remove(Object key):删除指定key所对应的key-value对,返回本删除key所关联的value,若key不存在,返回null;

int size():返回该Map里面key-value对的个数;

Collection values():返回Map里所有value组成的Collection。

 

Eg:package july7;

 

import java.util.Collection;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

 

public class Demo17

    public static void main(String[] args)

       

        Map m = new HashMap();

       

        m.put(1, "jack");

        m.put(2, "rose");

        m.put(3, "lucy");

       

        System.out.println(m);//1=jack, 2=rose, 3=lucy

 

        Set s = m.entrySet();

        System.out.println(s);//[1=jack, 2=rose, 3=lucy]

       

        s = m.keySet();

        System.out.println(s);//[1, 2, 3]

 

        for (Object key : s)

            System.out.println(key);//Key

            System.out.println(m.get(key));//Value

       

       

        Collection c = m.values();

        System.out.println(c);

   

 

 

Map.Entry

 

Entry是Map接口里面的一个内部接口.

该接口用于封装key- value,有3个方法:

Object getKey();返回Entry里包含的key值

Object getValue();返回Entry里包含的value值

Object setValue(Object value):设置Entry里包含的value值,并返回新设置的value值;

 

Map集合的输出

 

按照最正统的做法,所有的Map集合的内容都要依靠Iterator输出,以上虽然是完成了输出,但是完成的不标准,Map集合本身并不能直接为Iterator实例化,如果此时非要使用Iterator输出Map集合中内容的话,则要采用如下的步骤:

 

方法一:

1.通过entrySet方法变成Set对象

2.调用Set的Iterator方法,此时每个Iterator对象是Map.Entry对象

3.对Map.Entry分离出 key - value

方法二:

1.通过keySet得到Map集合多有key的Set集合

2.调用Set的Iterator方法,此时每个Iterator对象是key

3.通过Map的getValue(key)得到value

 

Eg:

package july7;

//把Map中的元素取出来

 

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

 

public class Demo18

    public static void main(String[] args)

       

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

       

        m.put(1, "jack");

        m.put(2, "rose");

        m.put(3, "lucy");

       

        //第一种方法

        Set s = m.entrySet();

        Iterator it = s.iterator();

        while(it.hasNext())

            Map.Entry me = (Entry) it.next();

            System.out.println(me.getKey()+"  "+me.getValue());

       

 

        //第二种方法

       

        s = m.keySet();//得到的是key的集合

        it = s.iterator();//然后将key迭代出来

        while(it.hasNext())

            int i = (int)it.next();

            System.out.println(i+"   "+m.get(i));

       

   

以上是关于Java中的Map允许有重复元素吗的主要内容,如果未能解决你的问题,请参考以下文章

map的key可以重复吗

JAVA:如何删掉list里面重复的Map?

unordered map的key能重复么

如何在Map java中检查元素重复[重复]

LISTMAPSET总结

JAVA中列表,集合之间的区别