本帖最后由 wzg1015 于 2014-10-30 00:41 编辑
我最喜欢学习这些底层知识了,当以后出现程序异常时,这些底层知识才是快速调试的好帮手,不然,会觉得问题出的莫名其妙,始终不得要领。我认为我学到的有四点:第一是list去除重复的一种思路,通过新建容器来将非重复元素存入,最后返回这个新容器。
· 第二:remove和contains都是调用底层元素equals来进行判断的。
第三:next的每次使用都需要判断hasNext()否则可能会出现异常。
第四:实现equals之前需要判断传入对象的类型,直接使用强转可能会出现异常(比如没有相应的getName方法)
Java基础视频教程第14天-10-集合框架(ArrayList练习) [20141027更新]
去除ArrayList中的重复元素
思路:创建一个新容器,从旧容器中迭代去元素放入新容器,放入之前进行判断是否已经存在。
注意:迭代时一次next()就必须使用hasNext()进行判断。一次取两个元素是不可取的,
Java基础视频教程第14天-11-集合框架(ArrayList练习2) [20141027更新]
需求:将自定义对象作为元素存储到ArrayList中,并去除相同元素。
将同姓名,同年龄的人作为同一个人,当成重复元素。
思路:1.定义人,将数据封装进人对象。
2.定义容器,将人进行存入;
3,去除相同元素(通过复写人的equals方法来达到可正确比较的目的)
注意:1.不要使用两次next()
2.iterator.netx()返回的是Object。
3.ArrayList 内部判断元素是否相同,使用的是对象的equale
判断元素是否相同的实现:每次进入新的元素,新元素调用自身的equals方法与容器中的每个元素进行比较。
list的集合判断元素是否相同 依据的是元素的equals方法。
remove 底层判断同样使用的是equals方法来查找指定的对象。
- package com.itheima;
- import java.util.ArrayList;
- import java.util.Iterator;
- public class Demo2 {
- private static void sop(String str) {
- System.out.println(str);
- }
- public static void main(String[] args) {
- ArrayList aList=new ArrayList();
- aList.add(new Person("zhangsan01",22));
- aList.add(new Person("zhangsan02",23));
- aList.add(new Person("zhangsan03",24));
- Iterator it =aList.iterator();
- aList=singleElement(aList);
- while(it.hasNext()) {
- //错误1.两个next为两个不同对象
- //错误2.it.next返回的Object,无getName()方法。
- // sop(it.next().getName()+"....."+it.getAge());
- Person per=(Person) it.next();
- sop(per.getName()+"....."+per.getAge());
- }
- aList.remove(new Person("zhangsan01",22));//通过调用equals来进行判断
-
- }
- /**去除ArrayList中的重复元素**/
- public static ArrayList singleElement(ArrayList aList) {
-
- ArrayList al=new ArrayList();
- Iterator it=aList.iterator();
-
- while(it.hasNext()) {
- Object obj=it.next();
- //判断是否已经包含,不包含则添加到新容器,使用的是equals来进行判断
- if(!al.contains(obj)) {
- al.add(obj);
- }
- }
- return al;
- }
- }
- class Person{
- private String name;
- private int age;
- public Person(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- @Override
- public boolean equals(Object obj) {
- if(!(obj instanceof Person))
- return false;
- Person per=(Person) obj;
- return this.name.equals(per.getName())&&this.age==per.age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
复制代码
s |