集合类,Collection,List

一,集合的继承体系图
这里写图片描述
二.Collection(根接口)
(1)创建集合对象
Collection c=new ArrayList();
(2)给集合中添加元素
c.add(“javaSE”);
(3)将集合转换为数组
Object[] objs = c.toArray() ;
(4)判断集合中是否包括指定元素
c.contains(“javaSE”);
(5)判断集合是否为空
c.isEmpty();
(6)获取集合元素数
c.size();
(7)删除
Boolean removeAll(Collection deleteC);
c.removeAll(c2);//将集合C2中的所有元素从集合c中删除。
(8)包含
boolean containsAll(Collection c):判断一个集合中是否包含另一个集合的所有元素

package collection;

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

public class Collection1 {
    public static void main(String[] args) {
        //创建两个Collection集合对象
        Collection c1 = new ArrayList() ;

        Collection c2 = new ArrayList() ;

        //分别给c1,c2集合添加元素
        c1.add("abc1") ;
        c1.add("abc2") ;
        c1.add("abc3") ;
        c1.add("abc4") ;

        /*c2.add("abc1") ;
        c2.add("abc2") ;
        c2.add("abc3") ;*/
        c2.add("abc4") ;
//      c2.add("abc5") ;
//      c2.add("abc6") ;
//      c2.add("abc7") ;
        System.out.println("c1:"+c1);
        System.out.println("c2:"+c2);


        //boolean addAll(Collection c):添加一个集合中的所有元素
//      System.out.println("addAll:"+c1.addAll(c2));

        //boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
        //删除一个算是删除
//      System.out.println("removeAll:"+c1.removeAll(c2));
//      boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有
//      System.out.println("containsAll:"+c1.containsAll(c2));//包含所有算是包含

        //boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?
        /**
         * 面试题:
         * A集合对B集合取交集,那么交集的元素去A集合里面了,并且返回值boolean表达的意识是A集合中的元素是否发生变化,如果发生变化,就返回true;否则,false
         */
        System.out.println("retianAll:"+c1.retainAll(c2));

        //输出每个集合中的元素
        System.out.println("c1:"+c1);
        System.out.println("c2:"+c2);   
        /**
         * 运行结果: 
         * c1:[abc1, abc2, abc3, abc4] 
         * c2:[abc4] 
         * retianAll:true 
         * c1:[abc4]
         * c2:[abc4]
         */
    }
}

(9)将集合转换成数组:Object[] toArray()
Object[] objs=c.toArray();
String s=(String)obj[i];//获取集合元素
通过这种方式可以遍历集合中的每个元素

(10)利用集合的专有遍历方式:使用迭代器进行遍历
Iterator iterator():迭代器
* Iterator:迭代器:接口
* 成员方法:Object next()返回迭代的下一个元素:获取功能
* boolean hasNext():判断一个集合中是否有下一个可以迭代的元素:判断功能
*

package org.westos.collection_02;

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

/**
 *      集合的专有遍历方式:使用集合自己本身迭代功能遍历集合中的元素
 *          Iterator iterator():迭代器
 *              Iterator:迭代器:接口
 *                  成员方法:Object next()返回迭代的下一个元素:获取功能
 *                        boolean hasNext():判断一个集合中是否有下一个可以迭代的元素:判断功能
 * 
 * 需求:使用集合存储字符串类型的元素并遍历
 * @author Apple
 */
public class CollectionDemo {

    public static void main(String[] args) {
        //创建集合对象
        Collection c = new ArrayList() ;//ArrayList是List集合的子实现类(存储和取出一致的)
        //给集合中添加元素
        c.add("hello") ;
        c.add("world") ;
        c.add("java") ;
        c.add("java") ;
        c.add("java") ;
        c.add("java") ;

        //获取迭代器对象
        //Iterator iterator():迭代器
        Iterator it = c.iterator() ;//底层使用ArrayList中的匿名内部类的形式:接口多态的形式
        //获取元素:Object next() ;
        /*Object obj = it.next() ;
        System.out.println(obj);*/
//      System.out.println(it.next());
//      System.out.println(it.next());
//      System.out.println(it.next());
//      //java.util.NoSuchElementException:没有这样的元素异常!
//      System.out.println(it.next());

        //由于当前集合中的元素获取完了,没有元素,而还要去调用next()方法,那么就出现问题,
        //假设,给当前加上一个判断就可以防止出现异常!

        //判断
        while(it.hasNext()){//有,就获取需要被遍历的元素
//          System.out.println(it.next());//获取字符串的内容
            //获取字符串的同时,还要获取字符串长度
            //Object obj = it.next() ;
            //向下转型
            String s = (String)it.next() ;
            System.out.println(s+"----"+s.length());
        }
    }
}

三,List(extends Collection)

package list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * List集合是一个有序的集合(存储元素和取出元素是一致的!)
 *      该集合中的元素是可以重复的
 * List集合的特有功能:
 *      添加功能:
 *          void add(int index, Object element)在列表的指定位置插入指定元素
 *      删除功能:
 *          Object remove(int index)移除列表中指定位置的元素,返回被删除的元素
 *      获取功能:
 *          ListIterator listIterator():列表迭代器:List集合的专有遍历方式
 *          Object get(int index)返回列表中指定位置的元素。
 *      替换
 *           set(int index,Object element)用指定元素替换列表中指定位置的元素
 * 
 *  List集合的遍历方式
 *          1)toArray()
 *          2)Collection集合中的Iterator iterator

 * @author Apple
 */
