Java集合框架Collection
collection接口的实现、使用
类1:person(没有遵循变量定义规范)
class Person {
String name;
public Person(String name){
this.name = name;
}
@Override
public boolean equals(Object obj) {
if(obj == null || getClass()!=obj.getClass()){
return false;
}
Person person = (Person) obj;
return name.equals(person.name);
}
}
package org.example;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest {
@Test
public void CollectionTest(){
Collection A = new ArrayList();
A.add(new Person("121"));
/**
* 1.contains:集合A是否包含某一个元素
* 比较会从集合中第一个元素开始往后查,直到找到或者遍历到最后一个元素为止
*/
A.contains(new Person("121"));
/**
* 2.containsAll:集合是否包含另一个集合的全部元素
*
*/
Collection B = new ArrayList();
B.add(new Person("121"));
B.add(new Person("122"));
A.containsAll(B);
/**
* 3.remove:集合A中去掉某个元素
* 比较的时候也是调用的equals方法
* 当有多个相同元素的时候,只删一个,找到第一个,删除掉就返回,不会继续遍历
*/
A.remove(new Person("121"));
/**
* 4.removeAll:集合A中去掉和集合B中元素相同的元素
* 比较的时候也是调用的equals方法
* 会遍历整个长度的集合
*/
A.removeAll(B);
/**
* 5.retainAll:集合A中去掉和集合B中元素不同(不相同)的元素;保留交集
* 比较的时候也是调用的equals方法
*/
A.retainAll(B);
/**
* 6.size:返回集合A中元素的数量
* 集合初始化之后,size()返回的空集合就是0,涉及null的集合,返回空指针异常
*/
System.out.println(A.size());
/**
* 7.isEmpty:集合A是否为空
* ArrayList类重写Collection类:默认底层就是用的集合的size是否为0
* 实际使用时根据需求,在初始化集合的时候可以匿名重写该方法,或者新建类继承ArrayList重写类方法
*/
System.out.println(A.isEmpty());
/**
* 8.clear:清空集合A
*/
A.clear();
System.out.println(A.isEmpty());
/**
* 9.toArray():集合转换成数组
* 数组转集合:Arrays.asList(Object obj);
*/
Object obj = A.toArray();
// 括号内只能放对象,如果是基础数据类型,则会被当成是一个对象,转换出来的长度是1
Collection col = Arrays.asList(new String[]{"1", "2", "3"});
/**
* 10.hashCode:集合对象的哈希值
*/
System.out.println(A.hashCode());
/**
* 11.iterator:迭代器,用于遍历集合
*/
Iterator iterator = A.iterator();
while(iterator.hasNext()){
Person person = (Person) iterator.next();
System.out.println(person.name);
}
}
}
Iterator经常用法
@Test
public void testIterator() {
// Iterator 迭代器
// 迭代器是用来遍历集合元素的,而集合是用来存储元素的,迭代器是 Iterator 接口的实现类
// Iterator 接口有 hasNext()、next()、remove() 三种方法
// 示例
// 定义一个集合
Collection<Integer> collection = new ArrayList<>();
// 向集合中添加元素
collection.add(1);
collection.add(2);
collection.add(3);
// 获取迭代器对象
Iterator<Integer> iterator = collection.iterator();
System.out.println(iterator.getClass());
// 遍历迭代器
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// jdk 5.0新增foreach(增强for)
// 底层是用的仍然是迭代器,增强for循环的执行过程,是将集合/数组中的元素赋值给临时变量,
// 基础数据类型或基础数据类型的包装类修改临时变量的值,并不会影响集合的值,
// 说白了,传的还是地址,但是常见引用数据类型比如String都被final修饰了
/**
*格式:
* for(要遍历的集合/数组元素的类型 临时变量 : 集合/数组){
* }
*/
for(Integer i : collection){
System.out.println(i);
}
}