集合

集合

集合框架的概述

  1. 集合、数组都是对多个数据进行存储操作的结构,简称Java容器 说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库)
  2. 数组在存储多个数据方面的特点:

    一旦初始化后,其长度就确定了
    数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了。比如:String[] arr; int[] arr1; Object[] arr2;

  3. 数组在存储多个数据方面的缺点

    一旦初始化以后,其长度就不可修改
    数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高。
    获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
    数组存储数据的特点:有序、可重复。对于无序,不可重复的需求,不能满足。

  4. Java集合可分为Collection和Map两种体系

    Collection接口:单列数据,定义了存取一组对象的方法的集合
    List:元素有序、可重复的集合
    Set:元素无序、不可重复的集合
    Map接口:双列数据,保存具有映射关系"key-value对的集合
    image

  5. 集合元素的遍历操作,使用迭代器Iterator接口

    内部方法:hasNext 和next 方法

	while(iterator.hasNext()){
	System.out.println(iterator.next());	
	}
  1. List接口:存储有序的、可重复的数据。 -->“动态”数组,替换原有的数组

    • ArrayList:作为List接口的主要实现类:线程不安全的,效率高;底层使用Object[] elementData存储
    • LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
    • Vector:作为List接口的古老实现类;线程安全的,效率低;底层使用Object[] elementData存储。
    • 面试题:ArrayList、LinkList、Vector三者的异同?
      • 同:三个类都实现了List接口,存储数据的特点:有序、可重复
      • 不同:见上
        image
  2. set接口

    • Set接口是Collection的子接口,set接口没有提供额外的方法
    • Set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败。
    • Set判断两个对象是否相同不是使用==运算符,而是根据equals()方法
    • HashSet
      • 向HashSet中添加元素的过程:当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值,通过某种散列函数决定该对象在 HashSet 底层数组中的存储位置。(这个散列函数会与底层数组的长度相计算得到在数组中的下标,并且这种散列函数计算还尽可能保证能均匀存储元素,越是散列分布,该散列函数设计的越好)
      • 如果两个元素的hashCode()值相等,会再继续调用equals方法,如果equals方法结果为true,添加失败;如果为false,那么会保存该元素,但是该数组的位置已经有元素了,那么会通过链表的方式继续链接。
      • 如果两个元素的 equals() 方法返回 true,但它们的 hashCode() 返回值不相等,hashSet 将会把它们存储在不同的位置,但依然可以添加成功。
      • 重写hashCode()方法的基本原则:
        • 在程序运行时,同一个对象多次调用 hashCode() 方法应该返回相同的值。
        • 当两个对象的 equals() 方法比较返回 true 时,这两个对象的 hashCode() 方法的返回值也应相等。
        • 对象中用作 equals() 方法比较的 Field,都应该用来计算 hashCode 值。
posted @ 2022-05-18 16:49  生活的样子就该是那样  阅读(22)  评论(0编辑  收藏  举报