集合知识总结1("==",equals和hashcode的作用区别、迭代器的作用、HashMap和HashTable 、WeakHashMap、ConcurrentHashMap)

集合知识总结1("==",equals和hashcode的作用区别、迭代器的作用、HashMap和HashTable、WeakHashMap、ConcurrentHashMap)
1、equals和hashcode、的作用区别
1)关系操作符,适用于所有的基本数据类型、所有的对象
基本数据类型:byte,short,char,int,long,float,double,boolean之间的比较用,比较的是他们的值。比较方法只有“==”。

引用类型:比较的是对象的引用,不是内容,比较的是他们内存中存放的地址,只有同一个new出来的对象,比较结果才为true。对象是放在堆中,栈中存放的是对象的引用(地址),所以是对栈中的值进行比较。
2)equals
如果是自定义的类,用equals和==是一样的,都是地址,因为自定义的类继承于object,在object总equals就是用此实现的,没有进行方法覆盖
若比较String等类型,用equals是比较内容,因为String等常用类已经重写了equals方法,用来比较实际内容堆中的值
3)hashCode(只在集合中用到)
equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。
hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。hashCode()不相等的两个对象equal()一定不相等。
所有对于需要大量并且快速的对比的话如果都用equal()去做太低,所以解决方式是,需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就不必再用equal()去对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!
一般覆盖equals方法的同时也要覆盖hashcode方法,使得equals成立时,hashcode相等,如果不这样做的话,就会违反Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap、HashSet和Hashtable。

2、迭代器的作用
Java集合类也就是容器,如ArrayList、LinkedList、HashSet…,每种容器都有自己的特点,ArrayList底层是数组,LinkedList底层是链表,HashSet依赖的的是哈希表,每种容器都有自己特有的数据结构,内部结构不同,所以很多时候不知如何遍历一个容器中的元素,为了对容器内元素的操作更简单,就有了迭代器模式。
迭代器是一种设计模式,它遍历并选择序列中的对象,是客户端程序员不必知道或关心该序列底层的结构。迭代器是轻量级对象,创建它的代价小。
Java的Iterator只能单向移动,只能用来:
1)使用Iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素
2)使用next()获得序列中的下一个元素
3)使用hasNext()检查序列中是否还有元素
4)使用remove()迭代器新近返回的元素删除
总结:
迭代器提统一了对容器的访问方式
迭代器可以在对客户透明的情况下,提供各种不同的迭代方式
迭代器提供一种快速失败机制,防止多线程下迭代的不安全操作

3、HashMap和HashTable的区别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、HashMap和WeakHashMap的区别
1)两者都是散列表,存储的内容是键值对(key-value)映射,键和值都可为空
2)WeakHashMap是弱引用,键为弱键,当WeakHashMap某个键不再正常使用时会被从WeakHashMap中自动删除,被垃圾回收期回收,

5、HashMap和cocurrentHashMap实现原理和异同?
1)HashMap
底层数组,可以存储null键和null值,线程不安全
初始化大小为16,扩容:2倍扩容
扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入
插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容)
2)ConcurrentHashMap
底层采用分段的数组+链表实现,线程安全
通过把整个Map分为N个Segment,可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。(读操作不加锁,由于HashEntry的value变量是 volatile的,也能保证读取到最新的值。) ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值