键值对

详解HashMap,Hashtable,LinkedHashMap,TreeMap的异同点

风格不统一 提交于 2021-01-30 13:56:39
Map Map是是一种数据结构,它是把数据按照key-value键值对的形式保存起来,一般来说,Map的定义是key是独一无二的,即存在map中的各个键一定是不能相同的。当然,对于一般的基本数据类型和String类型,对象都是可以自动比较的,建议键一般用不可变(immutable,可以参考我的另外一篇博文———不可变设计模式)类型。而对于其它的复杂类型,如果你没有在类中定义equals方法,则map中是可以存放相同的键的,因为它无法判断两个对象是否相同,所以在使用map存储数据时,键的数据类型一定要覆写equals方法,以提供可以判断两个对象是否相等的方法。 Map并不是Collection的一部分,即它是一个独立的接口,并没有继承Collection接口,因此它无法直接实现迭代器。但是它可以通过调用方法entrySet得到一个Set对象,而Set是Collection的一个类,因此Set可以生成迭代器。另外,Map内部还有一个EntrySet<K,V>接口,这个接口可以提供获取键-值的方法,非常方便。 HashMap HashMap内部是通过一个哈希函数来计算键的哈希值,然后内部含有一个数据结构用来存放键的哈希值,进而可以根据它的哈希值来检索键值对的位置。因此,如果你要将数据存进HashMap中,并且键的类型是一个自定义的类,该类要覆写equals方法以外