HashSet和HashMap

来源:互联网 发布:mac book如何复制粘贴 编辑:程序博客网 时间:2024/05/18 22:43
一、什么是HashSet

HashSet实现了Set接口,在他的集合中不允许有重复的对象,想要存储对象到HashSet之前必须覆写equals()和hashCode()接口,否则无法实现比较两个对象是否相等,以及是否重复了。HashSet()使用public boolean add(Object o)的方法在Set中添加元素,当对象重复时会返回一个false。

二、什么是HashMap
HashMap实现了Map接口,Map接口对key和value进行映射,Map中不存在重复的key,Map接口有两个基本实现TreeMap和HashMap 其中TreeMap的实现对象保存时的次序,HashMap不能。HashMap是非synchronized,但Collection架构提供方法保证HashMap的Synchronized,当多线程访问HashMap时,只有一个线程能更改Map。

下面是HashSet的代码,其覆写了hashCode()和equals()方法,如果不覆写任意其中一个,那么相同的对象会有不同的hash值,也就是说HashSet中将会有重复的对象了。

package HashTest;import java.util.HashSet;  import java.util.Iterator;  class Boy2 {      private int age;      private String name;        public Boy2(int age, String name) {          super();          this.age = age;          this.name = name;      }        public int getAge() {          return age;      }        public String getName() {          return name;      }       public int hashCode(){    return this.name.hashCode()+age;    }      /*public boolean equals(Object obj) {          Boy2 b=(Boy2) obj;          boolean result=this.age==b.age&&this.name.equals(b.name);          return result;      } */ //屏蔽上面的equals()或者hashCode()方法将会使对象重复      @Override      public String toString() {          return "boy3 [age=" + age + ", name=" + name + "]";      }    }  public class HashTest1 {public static void main(String args[]){Boy2 b1 = new Boy2(43, "zhangsan");Boy2 b2 = new Boy2(33, "lisi");Boy2 b3 = new Boy2(55, "wangwu");Boy2 b4 = new Boy2(43, "zhangsan");HashSet hashset = new HashSet();hashset.add(b1);hashset.add(b2);hashset.add(b3);hashset.add(b4);Iterator iterator = hashset.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}}

2 0
原创粉丝点击