隐藏

集合(Collection接口)
2022年 02月 24 日

Calvin

集合概述:
1、集合、数组都是度多个数据进行存储的操作结构。
2、数组在存储多个数据特点

初始化完成,长度就确定了
数组定义好了,元素的类型就确定了。
数组储存数据有序、可重复。
3、数组的缺点
数组提供的方法有限,对于增、删、改操作不方便

数组和集合的区别:

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

Collection

  • Collection与Collections有何区别?

    • Collection是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供最大化的统一操作方式
    • Collections 是一个包装类。它包含各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

二、集合

|----Collection接口:单列集合,存一个一个对象的。
     |-----List接口:存储有序、可重复数据。
           |----ArrayList
           |----LinkedList
           |----Vector
     |-----Set接口:存储无有序、不可重复数据。
            |----HashSet
            |----LinKedHashSet
            |---TreeSet
|----Map接口:双列集合,用来存储key---value数据

jihejiekou


常用方法:
*.add(*) 添加元素
*.addALL(*)将另一个集合中的全部元素添加进当前集合中
*.clear() 暴力清除集合中所有元素
*.remove(*)删除集合内某一个元素
*.removeAll(*)从一个集合内删除全部与另一个集合中相等的元素
*.size() 返回值类型:int。返回集合中的元素个数
*.contains(Object o) 返回值类型:boolean。判断集合是否包含某个元素(调用的是equals方法)
*.containsAll(*)返回值类型:boolean。判断集合是否包含另一个集合中的所有元素(调用的是equals方法)
*.isEmpty(*) 返回值类型:boolean。判断集合是否为空,若为空则返回true
*.retainAll(*):交集:获取当前集合和coll1集合的交集,并返回给当前集合
*.hashCode() :返回集合的哈希值

Arrays.asList(arrs);数组---->集合

    String []arrs={"aa","bb","cc"};
        Collection strings = Arrays.asList(arrs);

集合---->数组

    Object[] objects = c1.toArray();
        System.out.println(Arrays.toString(objects));

迭代器:

iterator() 迭代器。返回值类型:Iterator
Iterator (迭代器名) = (集合名).iterator();

Iterator迭代器接口

注意事项:

  • Iterator对象称为迭代器(设计模式的一种),GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生
  • Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。
  • 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前
  • 在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
  • 注意!每一次迭代都需要创建一个新的迭代器,因为上一个用过的迭代器都已经指针下移,不能再使用

    迭代器只能用变量接收,不能直接写在while循环里,不然会死循环,因为每次走到while循环的时候,都会新创建一个迭代器对象,所以会一直执行下去

    错误如下:

    while( 某一个集合.iterator.hasNext() ){ xxxxxx } 这种方式会在while的每一次循环中,都创建一个该集合的迭代器,永远指针指向第一位,不断循环

    正确方式:

    Iterator iterator=newList.interator

    while( itertor.hasNext() ) { xxxx }

    在循环内删除集合内元素不要直接调用集合的remove方法,要调用迭代器提供的remove方法

    若在循环体内调用了集合的remove方法会因为指针参数未更新而报error
  • 迭代器的逆序遍历

iterator中没有逆序遍历的相关方法,因此要使用listiterator 中的hasPrevious()来进行逆序
    
ArrayList<Object> objects = new ArrayList<>();
ListIterator<Object> iterator01 = new ListIterator<>();
iterator01.hasPrevious();

方式一 iterator.next():获取值 不要使用,容易报错

Iterator iterator = c1.iterator();
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());

方式二:循环遍历,可以使用但不推荐

增强for循环

格式:for (Object o : list)

public void test1(){
    String[]  str  =  new  String[5];
    for (String myStr:str) {
        myStr  = "atguigu";     
        System.out.println(myStr);    //输出六个atguigu

    }
    for (int i = 0; i <str.length ; i++) {
        System.out.println(str[i]);   //输出6个null
    }
}
for (int i = 0; i <c1.size() ; i++) {
     System.out.println(iterator.next());
    }

方式三:推荐 (在循环遍历中添加.hashNext来判断下一个位置是否还有元素)

迭代器名.hasNext()判断是否还有下一个元素

     while (iterator.hasNext()){
         //①指针下移 ②将下移以后集合位置上的元素返回
         System.out.println(iterator.next());
     }

