zoukankan      html  css  js  c++  java
  • Java 集合框架

    • 集合类的由来
      对象用于封装特有数据,面向对象的语言会产生很多对象,为了方便操作对象,所以
      首先对对象进行存储,而集合就是用于存储对象的容器.

    • 集合的特点:

      • 用于存储对象的容器
      • 集合的长度是可变的
      • 集合中不可以存储基本数据类型值, 集合是用于存储对象的
    • 集合框架
      集合容器因为内部的数据结构不同,有多种具体容器,不断的向上抽取, 就形成了集合框架.
      框架的顶层就是 Collection 接口, 即定义类集合体系中的共性方法

    • 集合框架的构成及分类

    • Collection 的常见方法
      1. 添加

    boolean add(Object obj); // 添加成功, 返回值为真.否则,为假
    boolean addAll(Collection coll);

        2. 删除,(只有两种表现形式: delete 或者 remove)
    
        ```
    boolean remove(Object obj); //会改变集合的长度
    boolean removeAll(Collection coll); // 将两个集合中的相同元素从调用 removeAll() 的集合中删除
    void clear(); //清空, 将集合中的元素都删掉, 集合还存在
    
    3. 判断
    
    ```
    

    boolean contains(Object obj);
    boolean containsAll(Collection coll);
    boolean isEmpty(); // 判断集合是否有元素

        4. 获取
    
        ```
    int size(); // 获取长度的方法,length 或者 size
    Iterator iterator(); // 迭代器, 取出集合中元素的方式
    
    5. 其他
    
    ```
    

    boolean retainAll(Collection coll); // 取交集, 保留和指定的集合相同的元素, 删除不同的元素
    // 和 removeAll 功能相反
    Object[] toArray(); // 将集合转成数组

    
    ### 迭代器的使用及原理
    
    

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

    coll.add("abc1");
    coll.add("abc2");
    coll.add("abc3");
    coll.add("abc4");
    
    // 使用 Collection 中的 iterator() 方法. 调用集合中的迭代器方法,
    // 是为了获取集合中的迭代器对象
    Iterator it = coll.iterator();
    while(it.hasNext()){
        System.out.println(it.next());
    

    }

    // for 循环结束后, it 从内存中消失, 节约内存
    for(Iterator it = coll.iterator(); it.hasNext(); ){
        System.out.println(it.next());
    

    }
    }

    Iterator 对象必须依赖与具体的容器, 因为每一个容器的数据结构不同, 所以该迭代器对象是在容器中进行
    内部实现的.对于使用容器者而言, 具体的实现不重要,只要通过容器获取到该实现迭代器的对象即可, 也就是
    iterator() 方法.
    
    Iterator 接口就是对所有的 Collection 容器进行元素取出的公共接口.
    
    ![](http://images2017.cnblogs.com/blog/1222878/201709/1222878-20170907100335288-435046699.png)
    
    - Collection 接口的子接口
        - List: 有序(存入和取出的顺序一致), 元素有索引(角标), 元素可以重复
        - Set: 元素不能重复, 无序.
    
    - List 接口
        1. 常见方法
    
        ```
        // 1. 添加
            void add(index, element);
            void add(index, collection);
    
        // 2. 删除
            Object remove(index); // 返回被删除对象
    
        // 3. 修改
            Object set(index, element); // 使用指定元素替换列表中指定位置的元素, 返回被替换对象
    
        // 4. 获取
            Object get(index);
            int indexOf(object);
            int lastIndexOf(object);
            List subList(from, to); // 包含头, 不包含尾
    
    2. List 集合元素取出方式:
    
            public static void main(String[] args){
                List list = new ArrayList();
    
                list.add("abc1");
                list.add("abc2");
                list.add("abc3");
                list.add("abc4");
    
                // 通用取出方式
                Iterator it = list.iterator();
                while(it.hasNext()){
                    System.out.println("next:" + it.next());
            }
                // list 特有取出方式
                for(int i = 0; i<list.size(); i++){
                    System.out.println("get:" + list.get(i));
            }
    
        }
    
    3. 异常情况
    
            public static void main(String[] args){
                List list = new ArrayList();
    
                list.add("abc1");
                list.add("abc2");
                list.add("abc3");
                list.add("abc4");
    
                Iterator it = list.iterator();
                while(it.hasNext()){
    
                    Object obj = it.next(); //出现异常, java.util.ConcurrentModificationException
                                            // 在遍历的过程中, 既有迭代器遍历元素, 又有集合添加元素.
                                            // 集合添加的元素, 迭代器并不知道, 因此出现异常
                    if(obj.equals("abc2"))
                        list.add("abc9");
                    else
                        System.out.println("next:" + obj);
                }
        }
    
            // 解决方案: 使用 Iterator 接口的子接口 ListIterator 来完成, 在迭代过程中, 对元素进行更多的操作
    
            public static void main(String[] args){
                List list = new ArrayList();
    
                list.add("abc1");
                list.add("abc2");
                list.add("abc3");
                list.add("abc4");
    
                ListIterator it = list.listIterator(); // 获取列表迭代器对象
                                                      // 它可以实现在迭代过程中对元素的增删改查
                                                      // 只有 list 集合具备该迭代功能
                while(it.hasNext()){
                    Object obj = it.next();
    
                    if(obj.equals("abc2")){
                        it.add("abc9");
                }
                System.out.println("list:" + list);
            }
        }
    


    _参考资料_ - [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3113337/index_1.html#page=6) - [JDK 1.6 中文文档](http://tool.oschina.net/apidocs/apidoc?api=jdk-zh)
  • 相关阅读:
    一对多
    订单数据模型分析
    一对一查询(2)
    一对一查询
    Statement、PreparedStatemnt、CallableStatement
    getParameter和getAttribute的区别
    SQL基础试题
    Java 泛型(Generics) 综述
    <html>
    oracle视图建主键
  • 原文地址:https://www.cnblogs.com/linkworld/p/7488275.html
Copyright © 2011-2022 走看看