【Java学习记录-8】集合

这篇具有很好参考价值的文章主要介绍了【Java学习记录-8】集合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

特点

提供一种存储空间可变的存储类型,存储的数据容量可以随时发生改变

结构

【Java学习记录-8】集合

1、Collection

概述

  1. 是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
  2. JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现

创建方式

  1. 多态的方式
  2. 具体的实现类ArrayList

常用方法

  1. boolean add(E e)
    添加元素
  2. boolean remove(Object o)
    从集合中移除指定的元素
  3. void clear()
    清空集合中的元素
  4. boolean contains(Object o)
    判断集合中是否存在指定的元素
  5. boolean isEmpty()
    判断集合是否为空
  6. int size()
    集合的长度,也就是集合中元素的个数

遍历方式

  1. Iterator
    迭代器,集合的专用遍历方式
    常用的两个方法:next()、hasNext()

2、List

概述

  1. 有序集合(也称为序列)。用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
  2. 与Set集合不同,列表通常允许重复的元素

遍历方式

  1. Iterator
    迭代器,集合的专用遍历方式
    常用的两个方法:next()、hasNext()

  2. for循环

特有方法

  1. void add(int index, E element)
    在此集合中的指定位置插入指定的元素
  2. E remove(int index)
    删除指定索引出的元素,返回被删除的元素
  3. E set(int index, E element)
    修改指定索引处的元素,返回被修改的元素
  4. E get(int index)
    返回指定索引处的元素

列表迭代器 ListIterator

特点:

  • 通过List集合的ListIterator()方法得到,所以说它是List集合特有的迭代器
  • 可以沿任意一个方向遍历列表,在迭代期间修改列表,并获取列表中迭代器的当前位置

常用方法

  • E next():返回迭代中的下一个元素
  • boolean hasNext():如果迭代具有更多元素,则返回true
  • E previous():返回列表中的上一个元素
  • boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true
  • void add(E e):将指定的元素插入列表

常用子类

ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快
LinkedList集合特有功能
方法名 说明
public void addFirst(E e) 在该列表开头插入指定的元素
public void addLast(E e) 在该列表尾部添加指定的元素
public E getFirst(E e) 返回列表中的第一个元素
public E getLast(E e) 返回列表中的最后一个元素
public E removeFirst(E e) 从列表中删除并返回第一个元素
public E removeLast(E e) 从列表中删除并返回最后一个元素

3、Set

特点

  • 不包含重复元素的集合
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 可以用来去重

哈希值

定义:JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

Object类中有一个方法可以获取对象的哈希值

  • public int hashCode():返回对象的哈希值

特点:

  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

HashSet集合

特点:

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不作任何保证,即存储和取出的元素的顺序不一定一致
  • 没有带索引的方法,不能使用普通for循环遍历,但可以用增强for循环
  • 不包含重复元素
  • 使用的时候需要在类中重写两个方法:hashCode()和equals(),可以使用ide自动生成。

LinkedHashSet集合

特点:

  • 哈希表和链表实现的Set接口,具有可预测的迭代顺序
  • 由链表保证元素有序,即存储和取出的元素的顺序一致
  • 由哈希表保证元素唯一,没有重复的元素

TreeSet集合

特点:

  • 元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法
  • 没有带索引的方法,不能使用普通for循环遍历
  • 不包含重复元素

排序:

  • 自然排序接口:comparable
  • 比较器排序接口:comparator

comparable:

  • 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序;
  • 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(To)方法;
  • 重写方法时,一定要注意排序规则必须安装要求的主要条件和次要条件来写;

comparator:

  • 用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的;
  • 比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compareTo(To1,To2)方法;
  • 重写方法时,一定要注意排序规则必须安装要求的主要条件和次要条件来写;

4、Map

概述

  • Interface Map<K,V> 其中K为键的类型,V为值的类型;
  • 将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值

功能概述

下表列出了Java中Map集合的基本功能:

功能 描述
put(key, value) 将 key-value 键值对映射添加到映射表中
get(key) 根据给定的 key 检索并返回相应的 value。如果 key 不存在,则返回 null
containsKey(key) 检查映射表中是否包含给定 key
containsValue(value) 检查映射表中是否包含给定 value
remove(key) 从映射表中删除指定 key 及其对应的 value
clear() 从映射表中删除所有键值对
size() 返回映射表中键值对的数量
isEmpty() 检查映射表是否为空

HashMap

HashMap 是 Java 中常用的一种数据结构,是 Map 接口的一个实现类,用于存储键值对。其底层是使用数组加链表或红黑树实现的,具有快速查询、插入、删除等特点,适合存储大量的键值对,因此在 Java 中被广泛应用。

