ArrayList、LinkedList、HashSet、HashMap常用实现类、Iterator迭代器(Java 从自学到就业 第15天)

Java 学习记录 第十五天

由于本渣渣是前端转行Java,所以编辑器的选择就直接用 webstorm 同公司的 idea
接下来的知识梳理有一部分会借鉴大佬 廖雪峰的博客

学习目标

掌握常用实现类的使用、Iterator迭代器的使用


学习内容

  • ArrayList 的常用操作方法
  • LinkedList 、ArrayList、HashSet 的区别
  • HashMap 的使用
  • 迭代器(Iterator)

ArrayList 的常用操作方法

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口。

import java.util.ArrayList;
import java.util.Collections;

public class Test1 {
    public static void forEachTest(ArrayList<String> list) {
        System.out.println("\n遍历的第一种方式 for循环:");
        for (int i = 0; i < list.size(); i++) {
            System.out.println("第 " + (i + 1) + " 个元素:" + list.get(i));
        }

        System.out.println("\n遍历的第二种方式 增强for循环:");
        for (String item : list) {
            System.out.println("第 " + (list.indexOf(item) + 1) + " 个元素:" + item);
        }

        System.out.println("\n遍历操作的第三种方式 forEach() 方法:");
        list.forEach((item) -> {
            System.out.println("选择英雄:" + item);
        });
    }

    public static void main(String[] args) {

        ArrayList<String> heroList = new ArrayList<String>();
        heroList.add("后羿");
        heroList.add("鲁班");
        heroList.add("鲁班");
        heroList.add("孙尚香");

        System.out.println("所有添加的元素:" + heroList);
        System.out.println("所有添加的元素数量:" + heroList.size());
        System.out.println("指定访问第二个元素:" + heroList.get(1));

        heroList.set(2, "狄仁杰");
        System.out.println("\n修改之后得到的数据:" + heroList);

        heroList.remove(0);
        System.out.println("\n删除之后得到的数据:" + heroList);

        Collections.sort(heroList);
        System.out.println("\n排序后的数据:" + heroList);

        forEachTest(heroList);

    }
}

要注意的是声明 ArrayList 的时候,泛型数据类型 只能是 引用数据类型,也就是说需要使用到 基本类型包装类,上述代码的输出结果如下:
Java的Lambda表达式

LinkedList 、ArrayList、HashSet 的区别

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。
Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
与 ArrayList 相比,LinkedList 的增加和删除对操作效率更高,而查找和修改的操作效率较低。

以下情况使用 LinkedList :

  • 开发时需要通过循环迭代来访问列表中的某些元素的时候。
  • 开发时需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作的时候。

以下情况使用 ArrayList :

  • 开发时需要频繁访问列表中的某一个元素的时候。
  • 开发时只需要在列表末尾进行添加和删除元素操作的时候。

以下情况使用 HashSet :

  • 开发时需要对数据进行去重时。
  • 开发时处理的数据有可能存在 null 值的时候。

LinkedList 继承了哪些 、实现了哪些 接口

  1. 继承了 AbstractSequentialList 类。
  2. 实现了 Queue 接口,可作为队列使用。
  3. 实现了 List 接口,可进行列表的相关操作。
  4. 实现了 Deque 接口,可作为队列使用。
  5. 实现了 Cloneable 接口,可实现克隆。
  6. 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
import java.util.LinkedList;

public class Test2 {
    public static void main(String[] args) {

        LinkedList<String> heroList = new LinkedList<String>();

        heroList.add("后羿");
        heroList.add("鲁班");
        heroList.add("后羿");
        heroList.addFirst("伽罗天下第一!!!");
        heroList.addLast("百里守约万年吊车尾 !!!");

        System.out.println("注意头尾的数据:" + heroList);
        System.out.println("获取头部的数据:" + heroList.getFirst());
        System.out.println("获取尾部的数据:" + heroList.getLast());

        heroList.removeFirst();
        heroList.removeLast();
        System.out.println("删除头尾后的数据:" + heroList);

    }
}

上述代码的输出结果如下:

Java如何快速获取集合的头尾元素

HashMap 的使用

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。
HashMap 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。

import java.util.HashMap;

public class Test3 {
    public static void main(String[] args) {

        HashMap<String, String> heroMap = new HashMap<String, String>();

        heroMap.put("hy", "后羿");
        heroMap.put("lb", "鲁班");
        heroMap.put("ssx", "孙尚香");

        // 复制一份 map
        HashMap<String, String> cloneHeroMap = (HashMap<String, String>) heroMap.clone();

        System.out.println("输出原始 map :" + heroMap);
        System.out.println("输出复制 map :" + cloneHeroMap);
        System.out.println("输出原始 map 的键值对数量:" + heroMap.size());

        cloneHeroMap.clear();
        System.out.println("\n清除复制map的数据:" + cloneHeroMap);

        System.out.println("\n遍历键值对:");
        for (String key : heroMap.keySet()) {
            System.out.println("键为:" + key + ",值为:" + heroMap.get(key));
        }

        System.out.println("\n遍历所有值:");
        for (String value : heroMap.values()) {
            System.out.print(value + "、");
        }
    }
}

简单演示下 HashMap 的一些常用方法,全部 API 查询,输出结果如下:

Java的键值对使用

迭代器(Iterator)

Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。

迭代器 it 的基本操作是 next 、hasNext 和 remove

  • 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
  • 调用 it.hasNext() 用于检测集合中是否还有元素。
  • 调用 it.remove() 将迭代器返回的元素删除。
import java.util.HashSet;
import java.util.Iterator;

public class Test4 {
    public static void main(String[] args) {

        HashSet<String> heroSet = new HashSet<String>();
        heroSet.add("后羿");
        heroSet.add("鲁班");
        heroSet.add("后羿");
        heroSet.add("孙尚香");

        System.out.println("输出 set:" + heroSet);

        Iterator<String> itHero1 = heroSet.iterator();
        Iterator<String> itHero2 = heroSet.iterator();
        Iterator<String> itHero3 = heroSet.iterator();

        System.out.println("\n使用 itHero1 迭代器获取第一个元素:" + itHero1.next());

        System.out.println("\n使用 itHero2 迭代器遍历元素:");
        while (itHero2.hasNext()) {
            System.out.println(itHero2.next());
        }

        while (itHero3.hasNext()) {
            String hero = itHero3.next();
            if (hero.equals("后羿")) {
                itHero3.remove();
            }
        }
        System.out.println("\n输出 itHero3 迭代器删除操作后的 set:" + heroSet);

    }
}

简单演示下迭代器的一些基本操作,输出如下:

Iterator迭代器



自学不易,点赞鼓励。

谢谢各位看官,如果有哪里写错的还望指出来哈,共同进步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Only Double J

自学不易,希望鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值