集合类
数组和集合类的异同
数组:对于一个数组而言,一旦产生其长度就不能再被修改。 集合类:其容量可以动态扩展,当不确定需要的容量大小的时候可以使用集合。
Collection中的API(Application Program Interface)应用程序接口
针对单个元素
boolean add(E e) boolean remove (Object o) void clear() boolean isEmpty() int size()
针对多个元素
boolean addAll(Collection c) boolean removeAll(Collection c) boolean containAll(Collection c) boolean retainAll(Collection c)
当在当前类中找不到,该对象中存在的方法的时候,去它的父类中找
Collection中API的使用
package bamzhy.day 15
import java.util .ArrayList
import java.util .Collection
public class CollectionDemo1 {
public static void main(String[] args) {
Collection collection=new ArrayList()
collection.add ("1" )
collection.add ("1" )
collection.add ("3" )
collection.add ("4" )
//该api只实现与给定值相等的第一个元素
collection.remove ("1" )
System.out .println (collection)
//boolean contains(Object o) 判断给定元素是否在当前集合中
System.out .println ("contain 1:" +collection.contains ("1" ))
System.out .println ("contain 1:" +collection.contains ("5" ))
//void clear()清空当前集合中的元素
collection.clear ()
System.out .println ("after clear =" +collection)
Collection collection2=new ArrayList()
collection2.add ("1" )
collection2.add ("0" )
collection2.add ("5" )
collection2.add ("6" )
//boolean addAll(Collection c) 将集合c中的元素全部加进调用接口的对象,连在后面
collection.addAll (collection2)
System.out .println (collection)
//boolean removeAll(Collection c)将c中与调用接口的对象相同的值全部删除
collection.removeAll (collection2)
System.out .println ("after removeAll =" +collection)
//boolean containAll(Collection c)判断列表中是否包含c的所有元素。
System.out .println ("contains all:" +collection.containsAll (collection2))
//boolean retainAll(Collection c)移除此 collection 中未包含在指定 collection 中的所有元素,表示集合中的元素在发生交集操作之后是否会发生改变
System.out .println ("result =" +collection.retainAll (collection2))
System.out .println (collection)
//改变了就返回true
}
}
集合遍历的两种方式
Object[] toArray()
Iterator iterator():迭代器是集合专用遍历方式
boolean hasNext():如果仍有元素可以迭代,则返回true E next():返回迭代的下一个元素 void remove():从迭代器指向的collection中移除迭代器返回的最后一个元素
package bamzhy.day 15
import java.util .ArrayList
import java.util .Collection
import java.util .Iterator
public class CollectionDemo2 {
public static void main(String[] args) {
Collection collection=new ArrayList()
collection.add ("100" )
collection.add ("101" )
collection.add ("102" )
collection.add ("103" )
//Object[] toArray() 是旧式的获得对象数组的方法;调用格式为 Object []a=collecton.toArray () //前面类型必须为Object[]且不能被强制转换
//需要在遍历Object a[]时,再强制转换a[n]的类型。由于编译器在语法上无法检测到类型错误,容易出现类型使用不当。
//在java5引入泛型之前,这是唯一的获得对象数组的方法
Object[] objects=collection.toArray ()
traverse(objects)
//第二种方式,使用迭代器Iterator,迭代器依赖于集合而存在
Iterator iterator = collection.iterator ()
System.out .println (iterator.next ())
System.out .println (iterator.next ())
System.out .println (iterator.next ())
System.out .println (iterator.next ())
//java.util .NoSuchElementException 说明没有元素可以迭代。
//System.out .println (iterator.next ())
while(iterator.hasNext ()){
Object next1=iterator.next ()
if(next1 instanceof String){
String next=(String)next1
System.out .println ("while: " +next+" " +next.length ())
}
}
iterator.remove ()
System.out .println (collection)
}
//数组长度:length;字符串长度:length()
public static void traverse(Object[] target){
for (int i = 0
System.out .println (target[i]+" " )
if(target[i]instanceof String){
String s=(String)target[i]
System.out .println ("length = " +s.length ()+" " )
}
}
}
}
迭代器的简单应用
package bamzhy.day15;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo3 {
public static void main (String[] args) {
Student zs = new Student("zs" , 18 );
Student lisi = new Student("lisi" , 18 );
Student wangwu = new Student("wangwu" , 18 );
Student zhaoliu = new Student("zhaoliu" , 18 );
Collection col=new ArrayList();
col.add(zs);
col.add(lisi);
col.add(wangwu);
col.add(zhaoliu);
Iterator iterator = col.iterator();
while (iterator.hasNext()){
Object nt=iterator.next();
System.out.println(nt);
}
}
}