集合的体系结构:
由于不同的数据结构(数据的组织,存储方式),所以java为我们提供了不同的集合。但是不同的集合他们的功能却都是相似的,不断地向上提取,将共性抽取出来,这就是集合的体系结构形成的原因。
java中的集合类型都是对java.util包中对Collection接口的继承。
Collection中的常用功能(接口)
Collection是接口,不能实例化,即不能直接new Collection,所以这时便用到了多态,创建对象的时候可以写成Collection c = new ArrayList();父类的引用指向子类对象。
<1>.boolean add (E e):验证是否添加成功
Collection c = new ArrayList();
System.out.println(c.add("hello"));
//true
<2>.void clear():清空集合
c.clear( );
<3>.boolean contains(Object o ):判断集合中是否包含有指定元素
<4>.boolean isEmpty( ):判断是否为空,不为空返回false,为空返回true
<5>.boolean remove(Object o):删除元素
<6>.int size( ):返回集合中元素个数
<7>.Object[ ] toArray():将集合转换成一个Object类型的数组
Object [ ] obj = c.toArray( );
集合的遍历方式:
a.toArray(),可以把集合转换成数组,然后遍历数组即可。
b.iterator(),可以返回一个迭代器对象,我们可以通过对象来迭代集合
Interator:可以用于遍历集合
E next():返回下一个元素
例:创建集合对象 Collection c = new ArrayList( ) ;
c.add("hello");
c.add("world");
获取迭代器对象
Interator it = c.iterator( ) ;
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
输出结果:hello,world,错误
注意:使用next方法获取一个元素,如果没有元素可以获取,则出现一个异常,那么就要判断是否有元素可以获取,boolean hasNext()就很好的解决了这个问题。如下例:
将代码改写为 while(it.hasNext()){
System.out.println(in.next);
}
案例:
需求:判断集合中是否包含元素java,如果有则添加元素Android
分析:第一个方法就是使用Collection中的contains方法来判断
第二个方法就是使用迭代器遍历集合并与java进行比较,如果有则添加。
迭代器是依赖与集合的,相当于集合的一个副本,当迭代器操作的时候,如果发现和集合不一样,则会抛出异常,解决方案:在使用迭代器进行遍历的时候,使用迭代器本身对象来修改。
迭代器是没有添加方法的,去子类ListInterator中有添加方法,但是Collection获取不到ListInterator对象,但是List可以,所以
//创建List集合对象
List c= new ArrayList( );
c.add("hello");
c.add("world");
c.add("java");
//获取ListInterator对象
ListInterator lit = c.ListInterator( );
while(lit.hasNext()){
String s = (String)lit.next();
if(s.equals("java")){
lit.add("Android");
}
}
System.out.println(c);