java集合学习之Collection(1)

java集合类主要由两个接口派生出来:Collection和Map,者两个类是java集合框架的根本接口,其余的集合都是这两个集合的子类,这篇博客主要讲Collection接口及其体系中包含的set,list,queue 等集合。下面依次就这些内容进行讲解。

一.Collection
1.Collection是set,list,queue接口的父接口,Collection中定义的方法对set,list,queue也是适用的。下面的代码示范了Collection的基本操作,从下面的代码中可以看到,集合的操作有针对当个元素和一个集合的,这两种操作的函数名很是类似,只是对于操作对象是集合的,函数名一般加一个All。

package lkl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

public class CollectionTest {

       public static void main(String[] args){
           Collection c = new ArrayList();
           Collection d= new HashSet();

           ///add()方法可以向集合中添加一个元素
           ///addAll()方法可以添加一个集合
           c.add("lkl");
           d.add("test");
           d.add("java");
           c.addAll(d);

           ///isEmpty()方法用来测试集合是否为空
           System.out.println("集合是否为空?"+c.isEmpty());

           ///remove()可以将一个元素从集合中移除
          /// removeAll可以将某个集合的全部元素从当前集合移除
           c.remove("lkl");
           c.remove(d);
           System.out.println("集合是否为空?"+c.isEmpty());

           c.add("lkl");
           c.add(d);

           ///contains()方法可以用来判断集合是否包含某个元素
           ///containsAll可以用来判断集合是否包含另一个集合中所有的元素
           System.out.println("集合c是否包含“lkl”?"+c.contains("lkl"));
           System.out.println("集合c是否d中的所有元素?"+c.containsAll(d));

           ///retainAll()方法求当前集合和传入集合的交集
           c.retainAll(d);
           System.out.println(c);

           c.add("lkl");

           ///size()方法返回集合中元素的个数
          System.out.println("集合c中的元素个数为:"+c.size());

        /*  ///toArray将集合转换成一个数组,集合元素成为数组元素
          String[] str =(String[])c.toArray();*/

          ///clear()将集合清空
          c.clear();
          System.out.println("集合是否为空?"+c.isEmpty());
       }
}

2.Collection集合的遍历
我们一般使用Iterator来遍历集合。Iterator也是java集合框架的成员,其主要用于遍历Collection集合;它提供了以下三个方法:
bool hasNext():如果集合的元素还没被遍历玩,则返回true
Object next(): 返回集合中的下一个元素
void remove(): 删除集合里上次next()方法返回的元素
有三个需要注意的地方:
1.从集合中返回的元素是Object类型的,所以我们需要手动进行类型转换。
2.每次返回的是集合中元素的值而不是元素本身,所以我们不能通过改变返回的值而改变集合中元素本身。
3.我们不能在迭代访问时改变集合中元素(但可以调用Iterator的remove方法),否则会引发异常。
下面的代码示范了如何通过迭代器遍历集合中元素:

package lkl;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class IteratorTest {

    public static void main(String[] args){

        Collection c =new HashSet();
        c.add("java");
        c.add("c");
        c.add("c++");
        c.add("shell");

        ///声明一个Collection的迭代器
        Iterator it = c.iterator();
        while(it.hasNext()){
            ///从集合中取出的元素都是Object类型的,需要进行类型转换
            String str = (String) it.next();
            if(str=="shell"){
                ///我们可以通过调用iterator的remove方法来删除
                ///上次迭代返回的元素,但是不能通过别的方法来改变集合中的元素
                it.remove();
                ///下面这句代码会引发异常
                ///c.add("python");
            }
            str="lkl";   ///我们不能通过改变迭代器的返回值而改变集合中的元素
        }
        System.out.println(c);
    }
}

java5后还可以通过foreach循环来迭代访问集合中的元素(就和访问数组中元素一样),使用foreach方法访问时注意事项同上面的Iterator方法,下面的代码示范了这种方法:

package lkl;

import java.util.ArrayList;
import java.util.Collection;

public class ForeachTest {

    public static void main(String[] args){

        Collection c =new ArrayList();
        c.add("java");
        c.add("c");
        c.add("c++");
        c.add("shell");
        for(Object cc : c){
            String str = (String) cc;
            System.out.println(str);
        }
    }
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。