导航:首页 > 编程语言 > javahashmap重复

javahashmap重复

发布时间:2022-05-25 10:31:55

java map如何存放重复元素

map的要求是key不能重复,但是value可以重复,所以存放重复元素,只要key不相同即可。
比如有两个人的名字相同:
都叫做LiuDeHua
Map<String,String> map = new HashMap<String,String>();
map.put("p1",“LiuDeHua”);
map.put(“p2“,"LiuDeHua");
这样既可

② javaweb 中怎样利用hashmap 怎样实现用户不重复注册 (最好有具体实例)

是可以的,顺便B视一下楼上说的要遍历MAP的说法。那样是误导。哈希表的优势是快速定位和查找,缺点就是遍历,所以一般情况下要避免对哈希表进行遍历。

哈希表最重要的原理就是采用键-值对存储。值是对象,键就是给这个对象取个名字。然后存起来。
这种存储是唯一并排它的。 比方说第一次你存了一个对象取个键名为“AAA”,下次你又想存一个对象也取名为“AAA”,那么成功后,原来那个对象将会被新的对象替换。
换言之,表中永远只会有一个以“AAA”命名的对象存在。 新存一个,旧的那个就丢了。

当客户端发来注册请求时,会发过来想要取的名字,后台得到这个名字后从数据库中进行SQL查询利用Like语法,查出所有类似这个名字的所有用户。 这些用户将会以一个集合的形式存在。
你可以将集合转存在于哈希表中, 该哈希表以用户名为键值,以用户本身为对象存在。
Hashtable table = XXX;//你己经得到的用户表
boolean hasContainsName= table.containsKey("youname");
if(hasContainsName == true){
//注册失败,己存在用户
}

③ 对Java如何判断HashSet和HashMap中相同元素的研究

