------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

我们知道集合是用来存储对象的。在他们实现了众多的接口我们以Arraylist为列子

所有已实现的接口:

Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess

集合当中有这样的一个方法。在API文档当中是下面这样解释的。

contains(Object o)
如果此列表中包含指定的元素,则返回 true

其实我在查看源代码的时候:代码如下。其实就是调用了对象的equals()方法,进行比较。如果相等,那么返回Ture

public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}

我们我们就会有一个问题:

我们比较如String对象的话我们可以直接比较。因为只要地址相同说明在栈里面的值就是统一代码块。final的作用。

而如果我们比较的是对我们应该怎么比较呢?

因为我们在object当中保存的是我们创建对象的引用(也就是地址),

在Java当我我们判断两个对象是是否相等我们要重新equal()方法,设置自己判断自己相同的条件

class Person
{
public String name ;
public int age ; public Person(String name ,int age)
{
this.name = name;
this.age = age; }
//重写一个equals方法
public boolean equals(Object obj)
{
//判断对象是否相同.
//1.先看他是否是Person对象
//2.比较字段值是否相同
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
}

所以我们在集合当中用contains方法查找是否包含当前对象时我们就应该重写equal()方法

小测试:删除一个集合当中重复的元素。  而这个元素是我们自己定义的对象

package com.text;

import java.util.ArrayList;
import java.util.Iterator; import com.sun.org.apache.bcel.internal.generic.NEW; public class List
{ public static void main(String[] args)
{
//创建长度为10的
ArrayList lang = new ArrayList();
lang.add(new Person("zhulang",13));
lang.add(new Person("zhulang",42));
lang.add(new Person("zhulang",13));
lang.add(new Person("zhulang",42));
lang.add(new Person("zhulang",13));
lang.add(new Person("zhulang",42)); lang = singleElement(lang); //我就用迭代器输出吧。
for(Iterator it = lang.iterator(); it.hasNext();)
{
Person p = (Person)it.next();
System.out.println(p.name + p.age);
} }
//去除重复元素的方法
public static ArrayList singleElement( ArrayList al)
{
//用到conkd
ArrayList newAL = new ArrayList();
//创建查找。 如果第一次存在我我们记录。如果在有同样的内容我们就不添加
//创建迭代器我们反复的查找
Iterator it= al.iterator();
while(it.hasNext())
{
Object ob = it.next();
if (!newAL.contains(ob))
{
//如果新的没有我们就添加。有就不添加
//实际上调用的是对象的equal()方法:
newAL.add(ob);
}
} return newAL;
} } //定义一个人的类
class Person
{
public String name ;
public int age ; public Person(String name ,int age)
{
this.name = name;
this.age = age; }
//重写一个equals方法 判断对象相等的条件
public boolean equals(Object obj)
{
//判断对象是否相同.
//1.先看他是否是Person对象
//2.比较字段值是否相同
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
}

输出:

zhulang 13

zhulang 14

黑马程序员-集合(二)contains()方法的内部探索的更多相关文章

  1. [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)

    ---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...

  2. 黑马程序员:轻松精通Java学习路线连载1-基础篇!

    编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...

  3. 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具

        Java学习路线图引言:        黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...

  4. 课程10:《黑马程序员_Hibernate开发资料》视频目录--没有细看

    老师很厉害,讲得蛮详细的 \Hibernate视频教程\01_黑马程序员_Hibernate教程__Hibernate入门基础.avi; \Hibernate视频教程\02_黑马程序员_Hiberna ...

  5. 黑马程序员——【Java高新技术】——代理

    ---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...

  6. 黑马程序员—C语言的函数、数组、字符串

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...

  7. 黑马程序员:Java基础总结----泛型(高级)

    黑马程序员:Java基础总结 泛型(高级)   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...

  8. 黑马程序员:Java基础总结----类加载器

    黑马程序员:Java基础总结 类加载器   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...

  9. 黑马程序员:3分钟带你读懂C/C++学习路线

    随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...

随机推荐

  1. ArrayList集合排序

    using System;using System.Collections;using System.Collections.Generic;using System.Text; namespace ...

  2. bzoj1042

    首先直接做多重背包肯定会TLE的, 观察这个背包问题有什么特殊性呢 物品种类和重量,价值是一定的,不同的是背包的容量和物品的数量 由于当物品数量没有限制的时候,方案数是可以预处理出来的 所以我们考虑用 ...

  3. Oracle坑之-空字符串与NULL

    空字符串与NULL 首先有如下代码 SELECT * FROM Pdc_DataDomain DD INNER JOIN Pdc_DD_Table DDT ON DD.DataDomainID = D ...

  4. 【转】 Android——eclipse共享library以及导出jar包

    原文网址:http://blog.csdn.net/jscese/article/details/36627195 android的apk在在eclipse上进行开发的时候,有时候需要import其它 ...

  5. 特性扩展:WebActivatorEx

    WebActivator: PreApplicationStartMethod 属性,用于标记作为东西您获取 Web 应用程序启动时调用的方法,在Application_Start前. PostApp ...

  6. Object-c 基础总结

    1,nil,NULL,NSNull:nil用来给对象附值,object—c里允许对象为空,空对象也可以接受消息.但是不允许指针为空,NULL是给任何指针附值的.所以NULL只在C或C++里才用.NSN ...

  7. Test2014-3-1 魅力值比较

    魅力值比较 [问题描述] 大学生恋爱的问题造成了数量众多的异地恋,有许多J大的女生早早被Q大男生追走,这导致了J大男生的强烈不满.就在吐血高调地向一位J大美女展开攻势的之后,J大男生终于爆发了. 为了 ...

  8. linux下在多个文件夹中查找指定字符串的命令

    例如,想要在当前文件夹下的多个.c或者.txt文件中查找“shutdown”字符串, 可以使用“grep shutdown ./*.c”或“grep shutdown ./*.txt”即可 使用fin ...

  9. Java的MongoDB驱动及读写策略

    网上看见一篇博文,详细讲了MongoDB读写策略,将来生产会遇到类似的问题,转来备查. 指定新mongo实例: Mongo m = new Mongo(); Mongo m = new Mongo( ...

  10. Uniform resource name

        A uniform resource identifier (URI) is a uniform resource locator(定位器,探测器) (URL), uniform resour ...