HashMap 中,每个键值对被封装成一个 Entry 对象,并通过一个 hash() 方法计算键值的哈希码,将其映射到数组中的某个位置上。如果多个键值的哈希码相同,则它们会被放入同一个桶(数组的一个位置),并以链表或红黑树的形式进行存储。

HashMap 的主要特点包括:

  • HashMap 中的键和值都可以为 null。
  • HashMap 非线程安全,不支持多线程同时操作。
  • 默认加载因子为 0.75,当 HashMap 中的存储数据量达到总容量的 75% 时,HashMap 会自动扩容。
  • 在 Java 8 中,当链表中的元素个数大于等于 8 个时,会将链表转化为红黑树,以提升查询速度。当红黑树的元素数量小于等于 6 个时,会将树形结构再次转化为链表。

HashMap 的常用方法主要包括:

  • put(key, value):将指定的键值对存储到 HashMap 中,并返回旧的值(如果存在)。
  • get(key):根据键值获取相应的值,如果不存在则返回 null。
  • remove(key):根据键值删除对应的键值对,并返回被删除的值(如果存在)。
  • containsKey(key):判断是否包含指定的键值。
  • keySet():返回 HashMap 中所有键的 Set 集合。
  • values():返回 HashMap 中所有值的 Collection 集合。

需要注意的是,在使用 HashMap 存储自定义类型的键值对时,一定要重写该类型的 equals() 和 hashCode() 方法,以保证在计算哈希码时能够正确识别相同的对象。

总之,HashMap 是 Java 中非常常用的一种数据结构,具有快速查询、插入、删除等特点,适用于存储大量的键值对,但需要注意线程安全和哈希碰撞等问题。

HashMap样例:ArrayList嵌套HashMap

import java.util.ArrayList;
import java.util.HashMap;

public class ArrayListExample {
    public static void main(String[] args) {
        // 创建 List 集合,用于存储三个 HashMap
        ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

        // 创建三个 HashMap,分别存储键值对
        HashMap<String, String> map1 = new HashMap<String, String>();
        map1.put("name", "Alice");
        map1.put("age", "20");

        HashMap<String, String> map2 = new HashMap<String, String>();
        map2.put("name", "Bob");
        map2.put("age", "25");

        HashMap<String, String> map3 = new HashMap<String, String>();
        map3.put("name", "Charlie");
        map3.put("age", "30");

        // 将三个 HashMap 添加到 List 集合中
        list.add(map1);
        list.add(map2);
        list.add(map3);

        // 遍历 List 集合,输出每个 HashMap 中的键值对
        for (HashMap<String, String> map : list) {
            for (String key : map.keySet()) {
                System.out.println(key + " : " + map.get(key));
            }
        }
    }
}

这段代码创建了一个 ArrayList 集合,用于存储三个 HashMap,每个 HashMap 都以 String 类型作为键和值。将三个 HashMap 分别添加到 ArrayList 中,并遍历 ArrayList 和每个 HashMap,输出其中的键值对。

运行结果如下所示:

name : Alice
age : 20
name : Bob
age : 25
name : Charlie
age : 30

注释已经写得比较清楚了,这里再简要介绍一下代码的实现:

  1. 创建一个 ArrayList 集合来存储三个 HashMap
  2. 创建三个 HashMap,分别存储 "name""age" 两个键值对。
  3. 将每个 HashMap 添加到 ArrayList 集合中。
  4. 使用增强型 for 循环遍历 ArrayList,并用 keySet() 方法遍历每个 HashMap 中的所有键,并输出对应的键值对。

HashMap样例:HashMap嵌套ArrayList

import java.util.ArrayList;
import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        // 创建 HashMap 集合,用于存储三个键值对元素
        HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();

        // 创建三个 ArrayList,分别存储字符串元素
        ArrayList<String> list1 = new ArrayList<String>();
        list1.add("apple");
        list1.add("banana");
        list1.add("orange");

        ArrayList<String> list2 = new ArrayList<String>();
        list2.add("cat");
        list2.add("dog");
        list2.add("fish");

        ArrayList<String> list3 = new ArrayList<String>();
        list3.add("blue");
        list3.add("red");
        list3.add("green");

        // 将三个 ArrayList 添加到 HashMap 中,对应的键分别为 "fruits"、"animals"、"colors"
        map.put("fruits", list1);
        map.put("animals", list2);
        map.put("colors", list3);

        // 遍历 HashMap 集合,输出每个键值对元素的键和值
        for (String key : map.keySet()) {
            System.out.print(key + " : ");
            ArrayList<String> list = map.get(key);
            for (String s : list) {
                System.out.print(s + " ");
            }
            System.out.println();
        }
    }
}

这段代码创建了一个 HashMap 集合,用于存储三个键值对元素,其中每个键都是一个字符串类型的键,对应的值是一个 ArrayList,其中每个元素都是字符串类型。将三个 ArrayList 分别添加到 HashMap 中,并遍历 HashMap,输出每个键值对元素的键和值。