集合(Collection接口)

集合概述:
1、集合、数组都是度多个数据进行存储的操作结构。
2、数组在存储多个数据特点

初始化完成,长度就确定了
数组定义好了,元素的类型就确定了。
数组储存数据有序、可重复。
3、数组的缺点
数组提供的方法有限,对于增、删、改操作不方便

数组和集合的区别:

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

Collection

  • Collection与Collections有何区别?

    • Collection是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供最大化的统一操作方式
    • Collections 是一个包装类。它包含各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

二、集合

|----Collection接口:单列集合,存一个一个对象的。
     |-----List接口:存储有序、可重复数据。
           |----ArrayList
           |----LinkedList
           |----Vector
     |-----Set接口:存储无有序、不可重复数据。
            |----HashSet
            |----LinKedHashSet
            |---TreeSet
|----Map接口:双列集合,用来存储key---value数据

jihejiekou


常用方法:
*.add(*) 添加元素
*.addALL(*)将另一个集合中的全部元素添加进当前集合中
*.clear() 暴力清除集合中所有元素
*.remove(*)删除集合内某一个元素
*.removeAll(*)从一个集合内删除全部与另一个集合中相等的元素
*.size() 返回值类型:int。返回集合中的元素个数
*.contains(Object o) 返回值类型:boolean。判断集合是否包含某个元素(调用的是equals方法)
*.containsAll(*)返回值类型:boolean。判断集合是否包含另一个集合中的所有元素(调用的是equals方法)
*.isEmpty(*) 返回值类型:boolean。判断集合是否为空,若为空则返回true
*.retainAll(*):交集:获取当前集合和coll1集合的交集,并返回给当前集合
*.hashCode() :返回集合的哈希值

Arrays.asList(arrs);数组---->集合

    String []arrs={"aa","bb","cc"};
        Collection strings = Arrays.asList(arrs);

集合---->数组

    Object[] objects = c1.toArray();
        System.out.println(Arrays.toString(objects));

迭代器:

iterator() 迭代器。返回值类型:Iterator
Iterator (迭代器名) = (集合名).iterator();

Iterator迭代器接口

注意事项:

  • Iterator对象称为迭代器(设计模式的一种),GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生
  • Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。
  • 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前
  • 在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
  • 注意!每一次迭代都需要创建一个新的迭代器,因为上一个用过的迭代器都已经指针下移,不能再使用

    迭代器只能用变量接收,不能直接写在while循环里,不然会死循环,因为每次走到while循环的时候,都会新创建一个迭代器对象,所以会一直执行下去

    错误如下:

    while( 某一个集合.iterator.hasNext() ){ xxxxxx } 这种方式会在while的每一次循环中,都创建一个该集合的迭代器,永远指针指向第一位,不断循环

    正确方式:

    Iterator iterator=newList.interator

    while( itertor.hasNext() ) { xxxx }

    在循环内删除集合内元素不要直接调用集合的remove方法,要调用迭代器提供的remove方法

    若在循环体内调用了集合的remove方法会因为指针参数未更新而报error
  • 迭代器的逆序遍历

iterator中没有逆序遍历的相关方法,因此要使用listiterator 中的hasPrevious()来进行逆序
    
ArrayList<Object> objects = new ArrayList<>();
ListIterator<Object> iterator01 = new ListIterator<>();
iterator01.hasPrevious();

方式一 iterator.next():获取值 不要使用,容易报错

Iterator iterator = c1.iterator();
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());

方式二:循环遍历,可以使用但不推荐

增强for循环

格式:for (Object o : list)

public void test1(){
    String[]  str  =  new  String[5];
    for (String myStr:str) {
        myStr  = "atguigu";     
        System.out.println(myStr);    //输出六个atguigu

    }
    for (int i = 0; i <str.length ; i++) {
        System.out.println(str[i]);   //输出6个null
    }
}
for (int i = 0; i <c1.size() ; i++) {
     System.out.println(iterator.next());
    }

方式三:推荐 (在循环遍历中添加.hashNext来判断下一个位置是否还有元素)

迭代器名.hasNext()判断是否还有下一个元素

     while (iterator.hasNext()){
         //①指针下移 ②将下移以后集合位置上的元素返回
         System.out.println(iterator.next());
     }

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论