java 集合(6) 选择集合类标准 / Map 接口用法
来源:互联网 发布:淘宝客发单机器人 编辑:程序博客网 时间:2024/06/06 09:08
1. 如何选择集合(数据结构)
衡量标准:读的效率和改的效率现在用的:就是list set map
Array打头的 : 读快改(删结构)慢
Linked打头的 : 改快读慢
Hash打头的 : 两者之间 ——这些类是,以前遗留的比较古老的数据结构实现,不推荐使用,hashtable内部是锁定的,效率极低(不论是读还是写)
Vector:——这些类是,以前遗留的比较古老的数据结构实现 ,不推荐使用, vector内部是锁定的,效率极低(不论是读还是写)
2.Map 接口用法
Map接口的函数:
实现Map 接口的类用来存储键值对
Map接口的实现类有HashMap和TreeMap
Map类中存储的键值对通过键来标识,所以键不能重复(说的是equals() )。这里的键就相当于索引。
HashMap 用哈希表实现(用哈希表做索引),TreeMap 用二叉树(红黑树)实现(用二叉树做索引)。
Map map = new HashMap();map.put(new Iplong("li", "jia"), "first");map.put(new Iplong("li", "jia"), "second");//这里的键值比较也是equals,如果这里重写了equals,则此处map结果只有一条System.out.println(map);结果是:{li jia=second, lijia=first}
如果两个key 是不同的对象,还想覆盖,必须重写hashcode / equals方法
public class Iplong {public String firstName;public String lastName;public Iplong(String firstName, String lastName) {this.firstName = firstName;this.lastName = lastName;}public boolean equals(Object obj) {System.out.println("equals");if (obj instanceof Iplong) {Iplong iplong = (Iplong) obj;return firstName.equals(iplong.firstName)&& lastName.equals(iplong.lastName);}return super.equals(obj);}public int hashCode() {System.out.println("hashcode "+firstName.hashCode());return firstName.hashCode();//(int)(Math.random()*10) 0~9随机数}public static void main(String[] args) {// 只有当比较key 的hashcode 相等时,才继续比较key 的equals ,否则不比。如果equals 也相等,则替换已存在key 。具体过程如下两句。 //先比较Map 的key的hashcode,调用hashcode 方法如果相等,再比较equals,如果相等则替换键值对,否则不替换都插入保留。//在比较Map 的key的hashcode,调用hashcode 方法的时候,如果不相等,则不调用equals,直接不替换都插入保留Map map = new HashMap();map.put(new Iplong("li", "jia"), "first"); // AAAmap.put(new Iplong("li", "jia"), "second");// BBB 这里的键值比较也是equals,如果这里重写了equals,则此处map结果只有一条System.out.println(map);}}
结果:
hashcode 3453 这个是执行AAA语句调用的hashcode 方法
hashcode 3453 这个是执行BBB语句调用的hashcode 方法
equals{li jia=second}
对上面结果进一步解释是
Map map = new HashMap();map.put(new Iplong("li", "jia"), "first"); // AAAmap.put(new Iplong("li", "jiaa"), "second");// BBB 这里的键值比较也是equals,如果这里重写了equals,则此处map结果只有一条map.put(new Iplong("li", "ji"), "third"); // CCCSystem.out.println(map);结果:
hashcode 3453 这个是执行AAA语句调用的hashcode 方法
hashcode 3453 这个是执行BBB语句调用的hashcode 方法
equals 这个是执行BBB语句后,和AAA元素比较,调用的equals 方法
hashcode 3453 这个是执行CCC语句调用的hashcode 方法
equals 这个是执行CCC语句后,和AAA(或BBB)元素比较,调用的equals 方法
equals 这个是执行CCC语句后,和BBB(或AAA)元素比较,调用的equals 方法
{li ji=third, lijiaa=second, li jia=first}
完成任务
0 0
- java 集合(6) 选择集合类标准 / Map 接口用法
- java集合-Map接口
- Java集合Map接口
- java-集合Map接口
- java集合类之Map接口
- Java集合Map接口学习
- Java集合Map接口学习
- java数据集合Map接口
- 1005--Java集合--Map接口
- 《JAVA集合中的Map接口》
- Java集合之Map接口
- Java——集合类 Collection接口和 Map接口
- java集合类Map
- java map集合类
- java Map集合类
- JAVA集合-Map集合
- java集合------Map集合
- Java集合----Map集合
- 简单 sql 语句 实用大全
- 《神经网络与深度学习》讲义1—数学基础
- DoTween - 动画重复播放
- 《Monkey Android》第3课之Android Studio简介与模拟器
- 运算放大器选型及其要求
- java 集合(6) 选择集合类标准 / Map 接口用法
- 图的添加和删除
- 轻松学习JavaScript二十九:JavaScript中的this详解
- [LeetCode]#8 String to Integer (atoi)
- linux系统下怎么输入EOF退出输入循环while(getline(cin, temp)){.....}
- 关于smarty引擎原理
- 关于访问权限控制的几点问题
- CSS3 3D转换入门篇
- Apache vhosts配置