网站快速优化排名,网络服务器租赁费一般多少钱,晋城住房保障和城乡建设管网站,中国金湖建设网站Set接口
说一下 HashSet 的实现原理#xff1f;
HashSet 是基于 HashMap 实现的#xff0c;HashSet的值存放于HashMap的key上#xff0c;HashMap的value统一为PRESENT#xff0c;因此 HashSet 的实现比较简单#xff0c;相关 HashSet 的操作#xff0c;基本上都是直接调…Set接口
说一下 HashSet 的实现原理
HashSet 是基于 HashMap 实现的HashSet的值存放于HashMap的key上HashMap的value统一为PRESENT因此 HashSet 的实现比较简单相关 HashSet 的操作基本上都是直接调用底层 HashMap 的相关方法来完成HashSet 不允许重复的值。
HashSet如何检查重复HashSet是如何保证数据不可重复的
向HashSet 中add ()元素时判断元素是否存在的依据不仅要比较hash值同时还要结合equles 方法比较。
HashSet 中的add ()方法会使用HashMap 的put()方法。
HashMap 的 key 是唯一的由源码可以看出 HashSet 添加进去的值就是作为HashMap 的key并且在HashMap中如果K/V相同时会用新的V覆盖掉旧的V然后返回旧的V。所以不会重复 HashMap 比较key是否相等是先比较hashcode 再比较equals 。
以下是HashSet 部分源码
private static final Object PRESENT new Object();
private transient HashMapE,Object map;public HashSet() {map new HashMap();
}public boolean add(E e) {// 调用HashMap的put方法,PRESENT是一个至始至终都相同的虚值return map.put(e, PRESENT)null;
}
hashCode()与equals()的相关规定
如果两个对象相等则hashcode一定也是相同的两个对象相等,对两个equals方法返回true两个对象有相同的hashcode值它们也不一定是相等的综上equals方法被覆盖过则hashCode方法也必须被覆盖hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写hashCode()则该class的两个对象无论如何都不会相等即使这两个对象指向相同的数据。
与equals的区别
是判断两个变量或实例是不是指向同一个内存空间 equals是判断两个变量或实例所指向的内存空间的值是不是相同是指对内存地址进行比较 equals()是对字符串的内容进行比较指引用是否相同 equals()指的是值是否相同
HashSet与HashMap的区别 Queue
BlockingQueue是什么
Java.util.concurrent.BlockingQueue是一个队列在进行检索或移除一个元素的时候它会等待队列变为非空当在添加一个元素时它会等待队列中的可用空间。BlockingQueue接口是Java集合框架的一部分主要用于实现生产者-消费者模式。我们不需要担心等待生产者有可用的空间或消费者有可用的对象因为它都在BlockingQueue的实现类中被处理了。Java提供了集中BlockingQueue的实现比如ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue,、SynchronousQueue等。
在 Queue 中 poll()和 remove()有什么区别
相同点都是返回第一个元素并在队列中删除返回的对象。不同点如果没有元素 poll()会返回 null而 remove()会直接抛出 NoSuchElementException 异常。
代码示例
QueueString queue new LinkedListString();
queue. offer(string); // add
System. out. println(queue. poll());
System. out. println(queue. remove());
System. out. println(queue. size());