因为Collection是接口我们不能直接实例化,所以我们下面的例子都是采用多态实例化实现类ArrayList类

1. Collection中常用方法

添加:
    add()     添加一个元素到集合中
    addAll()   把一个集合中的所有元素添加到指定的集合中(指定集合为调用此方法,参数为要被添加的集合)
 
 
删除:
    clear()     删除集合中的所有元素
    remove()     删除集合中指定元素
    removeAll()   删除2个集合中的交集
    retainAll()   保留2个集合中的交集,其它删除
    
判断:
    contains()    查看集合中是否存在此元素,如果有返回true否者返回false
    containsAll()  查看一个集合中是否存在指定集合的所有元素,有返回true否false(指定集合为调用此方法,参数为要被添加的集合)
    isEmpty()    查看元素是否为空,是true否false

查看:
    size()     查看集合中元素的长度(注意:并不是集合容器的长度)

迭代器:
    toArray()    返回一个object数组,数组里面包含集合的所有元素

    iterator()    下一章迭代器会讲

 

2.下面是一些不好理解的方法实例代码

allAll   添加一个元素到集合中

public static void main(String[] args) {
//创建两个个Collection实体类的对象
Collection list1 = new ArrayList();
Collection list2 = new ArrayList();
//往集合中添加元素
list1.add("张三");
list1.add("李四");
list1.add("王五");
list2.add("张三");
list2.add("狗娃");
list2.add("狗蛋");
System.out.println(list1);
System.out.println(list2);
//addAll()把list2中的所有元素添加到list1中
list1.addAll(list2);
System.out.println(list1); }

removeAll()   删除2个集合中的交集

public static void main(String[] args) {
//创建两个个Collection实体类的对象
Collection list1 = new ArrayList();
Collection list2 = new ArrayList();
//往集合中添加元素
list1.add("张三");
list1.add("李四");
list1.add("王五");
list2.add("张三");
list2.add("狗娃");
list2.add("狗蛋");
System.out.println(list1);
System.out.println(list2);
//removeAll()删除2个集合中的交集
list1.removeAll(list2);
System.out.println(list1);
}

retainAll()   保留2个集合中的交集,其它删除

public static void main(String[] args) {
//创建两个个Collection实体类的对象
Collection list1 = new ArrayList();
Collection list2 = new ArrayList();
//往集合中添加元素
list1.add("张三");
list1.add("李四");
list1.add("王五");
list2.add("张三");
list2.add("狗娃");
list2.add("狗蛋");
System.out.println(list1);
System.out.println(list2);
//removeAll()删除2个集合中的交集
list1.retainAll(list2);
System.out.println(list1);
}

containsAll()  查看一个集合中是否存在指定集合的所有元素,有返回true否false(指定集合为调用此方法,参数为要被添加的集合)

public static void main(String[] args) {
//创建两个个Collection实体类的对象
Collection list1 = new ArrayList();
Collection list2 = new ArrayList();
//往集合中添加元素
list1.add("张三");
list1.add("李四");
list1.add("王五");
list2.add("张三");
list2.add("狗娃");
list2.add("狗蛋");
System.out.println(list1);
System.out.println(list2);
//removeAll()删除2个集合中的交集
System.out.println(list1.containsAll(list2));
}

contains()    查看集合中是否存在此元素,如果有返回true否者返回false

上面我们都是添加的是字符串,现在我们来添加一个对象

需求:身份证例子(在现实生活中,只要我们的身份证id一样,那么不管名字是否一样,那都是一个人)

class People{
int id;
String name; public People(int id , String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "{身份证:"+id+" 姓名:"+name+"}";
}
} public class Demo1 { public static void main(String[] args) {
//创建两个个Collection实体类的对象
Collection list1 = new ArrayList();
list1.add(new People(1001,"张三"));
list1.add(new People(1002,"李四"));
list1.add(new People(1003,"王五"));
System.out.println(list1);//打印集合中的元素
//查询是否存在存在身份证为1001的人
System.out.println(list1.contains(new People(1001,"张三")));
}
}

这时我们是不是感到很奇怪,明明存在我要查找的人啊!为什么返回false呢?

我们来看看contains方法的源代码:

这个是ArrayList类中的contains方法源代码

可以看出这个是调用了ArrayList类的indexOf方法,接受的参数是我们Object类型的数据(多态)

public boolean contains(Object o) {
return indexOf(o) >= 0;
}

这个是indexOf方法的源代码

我们发现这个是调用了equals方法进行比较的,而我们根本没有重写Object的equals方法,所以调用的是Object的equals方法比较的是内存地址,我们的参数相当于又重新创建了一个对象,所以返回false

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;
}

解决方法:改写Object的equals方法

最终代码如下:

