• Java集合入门


    内容:

    1、认识集合

    2、Iterator迭代器

    1、认识集合

    (1)什么是集合

    前面的学习,我们知道数据多了,使用数组存放。而且数组中存放的都是基本类型的数据,并且数组是定长的。

    当在程序中创建的对象比较多的时候,需要对这些对象进行统一的管理和操作,那么首先我们就需要把这些对象

    存储起来。使用数组是可以存放对象的,我们可以定义对象数组来存放,但是数组这个容器存放对象,要对其中的

    对象进行更复杂操作时,数据就显的很麻烦。那怎么办呢?

    Java中给我们提供了另外一类容器,专门用来存放对象,这个容器就是我们要学习的集合。

    (2)集合和数组的区别

    • 数组的长度是固定的。集合的长度是可变的
    • 数组中存储的是同一类型的元素,可以存储基本数据类型值
    • 集合存储的都是对象。而且对象的类型可以不一致

    (3)集合框架的由来

    集合本身是一个工具,它存放在java.util包中。

    JDK最早的1.0版本中。提供的集合容器很少。升级到1.2版,为了更多的需求,出现了集合框架。

    有了更多的容器(为什么提供那么多集合容器呢?)。可以完成不同的需求。

    这些容器怎么区分?区分的方式:每一个容器的数据结构(数据存储一种方式)不一样。 

    例如:水缸和衣柜,饮料瓶等等.

    不同的容器进行不断的向上抽取,最后形成了一个集合框架,这个框架就是Collection接口(一会可以看一下API)。

    在Collection接口定义着集合框架中最最最共性的内容。

    在学习时:我们需要看最顶层怎么用, 创建底层对象即可。因为底层继承了父类中的所有功能

    (4)集合接口的描述

    Collection接口的基本方法:

    使用如下:

     1 public class CollectionDemo {
     2     public static void main(String[] args) {
     3         Collection<String> cc = new ArrayList<String>();
     4         cc.add("abc");
     5         cc.add("123");
     6         cc.add("wyb");
     7         cc.add("666");
     8         System.out.println(cc.contains("wyb"));
     9         cc.remove("wyb");
    10         System.out.println(cc);
    11         cc.clear();
    12         System.out.println(cc);
    13     }
    14 }

    2、Iterator迭代器

    (1)迭代器概述

    java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。

    Collection集合元素的通用获取方式:

    在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。

    一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

    (2)迭代器使用

    在Collection接口描述了一个抽象方法iterator方法,所有Collection子类都实现了这个方法,并且有自己的迭代形式:

    集合中把这种取元素的方式描述在Iterator接口中。Iterator接口的常用方法如下:

    • hasNext()方法:用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代。
    • next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
     1 public class IteratorDemo {
     2     public static void main(String[] args) {
     3         Collection<String> c = new ArrayList<String>();
     4         c.add("1");
     5         c.add("2");
     6         c.add("3");
     7         c.add("4");
     8         c.add("5");
     9         c.add("6");
    10         Iterator<String> it = c.iterator();    // 获取集合的迭代器对象
    11         while(it.hasNext()){    // 反复判断有没有下一个元素
    12             String s = it.next();    // 取出下一个元素
    13             System.out.println(s);
    14         }
    15     }
    16 }

    (3)并发修改异常

    迭代的常规用法中我们要尽量避免在迭代过程中为集合添加/删除数据。否则会报错,原因是Java抛出了并发修改异常。

    迭代过程中并发修改异常的原因为:

    迭代器中”记忆”的集合长度与集合中实际长度不同,而导致出现索引与实际元素不符甚至无限循环的情况发生。

    所以在使用Iterator时,避免类似操作,for循环底层为迭代器实现,所以也需要避免类似操作。

    有些迭代器避免了这样的问题,如ListIterator,但该类并不通用也不常用,实际开发中很少使用,只需要简单了解。

     1 // java规定: 如果一个集合使用迭代器遍历,那么在遍历的过程中不允许修改集合的长度(增加或删除)
     2 public class ConcurrentModificationExceptionDemo {
     3     public static void main(String[] args) {
     4         Collection<String> c = new ArrayList<String>();
     5         c.add("1");
     6         c.add("2");
     7         c.add("itcast");
     8         c.add("4");
     9         c.add("5");
    10         c.add("6");
    11         Iterator<String> it = c.iterator();    // 获取集合的迭代器对象
    12         while(it.hasNext()){    // 反复判断有没有下一个元素
    13             String s = it.next();    // 取出下一个元素
    14             if("itcast".equals(s)){
    15                 // 如果相等添加一个大写ITCAST
    16                 c.add("ITCAST");    // 报异常 => ConcurrentModificationException
    17             }
    18             System.out.println(s);
    19         }
    20     }
    21 }

    (4)增强for循环

    增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,

    所以在遍历的过程中,不能对集合中的元素进行增删操作

    格式:

    for(元素的数据类型  变量 : Collection集合or数组){}

    使用如下:

     1 public class ForeachDemo {
     2     public static void main(String[] args) {
     3         int[] nums = { 1, 2, 3 };
     4         for (int m : nums) {
     5             System.out.println(m);
     6         }
     7         Collection<String> c = new ArrayList<String>();
     8         c.add("a");
     9         c.add("b");
    10         c.add("c");
    11         c.add("d");
    12         for (String n : c) {
    13             System.out.println(n);
    14         }
    15     }
    16 }
  • 相关阅读:
    Mayi_Maven安装与配置Myeclipse、Idea
    MY_Selenium登录126邮箱,定位不到账号输入框解决办法
    MY_使用selenium自动登录126/163邮箱并发送邮件
    2、TestNG+Maven+IDEA环境搭建
    1、Maven安装教程详解
    git常用命令
    LUA_linux的安装
    vsftp虚拟用户配置
    apache日志切割
    NTP Reply Flood Attack (NTP反射型DDos攻击)
  • 原文地址:https://www.cnblogs.com/wyb666/p/10349058.html
Copyright © 2020-2023  润新知