Java——集合、List接口、ArrayList、LinkedList、Iterator接口:迭代器

230 阅读4分钟

文章目录

集合

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。

集合和数组的区别有:

  1. 长度区别:
    数组的长度是固定的而集合的长度是可变的
  2. 数据类型的区别:
    数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型
  3. 内容区别:
    数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素

在集合框架中,Collection是顶层父接口,List和Set为子接口,List的实现类又有ArrayList、LinkedList、Vector,而Set的实现类有HashSet、LinkedHashSet、TreeSet,集合框架图如下所示

在这里插入图片描述
在这里插入图片描述
首先,讲解Collection顶层父接口下的方法

Collection

常用的成员方法

  • 添加功能

    • boolean add(Object obj):添加一个元素
    • boolean addAll(Collection c):添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素)
  • 删除功能

    • void clear():移除所有元素
    • boolean remove(Object o):移除一个元素
    • boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素,如果没有交集元素 则删除失败 返回false
  • 判断功能

    • boolean contains(Object o):判断集合中是否包含指定的元素
    • boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含才返回true)
    • boolean isEmpty():判断集合是否为空
  • 获取功能

    • Iterator iterator():获取一个迭代器(主要用于遍历集合)
    • iterator().next():让迭代器的指针下移
    • iterator().hasNext():判断迭代器的指针下面是否为空
  • 长度功能

    • int size():元素的个数
  • 交集功能

    • boolean retainAll(Collection c):获取两个集合的交集元素(交集:两个集合都有的元素)
  • 转换功能

    • Object[] toArray():将集合转换为数组(依次获取集合中的每一个元素)

List

\

List接口的特点:

  • 有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
  • 有索引,包含了一些带索引的方法
  • 允许存储重复的元素

List接口中带索引的方法(特有)

  • public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
  • public E get(int index):返回集合中指定位置的元素。
  • public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
  • public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

注意:

操作索引的时候,一定要防止索引越界异常
IndexOutOfBoundsException:索引越界异常,集合会报
ArrayIndexOutOfBoundsException:数组索引越界异常
StringIndexOutOfBoundsException:字符串索引越界异常

 //List集合遍历有3种方式
        //使用普通的for循环
        for(int i=0; i<list.size(); i++){
            //public E get(int index):返回集合中指定位置的元素。
            String s = list.get(i);
            System.out.println(s);
        }
        System.out.println("-----------------");
        //使用迭代器
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("-----------------");
        //使用增强for
        for (String s : list) {
            System.out.println(s);
        }

ArrayList

底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
在这里插入图片描述

LinkedList

底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
注意:使用LinkedList集合特有的方法,不能使用多态
在这里插入图片描述

Iterator

有两个常用的方法:
boolean hasNext() 如果仍有元素可以迭代,则返回 true。
判断集合中还有没有下一个元素,有就返回true,没有就返回false
E next() 返回迭代的下一个元素。
取出集合中的下一个元素

Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊

Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象
Iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。

迭代器的使用步骤(重点):

  1. 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
  2. 使用Iterator接口中的方法hasNext判断还有没有下一个元素
  3. 使用Iterator接口中的方法next取出集合中的下一个元素