集合类
数组和集合类的异同
- 数组:对于一个数组而言,一旦产生其长度就不能再被修改。
- 集合类:其容量可以动态扩展,当不确定需要的容量大小的时候可以使用集合。
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.day15
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.day15
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);
}
}
}