对Collection接口常用方法的训练
public class Main {
public static void main(String[] args) {
//Collection接口详解
//常用的方法
/*boolean add(E e)
* 确保此集合包含指定的元素(可选操作)
* */
/*
* int size()
* 返回此集合中的元素数
* */
/*
* void clear()
* 从此集合中删除所有元素,(可选操作)
*
* Object[] toArray()
* 返回一个包含此集合中所有元素的数组
*
* boolean isEmpty()
* 如果此集合不包含元素,则返回true
*
* Itertor iterator()
* 返回此集合中的元素的迭代器
* 通过迭代器中方法完成集合的迭代(遍历)
* */
class Customer{
String name;
int age;
//构造方法,初始化变量
Customer(String name,int age){
this.name = name;
this.age = age;
}
//toString返回字符串
public String toString(){
return "Customer[name = "+name+"age="+age+"]";
}
}
//1.创建集合
Collection c = new ArrayList();
//2.添加元素
c.add(1);
c.add(new Integer(100));
Object o = new Object();
c.add(o);//Collection集合只能单个存储元素
Customer cust = new Customer("张三",20);
c.add(cust);
//3.将集合转换成Object类型数组
Object[] objs = c.toArray();
//遍历数组
for(int i=0;i< objs.length;i++){
System.out.println(objs[i]);
}
//4.获取元素的个数
System.out.println(c.size());//4
System.out.println(c.isEmpty());//FALSE
//5.清空元素
c.clear();
System.out.println(c.size());//0
System.out.println(c.isEmpty());//TRUE
}
}
迭代器的使用
public class Main {
public static void main(String[] args) {
//创建对象
Collection<Comparable> c = new LinkedList<Comparable>();
//添加元素
c.add(10);
c.add(3.14);
c.add(true);
//迭代元素
//1.获取迭代对象
Iterator<Comparable> it = c.iterator();
System.out.println(it);
/*
* java.util.AbstractList$Itr是ArrayList集合所依赖的迭代器
* java.util.LinkedList$ListItr是ListedList集合所依赖的迭代器
* Itr、ListItr是内部类
* 迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的”迭代器对象“
* */
//2.遍历集合调用Collection内部方法
while(it.hasNext()){
Object element = it.next();
System.out.println(element);
}
/*
* boolean b = it.hasNext();判断是否有更多的元素
* Object element = it.next();将迭代器下移一位,并且取出指向的元素
* 原则:it.next()之前必须先调用it.hasNext()方法,防止出现空指针异常
* */
/*
* for(Iterator<Comparable> it1 = c.iterator();it.hasNext();){
* Object element1 = it.next();
* System.out.println(element1);
* }
* */
}
}
contains和remove的用法,但是有一个和题目不一样,remove(i2)返回的是false
package web;
import java.util.*;
public class Main {
public static void main(String[] args) {
/*boolean contains(Object o)
如果此集合包含指定的元素,则返回 true 。
boolean remove(Object o)
从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
存储在集合中的元素应该去重写equals方法*/
//创建集合
Collection c = new ArrayList();
//创建Integer类型的对象
Integer i1 = new Integer(10);
//添加对象到集合中
c.add(i1);
//判断集合中是否包含对象i1
System.out.println(c.contains(i1));//true
//再创建一个Integer对象
Integer i2 = new Integer(10);
//删除
c.remove(i2);
System.out.println(c.size());//0
//判断集合中是否包含对象i2
System.out.println(c.contains(i2));//true
//实际上这里返回的是false
//这就涉及到之前学的整型常量池,所以i1就是i2
//并且contains方法底层调用的是equals方法
//创建Manager对象
Manager m1 = new Manager(10,"张三");
// m1.setAge(18);
// m1.setName("张三");
//添加对象
c.add(m1);
//判断集合中是否存在对象m1
System.out.println(c.contains(m1));//true
//再添加一个manager对象
Manager m2 = new Manager(10,"张三");
// m2.setAge(18);
// m2.setName("张三");
//判断集合中是否存在对象m2
System.out.println(c.contains(m2));//true
//删除
c.remove(m2);
System.out.println(c.size());//0
//重写equals方法之前
//System.out.println(c.contains(m2));false
//重写equals方法之后
//System.out.println(c.contains(m2));false
}
}
class Manager{
int age;
String name;
Manager(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;
}
//重写equals方法
public boolean equals(Object o){
if(this == o) return true;
if (o instanceof Manager){
Manager m = (Manager) o;
if (m.age == this.age && m.name.equals(this.name)){
return true;
}
}
return false;
}
}
1.迭代器的remove方法
2.集合本身的remove方法
注意:使用集合本身的remove方法运行会报错,代码没有错,查了资料是什么空指针问题,看不懂
package web;
import java.util.*;
public class Main {
public static void main(String[] args) {
//创建一个集合
Collection c = new ArrayList();
//添加元素
c.add(1);
c.add(2);
c.add(3);
//获取迭代器遍历
Iterator it = c.iterator();
while (it.hasNext()) {
//推荐使用迭代器自身的remove方法
it.next();
//删除
it.remove();
/*
* 使用集合本身的remove方法删除
*
* Object element = it.next();
*
* //删除
* c.remove(element);
*
* 这样方式需要在每一次删除后重新获取新的迭代器
*
* */
}
System.out.println(c.size());//0
}
}