Collection集合及其常用方法

当需要在Java程序中记录多个类型不同的对象数据时,则准备⼀个集合。 集合中只能放对象,基本数据类型有自动装箱功能

集合的框架结构

在这里插入图片描述

  • Java中集合框架顶层框架是:java.util.Collection集合 和java.util.Map集合。
  • 其中Collection集合中存取元素的基本单位是:单个元素。
  • 其中Map集合中存取元素的基本单位是:单对元素。

java.util.Collection接⼝是List接⼝、Queue接⼝
以及Set接⼝的⽗接⼝,因此该接⼝⾥定义的⽅法
既可⽤于操作List集合,也可⽤于操作Queue集合
和Set集合。

常用的方法:

boolean add(E e)//向集合中添加对象,添加成功是true,失败时false

Collection collection = new ArrayList();//Collection是接口,不能实例化,所以使用子类实例化
collection.add(12);//自动装箱
collection.add("sdfs");//常量池
collection.add(new StudentTest("张三",18));
System.out.println(collection);
//使用集合中元素来调用对应的toString方法,[12, sdfs, StudentTest{name='张三', age=18}]

boolean addAll(Collection c)//将c集合中的元素一个个放到存在的集合中
boolean add(E c)//将c看作一个对象放到存在的集合中

Collection collection = new ArrayList();
//只能放对象
collection.add(1);//自动装箱池
collection.add(1.2);
collection.add("hahaha");//常量池
System.out.println(collection);

Collection collection1 = new ArrayList();
collection1.add(100);
collection1.add(new Student("张三",18));

collection.addAll(collection1);//[1, 1.2, hahaha, 100, Student{name='张三', age=18}]
System.out.println(collection);
collection.add(collection1);
System.out.println(collection);//[1, 1.2, hahaha, [100, Student{name='张三', age=18}]]

Collection collection2 = new ArrayList();
collection2.add(2);
collection2.add("two");
collection.add(collection2);
System.out.println(collection);//[1, 1.2, hahaha, 100, Student{name='张三', age=18}, [2, two]]

boolean contains(Object o)//判断是否包含指定对象

boolean flag = collection.contains(1.2);
System.out.println(flag);//true

//contains底层调用equals方法,调用参数对象的equals方法
//由于Student的equals方法没有重写,所以调用从Object中继承的版本,比较地址
//这两个Student内容虽然相同,但是地址并不相同
// 若要比较内容需要在Student中重写equals方法
flag = collection.contains(new Student("张三",18));//未重写equals方法前,false
System.out.println(flag);
System.out.println(flag);//重写后比较内容,true

boolean containsAll(Collection<?> c);//判断是否包含参数指定的所有对象

Collection collection3 = new ArrayList();
collection3.add(1);//[1]
flag = collection.containsAll(collection3);
System.out.println(flag);//true
//只要collection中包含collection3中所有的元素,就返回true,还是调用equals方法
collection3.add(8);//[1,8]
flag = collection.containsAll(collection3);
System.out.println(flag);//false
-----------------------------------------------------------
System.out.println("collection:"+collection);//collection:[1, 1.2, hahaha, 100, Student{name='张三', age=18}, 2, two]
System.out.println("collection2:"+collection2);//collection2:[2, two]

flag = collection.contains(collection2);//collection是否包含[2,two]这个对象,false
System.out.println(flag);
flag = collection.containsAll(collection2);//collection是否包含2,two,true
System.out.println(flag);

boolean retainAll(Collection<?> c);//保留当前集合中存在且参数集合中存在的所有对象,就是求两个集合的交集然后覆盖集合中原有的内容
注:当调用方法的集合发生改变时返回true,未发生改变返回false

System.out.println(collection2);//[2,two]
System.out.println(collection3);//[1,8]
//一个集合包含本身,所以未发生改变,返回false
flag = collection2.retainAll(collection2);
System.out.println(collection2);//[2,two]
System.out.println(flag);//false
//这两个集合没有交集,所以collection2变为空集,发生了改变,返回true
flag = collection2.retainAll(collection3);
System.out.println(collection2);//[]
System.out.println(flag);//true

boolean remove(Object o);//从集合中删除对象,调用方法的对象发生改变则返回true,未发生改变返回false
boolean removeAll(Collection<?> c)//从集合中删除指定集合中的所有对象

System.out.println(collection);//[1, 1.2, hahaha, 100, Student{name='张三', age=18}, 2, two]
System.out.println(collection2);//[2, two]

//调用equals比较内容是否相同,注意equals是否重写
flag = collection.remove(new Student("张三",18));
System.out.println(flag);//对比内容删除
//调用方法的集合发生改变则返回true
//未发生改变,返回false
flag = collection.remove(collection2);
System.out.println(flag);//false

flag = collection.removeAll(collection2);//删除2,two

void clear();//清空集合
int size();//返回集合中元素个数
boolean isEmpty();//判断是否为空

System.out.println(collection.isEmpty());//不为空,false
collection.clear();
System.out.println(collection);//[]
System.out.println(collection.isEmpty());//为空,true

boolean equals(Object o);//判断是否相等

Collection collection4 = new ArrayList();
collection4.add(2);
collection4.add("two");//[2,two]
System.out.println(collection2.equals(collection4));//相同返回true

Object[] toArray();//将集合转换为数组

Object[] objects = collection.toArray();
for(Object e:objects){
    System.out.print(e + " ");
}//1 1.2 hahaha 100 Student{name='张三', age=18} 2 two 

Iterator接口(重点)

java.util.Iterator接⼝主要⽤于描述迭代器对象,可以遍历Collection集合中的所有元素。
java.util.Collection接⼝继承Iterator接⼝,因此所有实现Collection接⼝的实现类都可以使⽤该迭代器对象。
boolean hasNext();//判断集合中是否有可以访问的元素(如果next()返回一个元素而不是抛出异常,则返回true)

Iterator iterator2 = collection2.iterator();//创建collection2的迭代器
System.out.println(iterator2.hasNext());//collection开始不为空,返回true
collection2.clear();//清空collection2
System.out.println(iterator2.hasNext());//collection2为空,返回false

E next();//取出一个元素并指向下一个元素
void remove();//删除访问到的最后一个元素

//通过迭代器打印元素
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
    //取出元素并指向下一个元素
    //System.out.print(iterator.next() + " ");
    Object b = iterator.next();
    System.out.print(b + " ");
}//1 1.2 hahaha 100 Student{name='张三', age=18} 2 two 
-------------------------------------------------------------
//上面的iterator已经指向最后一个元素的末尾,所以需要重新赋值
iterator = collection.iterator();
while(iterator.hasNext()){
    Object obj = iterator.next();
    if(obj.equals(1.2)){
        iterator.remove();//删除1.2
    }
}//[1, hahaha, 100, Student{name='张三', age=18}, 2, two]

for each遍历

for (元素类型 变量名 : 数组/集合名称) {

   循环体:
}
int[] arry = {2,1,4,2,7,5,8};
for(int e: a){
    System.out.print(e + " ");
}//2 1 4 2 7 5 8 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值