public class List1Demo {

    public static void main(String[] args) {
        //创建List集合对象
        List list = new ArrayList() ;

        //添加一些元素
        list.add("hello") ;
        list.add("world") ;
        list.add("java") ;

        //void add(int index, Object element)在列表的指定位置插入指定元素,在指定位置前面插入一个新的元素
//      list.add(1, "javaweb") ;

        //Object remove(int index)移除列表中指定位置的元素,返回被删除的元素
        //IndexOutOfBoundsException:角标越界了

//      System.out.println("remove:"+list.remove(3));
        System.out.println("list"+list);

        System.out.println("remove:"+list.remove(2));
         System.out.println("list"+list);
        // set(int index,Object element)用指定元素替换列表中指定位置的元素
//      System.out.println("set:"+list.set(1, "JavaEE")) ;


        //使用普通for的方法去遍历list集合,使用size()和get()相结合
        for(int  x = 0 ; x < list.size(); x ++){
//          Object object = list.get(x) ;
            //需求:获取字符串内容同时,获取字符串长度
            String s = (String)list.get(x) ;
            System.out.println(s+"----"+s.length());
        }

        System.out.println("-------------------------");

        //获取迭代器对象
        Iterator it = list.iterator() ;
        while(it.hasNext()){
            String s = (String) it.next() ;
            System.out.println(s+"----"+s.length());
        }
        System.out.println("get:"+list.get(1)) ;
//      System.out.println("get:"+list.get(11)) ;

        System.out.println("list"+list);
        /**
         * 运行结果: 
         * list[hello, world, java] 
         * remove:java 
         * list[hello, world] 
         * hello----5
         * world----5 
         * ------------------------- 
         * hello----5
         * world----5
         * get:world
         * list[hello, world]
         * 
         */
    }
}
package org.westos_02;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/**
 * List集合的列表迭代器
 *      ListIterator listIterator()
 *      列表迭代器接口中有以下几个方法:
 *          boolean hasNext():判断是否有下一个可以迭代的元素(正向遍历)
 *          Object next():如果有可以遍历的元素,就获取这个元素
 * 
 *          boolean hasPrevious():判断是否有上一个可以迭代的元素(逆向遍历)
 *          Object  previous():如果有上一个可以迭代的元素,就获取上一个元素
 *      注意:
 *          要使用逆向遍历,前提必须有正向遍历存在,直接使用逆向遍历,没有意义!
 * @author Apple
 */
public class ListDemo3 {
    public static void main(String[] args) {

        //创建集合对象
        List list = new ArrayList() ;

        //给集合中添加元素
        list.add("hello") ;
        list.add("world") ;
        list.add("java") ;

        //获取列表迭代器
        ListIterator it = list.listIterator() ;
        while(it.hasNext()){
            String s = (String)it.next();
            System.out.println(s);
        }

        System.out.println("-----------------------");
        //boolean hasPrevious():判断是否有上一个可以迭代的元素(逆向遍历)
         //Object  previous():如果有上一个可以迭代的元素,就获取上一个元素
        while(it.hasPrevious()){
            String s = (String)it.previous() ;
            System.out.println(s);
        }
    }
}
package org.westos_02;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * 问题?
 *      我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,
 *          如果有,我就添加一个"javaee"元素,请写代码实现
 *  并发(同一个时间点),并行(同一个时间段)
 *java.util.ConcurrentModificationException:并发修改异常:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
 *  原因:当前我们用迭代器去遍历元素,使用集合添加的元素,对于迭代器不知道集合添加了这个元素,所以会发生这个异常
 *  描述:使用迭代器去遍历集合,是不能直接集合添加元素!
 *  解决方案:
 *          1)使用迭代器遍历集合,使用迭代器添加元素
 *          2)使用集合遍历,使用集合添加元素
 * @author Apple
 */
public class ListTest {

    public static void main(String[] args) {
        //创建List集合对象
        List list = new ArrayList() ;

        //给集合中添加元素
        list.add("hello") ;
        list.add("world") ;
        list.add("java") ;

//      //获取迭代器
//      Iterator it = list.iterator() ;
//      //遍历
//      while(it.hasNext()){
//          String s = (String)it.next() ;
//          //判断
//          if("world".equals(s)){
//              //添加一个元素
//              list.add("javaee") ;
//          }
//      }

        //方案1:1)使用迭代器遍历集合,使用迭代器添加元素
//      Iterator it = list.iterator() ; 该迭代器中没有添加功能,List集合中的专有遍历方式:列表迭代器有添加功能:add(Object obj)
        //将指定的元素插入到列表中(指定元素后面插入)
        //ListIterator it = list.listIterator() ;
//      while(it.hasNext()){
//          String s = (String) it.next() ;
//          
//          //判断
//          if("world".equals(s)){
//              //使用迭代器添加
//              it.add("javaee") ;
//          }
//      }

        //方案2:2)使用集合遍历(普通for循环size()和get()相结合),使用集合添加元素
        for(int x = 0 ; x <list.size() ; x ++){
            String s = (String) list.get(x) ;
            //判断
            if("world".equals(s)){
                //集合添加
                list.add("javaee") ;//在末尾添加元素
            }
        }

        //输出集合
        System.out.println("list:"+list);
    }
}
posted @ 2017-11-08 01:07  快乐的内啡肽呀  阅读(30)  评论(0)    收藏  举报