单列集合,他有两个重要的接口,List接口和Set接口
List :有索引、存取有序、可重复。Set :无索引、存取无序(linkedHashSet除外)、不重复。
Collection方法:
contains(Object o) :
如果此列表包含指定的元素,则返回 true 。
注意:当需要判断自定义对象是否包含于集合中时,需要在自定义方法中重写equals()方法,contains()方法本质是调用equals()方法进行判断
举例说明:
自定义一个类,并且重写equals方法,在里面添加一句 equals方法已被调用。。。
import java.util.Objects;
public class T {
private int age;
private String name;
public T(int age,String name){
this.age=age;
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
System.out.println("equals方法已被调用。。。");
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
T t = (T) o;
return age == t.age && Objects.equals(name, t.name);
}
@Override
public int hashCode() {
return Objects.hash(age, name);
}
}
定义一个测试类:
import java.util.ArrayList;
import java.util.Collection;
public class Test1 {
public static void main(String[] args) {
Collection c1=new ArrayList();
c1.add(123);
c1.add(321);
c1.add(new String ("引用类型"));
c1.add(new T(19,"净澄"));
System.out.println(c1.contains(new T(19, "净澄")));
}
}
结果:
equals方法已被调用。。。 equals方法已被调用。。。 equals方法已被调用。。。 equals方法已被调用。。。 true Process finished with exit code 0
迭代器(Iterator):分析结果:
为什么判断new T(19, "净澄")是否包含于c1集合时,equals方法已被调用。。。会被执行四次?
因为ArraryList是有序的,所以会先从第一个位置的数据进行判断,上面需要判断的对象是第四个,所以需要判断四次
因此添加自定义类在对象中时,必须要再在自定义类中重写equals方法
Collection接口实现了Iterator接口迭代器中有类模板,类似于指针,遍历完数据后,就指向了最后一个位置集合将集合中的元素值给迭代器,而不是将元素直接给迭代器,因此,在迭代器中不可以进行集合的操作,但是可以用迭代器特有的remove()方法对集合进行操作,就是能够对迭代器外的集合(传入元素值的那个集合) 进行操作
使用迭代器遍历集合:
Iterator iterator=c2.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next()+"t");
}
结果:
123 321 引用类型 collection.T@a5bd2集合对象 . toArray()和数组对象 . asList():
toArray():将集合转换为数组
as.List():将数组转换为集合
toArray():
将集合c2转换为数组arr,然后遍历
Object[] arr =c2.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
as.List():
将数组转换为集合,但是要注意:集合不能存储基本数据类型,所以不能存储int,long等等基本数据类型
Listob=Arrays.asList(new Integer[]{12,65}); Iterator iterator1 =ob.iterator(); while(iterator1.hasNext()){ System.out.println(iterator1.next()); }