运行结果如下所示:

fruits : apple banana orange 
animals : cat dog fish 
colors : blue red green 

注释已经写得比较清楚了,这里再简要介绍一下代码的实现:文章来源地址https://www.toymoban.com/news/detail-484077.html

  1. 创建了一个 HashMap 集合,用于存储三个键值对元素,其中每个键都是一个字符串类型的键,对应的值是一个 ArrayList,其中每个元素都是字符串类型。
  2. 创建了三个 ArrayList,分别存储不同类型的字符串元素。
  3. 将每个 ArrayList 添加到 HashMap 中,并对应不同的键。
  4. 使用增强型 for 循环遍历 HashMap,输出每个键值对元素的键和值。在遍历时,首先输出键,然后使用 get() 方法获取对应的值,最后遍历该值中的所有元素并输出。

到了这里,关于【Java学习记录-8】集合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构(Java实现)-集合与时间和空间复杂度

    什么是集合框架 Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的 集合。 容器

    2024年02月12日
    浏览(43)
  • Spring是一个开源的Java开发框架,它提供了一种快速、简单的方式来开发企业级应用程序

    Spring是一个开源的Java开发框架,它提供了一种快速、简单的方式来开发企业级应用程序。Spring的主要优点包括简化Java EE开发、提供依赖注入和面向切面编程等功能。以下是Spring的一些核心特性: 依赖注入(DI):Spring通过DI机制,将对象的依赖关系注入到应用程序中,简化了

    2024年02月03日
    浏览(81)
  • 【刷题记录④】Java从0到1入门| 集合类

    Java从0到1刷题记录 目录 一、字符串去重 二、集合遍历 三、排队系统 四、首尾交替出队 五、统计一句话中重复单词的个数 六、集合排序 总结 我几乎每天都会刷题训练来使自己对各种算法随时保持一个清晰的状态。要知道 眼过千遍不如手过一遍 ,想成为一名合格的开发工

    2024年01月20日
    浏览(28)
  • C++学习记录——삼십삽 STL空间配置器

    我们先看malloc,malloc是创建在堆上的,虽然malloc可以申请内存,但也有限制,windows下用VirtualAlloc可以直接向堆申请内存,Linux中则是brk,不过这两个效率一般。 malloc向堆申请函数,它本身是个内存池,只是这个内存池面向整个程序。空间配置器运行在malloc之上,是一个小的内

    2024年02月09日
    浏览(33)
  • 【JavaSE专栏53】Java集合类HashMap解析,基于哈希表的键值对存储结构

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了 Java 中集合类 HashMap 的语法、使用说明和应用场景,并给出了样例代码。

    2024年02月15日
    浏览(40)
  • com.google.common.collect 是 Google Guava 库中的一个包,它提供了一系列扩展和增强 Java 集合框架的工具类和数据结构

    com.google.common.collect 是 Google Guava 库中的一个包,它提供了一系列扩展和增强 Java 集合框架的工具类和数据结构。Guava 的集合工具在设计上强调性能、不可变性、功能性和易用性。 以下是 com.google.common.collect 包中一些重要的类和接口: Immutable Collections: ImmutableSet:一个不可变

    2024年03月19日
    浏览(61)
  • 【目标跟踪】提供一种简单跟踪测距方法(c++)

    在 许多目标检测应用场景中,完完全全依赖目标检测对下游是很难做出有效判断,如漏检。 检测后都会加入跟踪进行一些判断或者说补偿。而在智能驾驶中,还需要目标位置信息,所以还需要测距。 往期博客介绍了许多处理复杂问题的,而大部分时候我们算力有限(内存、

    2024年02月22日
    浏览(44)
  • 【JavaSE专栏55】Java集合类HashTable解析,基于哈希表实现的唯一性键值对存储数据结构

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了 Java 中集合类 HashTable 的语法、使用说明和应用场景,并给出了样例代码。

    2024年02月15日
    浏览(57)
  • [vue]提供一种网站底部备案号样式代码

    组件代码:copyright-icp.vue 直接在页面中调用(注意这里是setup写法) 注意如果要设置为绝对定位,记得设为bfc或者添加占位块,防止阻挡问题

    2024年02月03日
    浏览(46)
  • 《嵌入式存储器架构、电路与应用》----学习记录(四)

    在现有主流嵌入式存储器中,SRAM虽然读写速度非常快,但是单元面积太大,无法在片上实现高密度集成;DRAM由于要制造电容,所采用的工艺无法在先进的CMOS工艺中实现,不利于做嵌入式存储,虽然基于增益单元的eDRAM能够完全采用标准CMOS工艺,但是仍然需要刷新,而且集成

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包