在Java中任何一个对象都具备equals(Object obj)和hashcode()这两个方法,因为他们是在Object类中定义的。 equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。 hashcode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”。 接下来有两个个关于这两个方法的重要规范(我只是抽取了最重要的两个,其实不止两个): 规范1:若重写equals(Object obj)方法,有必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。说得简单点就是:“如果两个对象相同,那么他们的hashcode应该 相等”。不过请注意:这个只是规范,如果你非要写一个类让equals(Object obj)返回true而hashcode()返回两个不相等的值,编译和运行都是不会报错的。不过这样违反了Java规范,程序也就埋下了BUG。 规范2:如果equals(Object obj)返回false,即两个对象“不相同”,并不要求对这两个对象调用hashcode()方法得到两个不相同的数。说的简单点就是:“如果两个对象不相同,他们的hashcode可能相同”。 1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。 2、如果两个对象不equals,他们的hashcode有可能相等。 3、如果两个对象hashcode相等,他们不一定equals。 测试程序如下:首先我们定义一个类,重写hashCode()和equals(Object obj)方法Java代码class�0�2A�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2@Override�0�2�0�2�0�2�0�2�0�2�0�2public�0�2boolean�0�2equals(Object�0�2obj)�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2System.out.println("判断equals");�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2return�0�2false;�0�2�0�2�0�2�0�2�0�2�0�2}�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2@Override�0�2�0�2�0�2�0�2�0�2�0�2public�0�2int�0�2hashCode()�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2System.out.println("判断hashcode");�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2return�0�21;�0�2�0�2�0�2�0�2�0�2�0�2}�0�2�0�2}�0�2�0�2class A { @Override public boolean equals(Object obj) { System.out.println("判断equals"); return false; } @Override public int hashCode() { System.out.println("判断hashcode"); return 1; } } Java代码 public�0�2class�0�2Test�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2public�0�2static�0�2void�0�2main(String[]�0�2args)�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2Map<A,Object>�0�2map�0�2=�0�2new�0�2HashMap<A,�0�2Object>();�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2map.put(new�0�2A(),�0�2new�0�2Object());�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2map.put(new�0�2A(),�0�2new�0�2Object());�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2System.out.println(map.size());�0�2�0�2�0�2�0�2�0�2�0�2}�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2}�0�2�0�2public class Test { public static void main(String[] args) { Map<A,Object> map = new HashMap<A, Object>(); map.put(new A(), new Object()); map.put(new A(), new Object()); System.out.println(map.size()); } } 运行之后打印结果是: 判断hashcode 判断hashcode判断equals2 可以看出,Java运行时环境会调用new A()这个对象的hashcode()方法。其中: 打印出的第一行“判断hashcode”是第一次map.put(new A(), new Object())所打印出的。 1、当第一次map.put(new A(), new Object())的时候,Java运行时环境就会判断这个map里面有没有和现在添加的 new A()对象相同的键,判断方法:调用new A()对象的hashcode()方法,判断map中当前是不是存在和new A()对象相同的HashCode。显然,这时候没有相同的,因为这个map中都还没有东西。所以这时候hashcode不相等,则没有必要再调用 equals(Object obj)方法了。参见推论4(如果两个对象hashcode不相等,他们一定不equals) 2、当第二次map.put(new A(), new Object())的时候,Java运行时环境再次判断,这时候发现了map中有两个相同的hashcode(因为我重写了A类的hashcode()方 法永远都返回1),所以有必要调用equals(Object obj)方法进行判断了。参见推论3(如果两个对象hashcode相等,他们不一定equals),然后发现两个对象不equals(因为我重写了equals(Object obj)方法,永远都返回false)。 3、这时候判断结束,判断结果:两次存入的对象不是相同的对象。所以最后打印map的长度的时候显示结果是:2。 改写程序如下:Java代码import�0�2java.util.HashMap;�0�2�0�2import�0�2java.util.Map;�0�2�0�2�0�2�0�2�0�2�0�2class�0�2A�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2@Override�0�2�0�2�0�2�0�2�0�2�0�2public�0�2boolean�0�2equals(Object�0�2obj)�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2System.out.println("判断equals");�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2return�0�2true;�0�2�0�2�0�2�0�2�0�2�0�2}�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2@Override�0�2�0�2�0�2�0�2�0�2�0�2public�0�2int�0�2hashCode()�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2System.out.println("判断hashcode");�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2return�0�21;�0�2�0�2�0�2�0�2�0�2�0�2}�0�2�0�2}�0�2�0�2�0�2�0�2�0�2�0�2public�0�2class�0�2Test�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2public�0�2static�0�2void�0�2main(String[]�0�2args)�0�2{�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2Map<A,Object>�0�2map�0�2=�0�2new�0�2HashMap<A,�0�2Object>();�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2map.put(new�0�2A(),�0�2new�0�2Object());�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2map.put(new�0�2A(),�0�2new�0�2Object());�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2System.out.println(map.size());�0�2�0�2�0�2�0�2�0�2�0�2}�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2}�0�2�0�2import java.util.HashMap; import java.util.Map; class A { @Override public boolean equals(Object obj) { System.out.println("判断equals"); return true; } @Override public int hashCode() { System.out.println("判断hashcode"); return 1; } } public class Test { public static void main(String[] args) { Map<A,Object> map = new HashMap<A, Object>(); map.put(new A(), new Object()); map.put(new A(), new Object()); System.out.println(map.size()); } } 运行之后打印结果是: 判断hashcode 判断hashcode判断equals1显然这时候map的长度已经变成1了,因为Java运行时环境认为存入了两个相同的对象。原因可根据上述分析方式进行分析。 以上分析的是HashMap,其实HashSet的底层本身就是通过HashMap来实现的,所以他的判断原理和HashMap是一样的,也是先判断hashcode再判断equals。 所以:写程序的时候应尽可能的按规范来,不然在不知不觉中就埋下了bug!

④ 求大神会java的hashmap的问题:如何删掉Map中重复的值

importjava.util.HashSet;
importjava.util.Iterator;
importjava.util.Map;
importjava.util.Map.Entry;
importjava.util.Set;

