黑马程序员技术交流社区

标题: ArrayList 中如何去重:分两种情况(点招考试题目) [打印本页]

作者: lockwood    时间: 2015-5-28 19:23
标题: ArrayList 中如何去重:分两种情况(点招考试题目)
一:如果是字符串对象的话。只用创建新对象。通过iterator进行遍历。然后将获取的到字符串对象转型为字符换,经过转型后,调用新集合的contains方法对获取到的元素进行判断,如果不存在就把元素存储在新集合中即可。
二:如果是一个(学生)对象,该对象中有很多的属性和方法。如果采用的是contains方法进行比较。那么比较的时候默认比较的是对象的地址值。所以不管怎么比较它们是不可能相等的。这个时候需要看底层的代码。通过底层的代码可知,底层使用了equals方法。因此。我们可以对equals方法进行重写,让底层按照我们自己定义的规则来进行比较。所以,可以在学生类中添加equals方法。 Equals方法中有比较有三部分:
第一部分----提高代码判断的效率:  采用 this == obj 的判断比较。这段代码用于判断传过来的对象是否是同一个对象,如果是同一对象的话,就 返回true。
第二部分----提高代码的健壮性: 采用 !(obj instance of Student) (以Stduent类来举例) 用于判断传过来的对象是否是Student 类的一个对象,如果不是,然后false
第三部分----比较对象的属性值是否相等:首相要比较该对象的属性值,就必须要把传过来的Object 类型的对象转化成为Student 对象的子类。这样才能调用student的属性。属于向下转型代码如下:
Student stu = (Student) obj;
分两种情况

1.比较字符串类型的成员变量:  this.name.equals(stu.name) 注意这里的equals 是this.name 这个字符串类象的方法。并不是调用了本方法。
2.比较整数类型的成员变量:        this.age == stu.age;   比较两个整数类型的age是否相等。
经过三次比较,基本上就穷尽了所有的点,这样就能实现去重的功能。
作者: lockwood    时间: 2015-5-28 19:26
自己总结的。
作者: wwb1105    时间: 2015-5-28 19:35
顶一下   对新手帮助很大
作者: lockwood    时间: 2015-5-29 07:05
wwb1105 发表于 2015-5-28 19:35
顶一下   对新手帮助很大

{:2_31:} 哟哟哟哟哟~~
作者: !85684009ex    时间: 2015-5-29 07:32
膜拜大神!这个你都想的到!
作者: qian0217wei    时间: 2015-5-29 08:27
来学习了
作者: 张海旭    时间: 2015-5-29 22:06
顶顶顶:victory:
作者: tinlen    时间: 2015-5-29 23:32
真详细,不知道到自己被问到这种问题能不能说全
作者: Amu    时间: 2015-5-29 23:42
新的思路,顶一个
作者: zlynnb2015    时间: 2015-5-30 00:12
总结得很好啊,大神。
作者: jiatengde    时间: 2015-5-30 00:46
新人报道,正在努力中
作者: lockwood    时间: 2015-5-31 18:04
各位加油~~
作者: Lucus    时间: 2015-5-31 21:55
很详细,总结的很好!
作者: 快乐Anne    时间: 2015-5-31 23:28
学习一下,顶顶
作者: 时光匆匆    时间: 2015-5-31 23:41
点招是考哪些的?都要敲出来么?
作者: as604049322    时间: 2015-6-1 00:04

作者: richaled    时间: 2015-6-1 07:58
赞一下,很详细
作者: 2015竹林风    时间: 2015-11-26 13:58
学习了......
作者: hugh88    时间: 2015-11-26 15:57
大神你好,大神求教,大神再见




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2