class People{
int id;
String name; public People(int id , String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "{身份证:"+id+" 姓名:"+name+"}";
}
@Override
public boolean equals(Object obj) {
//因为是多态,所以这里我们要强转
People p = (People)obj;
if(p.id == this.id) {
return true;
}else {
return false;
} }
} public class Demo1 { public static void main(String[] args) {
//创建两个个Collection实体类的对象
Collection list1 = new ArrayList();
list1.add(new People(1001,"张三"));
list1.add(new People(1002,"李四"));
list1.add(new People(1003,"王五"));
System.out.println(list1);//打印集合中的元素
//查询是否存在存在身份证为1001的人
System.out.println(list1.contains(new People(1001,"老刘")));
}
}

toArray()   返回一个object数组,数组里面包含集合的所有元素

public static void main(String[] args) {
Collection list = new ArrayList();
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println(list);
Object[] arr = list.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}

45. Collection的更多相关文章

  1. 【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别

    原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,Hash ...

  2. Apache Mina实战

    Mina介绍 Mina可以用于快速的开发基于网络通信的应用,特别是在开发手机端的游戏应用时,使用的较为普遍.本文简单介绍了一个用Mina搭建的一个简易讨论组,通过该应用可以对Mina的基本用法用途有个 ...

  3. 架构师系列文:通过Spring Cloud组件Hystrix合并请求

    在前文里,我们讲述了通过Hystrix进行容错处理的方式,这里我们将讲述通过Hystrix合并请求的方式 哪怕一个URL请求调用的功能再简单,Web应用服务都至少会开启一个线程来提供服务,换句话说,有 ...

  4. MongoDb 物理位置应用实现

    1代码实现 官方驱动2.7版本 1.1范围查找 /// <summary> /// 半径范围查找位置信息 /// </summary> /// <param name=& ...

  5. MongoDb C# 驱动操作示例

    c#操作mongo数据库 驱动采用http://www.oschina.net/p/mongo-csharp-driver C#驱动的基本数据库连接,增删改查操作 //定义对象 public clas ...

  6. Python操作MongoDB文档数据库

    1.Pymongo 安装 安装pymongo: pip install pymongo PyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成: 2.Pym ...

  7. Java后台面试之java基础

    经典类概念性问题 1.java支持的数据类型有哪些?什么是自动拆装箱? 12.Java有哪些特性,举个多态的例子. 14.请列举你所知道的Object类的方法. 15.重载和重写的区别?相同参数不同返 ...

  8. Hive理论基础

    数仓特征:面向主题,集成,非易失的,时变.数据仓库是在数据库已经大量存在的情况下,为了进一步挖掘数据资源.为了决策需要而产生的,不是所谓的"大型数据库".   数据库与数据仓库的区 ...

  9. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

随机推荐

  1. tcp - 传输控制协议 (TCP)

    总缆 SYNOPSIS #include <sys/socket.h> #include <netinet/in.h> tcp_socket = socket(PF_INET, ...

  2. poj 2752 kmp的next数组

    题目大意: 求一个字符串中某一个既是前缀又是后缀的前缀的结尾下标: 基本思路: 从_next[len]开始找_next[_next[len]],再找_next[_next[_next[len]]],一 ...

  3. Hive SQL之分区表与分桶表

    Hive sql是Hive 用户使用Hive的主要工具.Hive SQL是类似于ANSI SQL标准的SQL语言,但是两者有不完全相同.Hive SQL和Mysql的SQL方言最为接近,但是两者之间也 ...

  4. div框,左右拖动

    <script type="text/javascript"> function bindResize(el){ //初始化参数 var els = document. ...

  5. 同源策略 - JSONP - CORS

    1.  Jquery 对象可以通过 .index() 进行取出自当前元素在父级元素中存放的索引: 2. 浏览器的同源策略 -- Ajax 在访问非本网站的时候,在数据返回的时候,会被浏览器拦截 - 后 ...

  6. php-数据库-分页类-上传类

    config.ini.php <?php header("content-type:text/html;charset=utf-8"); //项目的根目录 define(&q ...

  7. Shiro学习(24)在线回话管理

    有时候需要显示当前在线人数.当前在线用户,有时候可能需要强制某个用户下线等:此时就需要获取相应的在线用户并进行一些操作. 本章基于<第十六章 综合实例>代码构建. 会话控制器 Java代码 ...

  8. SVN——将VS项目提交至SVN时,怎样忽略bin和obj目录中的文件

    方法一: 通过设置SVN的Global ignore pattern值. 在设置了全局排除obj bin文件夹之后,需commit提交该项目,以使svn服务器应用该排除忽略 方法二: 具体实现 在解决 ...

  9. [bzoj1706]奶牛接力跑 题解 (矩阵快速幂(或者叫倍增Floyd?))

    Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...

  10. 关于Python中函数的使用

    函数的概念 # 概念 # 写了一段代码实现了某个小功能; 然后把这些代码集中到一块, 起一个名字; 下一次就可以根据这个名字再次使用这个代码块, 这就是函数 # 作用 # 方便代码的重用 # 分解任务 ...