importorg.apache.commons.collections4.map.LinkedMap;

publicclassTest030{

/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Map<String,String>m=newLinkedMap<String,String>();
m.put("1","abc");
m.put("2","abc");
m.put("3","kjs");
m.put("4","abc");
m.put("5","kjs");
System.out.println("before:"+m);
removeDuplicate(m);
System.out.println("after:"+m);
}

(Map<String,String>m){
Set<String>values=newHashSet<String>();
for(Iterator<Entry<String,String>>it=m.entrySet().iterator();it
.hasNext();){
Entry<String,String>e=it.next();
if(values.contains(e.getValue())){
it.remove();
}else{
values.add(e.getValue());
}
}
}

}

写的时候没有注意, 如果jdk中没有linkedMap, 那么请引入commons的collections包

主要是HashMap不保证顺序

⑤ java问题,我想在java中存储键值对,以便使用,但是键值对的键和值都有重复元素,使用hashmap会产生覆盖。

你这个是n vs n的情况,都不算算是键值对应关系了。所以不用考虑map了
链表和这个也没有太大关系,主要有多对多的情况

不知道你那个
b 2
c 2是不是有序的,如果有序的话,用数组可以简单实现

⑥ java List中的HashMap,去掉重复列。按json输出

这个是JSON数据,定义好JAVA类,可以使用 json-lib或 GSON 转成相应的集合,再去掉重复的行

~~~~~~

⑦ java中的HashMap类是做什么用的

java中HashMap类是用来存储具有键值对特征的数据。例如现在需要按照员工号来存储大量的员工信息,那么就可以使用HashMap,将员工号作为键,员工对象作为值来存储到HashMap中,其中使用HashMap时需要注意,HashMap是线程不同步的,多线程使用时,需要注意;并且HashMap允许null值作为键和值。

⑧ JAVA 关于 HashMap的

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了异步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
public V put(K key, V value)
作为key的对象只能使用一个null,而value则可以保存多个null.在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换。

⑨ java hashmap怎么遍历冲突的部分

大家都知道map的key值是不可以重复的,重复会覆盖哦。
不过你的问题有个取巧的方法,就是不用int数字做key,而是新建string对象做key,这样内存地址不同的话,是可以重复的。
Map map = new IdentityHashMap();
map.put(new String("1"), "a");
map.put(new String("1"), "b");
System.out.println(map);
输出{1=a, 1=b}。
补充,其实用 IdentityHashMap的话,不用string,new Integer新建对象也是可以的。

⑩ java中hashset和hashmap有什么特点

HashSet:

HashSet实现了Set接口,它不允许集合中有重复的值。当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。

public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true。

HashMap:

HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许重复的键。Map接口有两个基本的实现,HashMap和TreeMap。TreeMap保存了对象的排列次序,而HashMap则不能。

HashMap允许键和值为null。HashMap是非synchronized的,但collection框架提供方法能保证HashMap synchronized,这样多个线程同时访问HashMap时,能保证只有一个线程更改Map。
public Object put(Object Key,Object value)方法用来将元素添加到map中。

阅读全文

与javahashmap重复相关的资料

热点内容
编译器研究的难点 浏览:928
仙居单片机 浏览:425
android4书籍 浏览:641
pdf阅读器电脑版exe 浏览:907
易语言加壳怎么编译 浏览:523
qt下编译生成mqtt库 浏览:543
南京中兴招收专科程序员吗 浏览:299
代理商php源码 浏览:985
苹果手机怎么解压软件app 浏览:652
游戏资源被编译 浏览:154
代码编译后黑屏 浏览:8
程序员情侣写真 浏览:505
python3孪生素数 浏览:36
计算杨辉三角Python 浏览:404
linux目录重命名 浏览:196
算法设计的最终形态是代码 浏览:262
程序员社团招新横幅 浏览:238
拖鞋解压视频大全 浏览:887
租服务器主机链接软件叫什么 浏览:856
交叉编译工具的linux版本号 浏览:156