蚂蚁花呗:阿里巴巴面试:Java 集合知识点(附图文解析)( 九 )
如何避免fail-fast ?
- 在单线程的遍历过程中 , 如果要进行remove操作 , 可以调用迭代器 ListIterator 的 remove 方法而不是集合类的 remove方法 。 看看 ArrayList中迭代器的 remove方法的源码 , 该方法不能指定元素删除 , 只能remove当前遍历元素 。
- 使用并发包(java.util.concurrent)中的类来代替 ArrayList 和 hashMap
- CopyOnWriterArrayList 代替 ArrayList
- ConcurrentHashMap 代替 HashMap
- 函数接口不同 , Enumeration只有2个函数接口 。 通过Enumeration , 我们只能读取集合的数据 , 而不能对数据进行修改 。 Iterator只有3个函数接口 。 Iterator除了能读取集合的数据之外 , 也能数据进行删除操作 。
- Iterator支持 fail-fast机制 , 而Enumeration不支持 。 Enumeration 是JDK 1.0添加的接口 。 使用到它的函数包括Vector、Hashtable等类 , 这些类都是JDK 1.0中加入的 , Enumeration存在的目的就是为它们提供遍历接口 。 Enumeration本身并没有支持同步 , 而在Vector、Hashtable实现Enumeration时 , 添加了同步 。 而Iterator 是JDK 1.2才添加的接口 , 它也是为了HashMap、ArrayList等集合提供遍历接口 。 Iterator是支持fail-fast机制的:当多个线程对同一个集合的内容进行操作时 , 就可能会产生fail-fast事件
- 对象实现Comparable 接口
- Comparable 在 java.lang 包下 , 是一个接口 , 内部只有一个方法 compareTo()
- Comparable 可以让实现它的类的对象进行比较 , 具体的比较规则是按照 compareTo 方法中的规则进行 。 这种顺序称为 自然顺序 。
- 实现了 Comparable 接口的 List 或则数组可以使用 Collections.sort() 或者 Arrays.sort() 方法进行排序
- 定义比较器 , 实现 Comparator接口
- Comparator 在 java.util 包下 , 也是一个接口 , JDK 1.8 以前只有两个方法:comparable相当于内部比较器 。 comparator相当于外部比较器
- Comparator 位于 java.util 包下 , 而 Comparable 位于 java.lang 包下
- Comparable 接口的实现是在类的内部(如 String、Integer已经实现了 Comparable 接口 , 自己就可以完成比较大小操作) , Comparator 接口的实现是在类的外部(可以理解为一个是自已完成比较 , 一个是外部程序实现比较)
- 实现 Comparable 接口要重写 compareTo 方法 在 compareTo 方法里面实现比较 。 一个已经实现Comparable 的类的对象或数据 , 可以通过 Collections.sort(list) 或者 Arrays.sort(arr)实现排序 。 通过 Collections.sort(listCollections.reverseOrder()) 对list进行倒序排列 。
- 实现Comparator需要重写 compare 方法
从 HahSet 提供的构造器可以看出 , 除了最后一个 HashSet 的构造方法外 , 其他所有内部就是去创建一个 Hashap。 没有其他的操作 。 而最后一个构造方法不是 public 的 , 所以不对外公开 。
推荐阅读
- 阿里巴巴|反击开始!马云、马化腾、任正非相继出手,网友炸锅:干得漂亮
- 阿里巴巴|电商风云再起?拼多多来势汹汹,疯狂攻击阿里“命门”!
- 数码科技大爆炸|支付宝再次上线新功能!月光族有福气了:花呗支付可免首付无利息
- 阿里巴巴|好戏还在后面!英国尝到“苦头”,美国表态:不关我的事
- 蚂蚁花呗|支付宝再次上线新功能! \月光族\有福气了: 花呗支付可免首付无利息
- 蚂蚁花呗|你可能一直在错误的使用支付宝和蚂蚁花呗
- 产业气象站|会对车贷、房贷产生影响?花呗客服回应,花呗部分用户接入央行征信
- 阿里巴巴|你觉得华为与阿里巴巴,谁掌握的世界性先进技术比更多?
- 蚂蚁花呗|支付宝花呗“服务升级”,这些行为将上报征信!
- 阿里巴巴|马云不再沉默,面对印度的施压,阿里直接遣散印度公司员工
