集合和集合工具类(一)

文章目录1.什么是集合2.集合的分类3. Iterator接口(Collection集合的遍历)Iterator接口中的方法迭代器原理图hasNext与next方法remove方法在迭代的过程中删除元素的方法4.Collection接口常用方法contains和remove方法总结5.List集合List集合中常用的方法:List集合特有的遍历方法6.ArrayList类7.LinkedList类8.Vector类9.Map接口常用方法Map集合的遍历1.什么是集合数组其实就是一个集合,集合实际上就是一
摘要由CSDN通过智能技术生成

1.什么是集合

数组其实就是一个集合,集合实际上就是一个容器,可以用来装其他类型的数据。集合可以一次容纳多个对象。

集合不能直接存储基本数据类型,也不能直接存储Java对象,集合中存储的都是Java对象的内存地址(引用)。需要注意的是集合本身也是一个对象,也有内存地址。

在Java中每一个不同的集合,底层会对应不同的数据结构,向不同的集合中存储元素,等于将数据放到了不同的数据结构中。数据结构–数据存储的结构。

所有的集合类和接口都在Java.util包下

2.集合的分类

Java中的集合分为两大类:

  1. 以单个方式存储元素
    1. 该集合中最终的父类为java.util.Collection;
  2. 以键值对的方式存储元素
    1. 该集合中最终的父类为java.util.Map;

所有集合的实现类:

ArrayList:底层是数组

LinkedList:底层是双向链表

Vector:底层是数组,线程安全的

HashSet:底层是HashMap,向HashSet中存放数据,实际上是存放到了HsahMap中的key部分。

TreeSet:底层是二叉树,向TreeSet中存放数据,实际上是存放到了TreeMap中的key部分。

HashMap:底层是哈希表

HashTable:底层是哈希表,线程安全的。

Properties:线程安全的,并且K、V只能存储字符串。

TreeMap:底层是二叉树。TreeMap集合可以自动按照大小顺序排列。

List集合存储特点:

  1. 有序不可重复

Set(Map)集合存储特点:无序不可重复,元素没有下标

SortedSet集合存储特点:无序不可重复,集合中的元素是可排序的

Map集合中的key,就是Set集合(向Set集合放数据,实际上是放到了Map集合中的key部分)。

3. Iterator接口(Collection集合的遍历)

以下的遍历方式,是所有Collection的通用方式,在Map集合中不能使用。

Iterator接口中的方法

  1. boolean hasNext();
  2. Object next();
  3. void remove();

迭代器原理图

    Collection c1=new ArrayList();//无序不可重复
    c1.add(12);
    c1.add("124s");
    c1.add('e');
    //获取集合的迭代器
    Iterator iterator=c1.iterator();
    //获取迭代器的对象开始遍历迭代
    while(iterator.hasNext()){
        Object object = iterator.next();
        System.out.println(object);
    }

hasNext与next方法

  1. boolean hasNext();如果迭代具有更多元素,则返回 true
  2. Object next();返回迭代中的下一个元素。

注意:集合结构只要发生改变,迭代器必须重新获取。当结构发生改变,迭代器没有重新获取时(迭代器不知道集合发生了变化),调用next方法会发生异常:java.util.ConcurrentModificationException

  Collection c1=new ArrayList();//有序可重复
//此处改为HashSet不会发生异常
        //获取集合的迭代器
        Iterator iterator=c1.iterator();
        //获取迭代器的对象开始遍历迭代
        while(iterator.hasNext()){
   
            Object object = iterator.next();
            System.out.println(object);
        }
//        System.out.println("==================");
        c1.add(12);
        c1.add("124s");
        c1.add('e');

        //获取集合的迭代器
//         iterator=c1.iterator();

        //获取迭代器的对象开始遍历迭代
        while(iterator.hasNext()){
   
            Object object = iterator.next();
            System.out.println(object);
        }
/*
执行结果为:
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
	at java.util.ArrayList$Itr.next(ArrayList.java:851)
	at com.CollectionDemo.CollectionDemo.main(CollectionDemo.java:31)

remove方法

void remove(); 从底层集合中删除此迭代器返回的最后一个元素(可选操作)。 --删除当前元素

      Collection c1=new ArrayList();//有序可重复
        c1.add(12);
        c1.add("124s");
        c1.add('e');

        //获取集合的迭代器
         Iterator iterator=c1.iterator();
        //获取迭代器的对象开始遍历迭代
        while(iterator.hasNext()){
   
            Object object = iterator.next();
            c1.remove(object);//================注意此处
        }
        System.out.println(c1.size());
//这样删除会发生异常:java.util.ConcurrentModificationException

在迭代的过程中删除元素的方法

  1. 在删除后再次获取迭代器

    Collection c1=new ArrayList();//有序可重复
            c1.add(12);
            c1.add("124s");
            c1.add('e'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值