集合与迭代器
boolean add(Object element); 向集合中添加元素
c.add(500); //自动装箱
c.add(62.39); //自动装箱
c.add(false); //自动装箱
int size(); 获取集合中元素的个数
void clear(); 清空集合
boolean isEmpty(); 判断集合中是否有元素
Object[] toArray(); 将集合转化成数组
Iterator iterator(); 获取集合所依赖的迭代器对象
Iterator diedai = c.iterator(); //获取迭代器对象,迭代器面向接口编程 ,diedai是引用,保存内存地址,指向堆中“迭代器对象”
boolean contains(Object o); 判断集合中是否包含某个元素
Collection c = new ArrayList(); //创建集合
Integer i1 = new Integer(10); //创建Integer类型的对象
c.add(i1); //添加元素
System.out.println(c.contains(i1)); //true 集合中包含i1
关于Object中的equals方法的重写问题
import java.util.ArrayList;
public class testthree {
public static void main(String[] args) {
Collection c = new ArrayList(); //创建集合
Integer i1 = new Integer(10); //创建Integer类型的对象
c.add(i1); //添加元素
System.out.println(c.contains(i1)); //true 集合中包含i1
Manager m1 = new Manager(100,"JACK"); //创建一个经理
c.add(m1); //将经理添加入集合中
System.out.println(c.contains(m1)); //true 集合中包含经理m1
Manager m2 = new Manager(100,"JACK"); //创建一个属性相同的经理
System.out.println(c.contains(m2)); //false 如果不重写Object中的equals方法,则false,因为比较得是内存地址,他们内存地址不同
//重写equals方法后,比较内容,则true
}
}
class Manager{
int no;
String name;
public Manager(int no,String name) {
this.no = no;
this.name = name;
}
public boolean equals(Object o) { //重写equals方法 Object中的equals比较的是内存地址
//如果不重写此方法,则上面集合中是否包含m2,返回false
if(this == o) return true;
if(o instanceof Manager) {
Manager m = (Manager)o;
if(m.no == this.no && m.name.equals(this.name)) {
return true;
}
}
return false;
}
}
boolean remove(Object o); 删除集合中某个元素
Collection c = new ArrayList(); //创建集合
Integer i1 = new Integer(10); // //创建Integer类型的对象
c.add(i1);
Integer i2 = new Integer(10);
c.remove(i2); //移除
System.out.println(c.size()); //输出0
java.util.LinkedList$ListItr 类是LinkeList 集合所依赖的迭代器
java.util.AbstractList$Itr 类是ArrayList 集合所依赖的迭代器
迭代器的遍历,迭代。在调用iterator.next();方法之前必须调用iterator.hasNext();
boolean b = it.hasNext();
Object o = it.next();
所有集合依赖的迭代器都实现了java.util.Iterator接口
遍历中集合的删除
1.迭代器的remove方法 //通过迭代器删除,可以继续
while(diedai.hasNext()) { //遍历,迭代
diedai.next();
diedai.remove();
}
2.集合自身带的remove方法 //使用集合自带方法删除,集合依赖的迭代器需要获取新的迭代器继续进行----(不建议使用)
while(diedai.hasNext()) { //遍历,迭代
Object element = diedai.next();
c.remove(element);
}~~
for循环的遍历
for(Iterator diedai = c.iterator();diedai.hasNext();) {
Object d = diedai.next();
System.out.println(d);
}