Java 基础入门 | 第十三章 Java集合

简介: 目录Java集合框架Collection接口Iterator接口List接口以及实现类Set接口以及实现类Map接口以及实现类Collections工具类Arrays工具类作业Java集合框架集合(collection)有时又称为容器,简单地说,它是一个对象,能将具有相


Java集合框架

集合(collection)有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体

集合被用于存储、获取、操纵和传输聚合的数据

集合框架(Collections Framework)是用来表现和操纵集合的一个统一的体系结构。所有的集合框架都包含以下内容:

    • 接口:是代表集合的抽象数据类型。
    • 实现:是集合接口的具体实现。本质上,它们是可重用的数据结构,是一些类。
    • 算法:是在实现了集合接口的对象上执行有用的计算的方法,如查找和排序。

    集合框架结构图

    image.gif编辑

    Collection接口

    image.gif编辑image.gif编辑

    Collection集合元素的遍历方式

    两种集合的遍历方式

      1. for-each结构遍历

      image.gif编辑

          2.迭代器Iterator遍历

      image.gif编辑

      Iterator接口

      使用集合的iterator()方法创建的迭代器对象,都是接口的子类型对象

      迭代遍历期间,不能使用集合,来增删数据

      方法:

        • hasNext()
        • next()
        • remove()

        遍历方式

        for循环写法

        List<String>list=new ArrayList<String>();
        for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) 
        {
            String s = iterator.next();
            System.out.print(s+" ");        
        }

        image.gif

        while循环写法

        ArrayList<Integer>list=new ArrayList<Integer>();
        Iterator<Integer> it = list.iterator();
        while(it.hasNext())
        {
            System.out.print(i+" ");
        }

        image.gif

        foreach循环写法

        List<String>list=new ArrayList<String>();
        for (String s : list) {
            System.out.print(s+" ");
        }

        image.gif

        List接口以及实现类

        List接口是一个有序的集合,可以包含重复元素

        除了从Collection继承来的操作外,List接口还提供了以下按序列进行操作的方法:["aaa","bbb","ccc"]

        image.gif编辑

        image.gif编辑

        Set接口以及实现类

          • Set是一个不能包含重复元素的接口。
          • Set接口是Collection的子接口
          • 只包含从Collection继承过来的方法
          • 增加了对add方法的限制,不允许有重复的元素。

          image.gif编辑

          image.gif编辑Set接口通用的实现类有HashSet、TreeSet和LinkedHashSet

          编写程序,获取命令行参数中的字符串列表,输出其中重复的单词、不重复的单词以及消除重复以后的单词列表。

          代码示例

          import java.util.HashSet;
          import java.util.Set;
          public class SetTest {
              public static void main(String[] args) {
                  String[] words={"a","b","c","d","e","f","g","d"};
                  Set<String> set=new HashSet<>();
                  for (String word : words) {
                        if(!set.add(word)){
                            System.out.println("存在重复单词"+word);
                        }
                  }
                  System.out.println("共存在"+set.size()+"个不重复的单词,分别为"+set);
              }
          }

          image.gif

          Map接口以及实现类

            • Map是一种包含键值对的元素的集合。
            • Map不能包含重复的键
            • 每个键最多可映射到一个值。

            image.gif编辑

            Map接口定义了一系列的方法:

            image.gif编辑

            image.gif编辑 代码示例

            import java.util.HashMap;
            import java.util.Map;
            public class MapTest {
                public static void main(String[] args) {
                    String[] words={"a","b","c","d","e","f","g","d","e","d"};
                    Map<String,Integer> map=new HashMap<>();
                    for (String word : words) {
                        Integer times=map.get(word);
                        map.put(word,times==null?1:times+1);
                    }
                    for (Map.Entry<String, Integer> entry : map.entrySet()) {
                        System.out.println(entry);
                    }
                }
            }

            image.gif

            Collections工具类

            1.Collections提供了集合操作的常用算法,这些算法都以静态方法的形式提供

            2.这些静态方法的第一个参数都是需要对其操作的 集合

            3.Collections提供的多数算法都是针对java.util.List类型的集合进行操作的,也有一部分可以操作任何类型的集合

            4.Collections集合操作工具类位于java.util包下

            5.Collections中常用的方法有:

              • 排序:    void sort(List l)
              • 随机排序:void shuffle(List l)
              • 反转集合中的顺序: void reverse(List l)
              • 二分查找:int binarySearch(List l,Key)
              • 查找极值: T max(List l),T min(List l)

              Arrays工具类

              Arrays提供了数组操作的各种方法

              Arrays提供了将数组转换为List的静态方法

              Arrays提供的常用方法有:

                • 将数组转化为List:asList()
                • 二分查找:binarySearch()
                • 复制数组:copyOf()
                • 数组排序:sort()
                • 初始化数组:fill()
                相关文章
                |
                15天前
                |
                Java 开发者 微服务
                Spring Boot 入门:简化 Java Web 开发的强大工具
                Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
                35 6
                Spring Boot 入门:简化 Java Web 开发的强大工具
                |
                4天前
                |
                存储 缓存 安全
                Java 集合江湖:底层数据结构的大揭秘!
                小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
                22 5
                |
                12天前
                |
                监控 架构师 Java
                Java虚拟机调优的艺术:从入门到精通####
                本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
                |
                17天前
                |
                存储 缓存 安全
                Java 集合框架优化:从基础到高级应用
                《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
                29 4
                |
                1月前
                |
                监控 安全 Java
                Java中的多线程编程:从入门到实践####
                本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
                |
                1月前
                |
                安全 Java
                Java多线程集合类
                本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
                |
                24天前
                |
                Java 程序员 数据库连接
                Java中的异常处理:从入门到精通
                在Java编程的海洋中,异常处理是一艘不可或缺的救生艇。它不仅保护你的代码免受错误数据的侵袭,还能确保用户体验的平稳航行。本文将带你领略异常处理的风浪,让你学会如何在Java中捕捉、处理和预防异常,从而成为一名真正的Java航海家。
                |
                7月前
                |
                安全 Java
                从零开始学习 Java:简单易懂的入门指南之不可变集合、方法引用(二十六)
                从零开始学习 Java:简单易懂的入门指南之不可变集合、方法引用(二十六)
                |
                6月前
                |
                存储 Java API
                Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
                Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
                93 0