集合框架(一)List系列集合

 特点

        有序,可重复,有索引。

02d87ad37f864636a5e0731d0ca78076.pngLIst集合的特有方法

4eec8ad25a274411b4fcf3fd99bb1e36.png


/*
 * 目标:掌握List系列集合的特点,以及其提供的特有方法
 * */

import java.util.ArrayList;
import java.util.List;

public class ListTest1 {
    public static void main(String[] args) {
        //1.创建一个ArrayList集合对象(有序、可重复、有索引)
        List<String> list = new ArrayList<>(); //经典代码,将来ArrayList是用的最多的 是一种多态的写法
        //List是一个接口肯定不能new一个List类,要new一个ArrayList实现类
        list.add("蜘蛛精");
        list.add("至尊宝");
        list.add("至尊宝");
        list.add("牛夫人");
        System.out.println(list);
        //2.public void add(int index,E element):在某个索引位置插入元素。
        list.add(2,"紫霞仙子");
        list.add(4,"铁扇公主");
        System.out.println(list);
        //3.public E remove(int index):根据索引删除元素,返回被删除元素
        System.out.println(list.remove(5));
        System.out.println(list);
        //4.public E get(int index): 返回集合中指定位置的元素。
        System.out.println(list.get(2));
        System.out.println(list);
        //5.public E set(int index,E element):修改案引位置处的元系,修改成功后,会返回原来的数据
        System.out.println(list.set(3, "牛魔王"));
        System.out.println(list);

    }
}

List集合支持的遍历方法

  1. for循环(因为List集合有索引)
  2. 迭代器
  3. 增强for循环
  4. Lambda表达式



import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("糖宝");
        list.add("蜘蛛精");
        list.add("至尊宝");


        //1.for循环
        for (int i = 0; i < list.size(); i++) {
            //i = 0 ,1 ,2
            String s = list.get(i);
            System.out.println(s);
        }
        System.out.println("-----------------------------------");
        //2.迭代器
        Iterator<String> it = list.iterator();//list调用iterator方法,会获得一个迭代器对象
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        System.out.println("-----------------------------------");
        //3.增强for(foreach遍历 不是forEach方法)
        for (String s : list) {
            //会依次让s变量等于第一个、第二个、第三个数据
            System.out.println(s);
        }
        System.out.println("-----------------------------------");
        //4.JDK 1.8 开始之后的Lambda表达式
        list.forEach(s -> {
            System.out.println(s);
        });

    }
}

ffad756892354f308fa78b29a06d3efb.png

ArrayList集合的底层原理

1.底层原理

基于数组实现的

数组:是连续区域,并且会把这一块连续区域分割成若干的相等的小区域,每块区域都有自己的索引,每块区域都是装自己的数据的。

47c0b76a53744be89cd78b382f966092.png

 0419b1067db547cbb0d31591f0562961.png

2.适合的应用场景

0b1e0813c75d44eabeb8cdd620ea98a6.png

LinkedList集合的底层原理

是基于双链表实现的

什么是链表?有什么特点?

链表就是由一个一个的结点组成的,结点在内存中不是连续存储的,和数组不一样;链表的数据是分散存储的,链表的每个结点除了会包含数据值之外还会包含下一个结点的地址信息,通过这个地址信息是可以找到下一个结点的。

90fce4e7638b450d934f06a44c93097e.png 33be21a4a2e741b996a60dd1c0fb1063.pngc8c26ff4618d4b8f881e8482f56a855a.png

 应用场景:

(1)可以用来设计队列(先进先出,后进后出):只是在首尾增删元素,用LinkedList来实现很合适。 

(2)可以用来设计栈(后进先出,先进后出):只是在首增删元素,用LinkedList来实现很合适。 



import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        //1.创建一个队列
        LinkedList<String> queue = new LinkedList<>();//LinkedList集合就当作队列来看待
        //这里就不要用多态写代码了List没有首尾操作的特有方法是LinkedList基于双链表特有的方法
        queue.addLast("第一");
        queue.addLast("第二");
        queue.addLast("第三");
        queue.addLast("第四");
        System.out.println(queue);
        //出队
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());
        System.out.println(queue);
        System.out.println("-------------------------------------------");
        //2.创建一个栈对象
        LinkedList<String> stack = new LinkedList<>();//同理,这里不要用多态
        //进栈(push)
        /*stack.addFirst("第一颗子弹");
        stack.addFirst("第二颗子弹");
        stack.addFirst("第三颗子弹");
        stack.addFirst("第四颗子弹");
        stack.addFirst("第五颗子弹");*/
        stack.push("第一颗子弹");
        stack.push("第二颗子弹");
        stack.push("第三颗子弹");
        stack.push("第四颗子弹");
        stack.push("第五颗子弹");//push的底层就是addFirst
        System.out.println(stack);
        //出栈(pop)
        System.out.println(stack.removeFirst());
        System.out.println(stack.pop());//同理pop底层也就是removeFirst
        System.out.println(stack);


    }
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/444275.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android开发环境搭建

android开发环境搭建 Android 开发环境搭建1.JDK安装与配置1.1 Jdk官方下载1.2 JDK安装1.3 环境变量配置1.4 新建JAVA_HOME1.5 修改Path变量1.6 新建classpath1.7 验证环境是否配置完成 2.开发工具二选一1.如何创建一个工程2.工程的目录结构的了解3.与开发的相关的常规视图4.我…

记录WiFi转WDS桥接再转网线

第一步&#xff1a; 把LAN口修改为 和 主路由器的前三位段位编码一致&#xff0c;最后一位设置大于250&#xff0c;减少抢IP的可能性。这个步骤是修改 桥接路由器的登录IP 第二部&#xff1a; 设置IP池。网关和dns服务器都是同一个&#xff0c;用手机连接主路由器wifi可以找到 …

【Flink】Flink 的八种分区策略(源码解读)

Flink 的八种分区策略&#xff08;源码解读&#xff09; 1.继承关系图1.1 接口&#xff1a;ChannelSelector1.2 抽象类&#xff1a;StreamPartitioner1.3 继承关系图 2.分区策略2.1 GlobalPartitioner2.2 ShufflePartitioner2.3 BroadcastPartitioner2.4 RebalancePartitioner2…

HTML 学习笔记(五)超链接

HYperText 超文是用超链接的方式&#xff0c;将不同空间的文字信息组合在一起的网状文其就像一个桥梁&#xff0c;建立了不同页面中的联系&#xff0c;实现了访问不同网站中页面的功能 <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

深度学习+感知机

深度学习感知机 1感知机总结 2多层感知机1XOR2激活函数3多类分类总结 3代码实现 1感知机 是个很简单的模型,是个二分类的问题。 感知机&#xff08;perceptron&#xff09;是Frank Rosenblatt在1957年提出的一种人工神经网络&#xff0c;被视为一种最简单形式的前馈神经网络&…

【C语言】深入理解指针(进阶篇)

一、数组名的理解 数组名就是地址&#xff0c;而且是数组首元素的地址。 任务&#xff1a;运行以下代码&#xff0c;看数组名是否是地址。 #include <stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,0 };printf("&arr[0] %p\n", &arr[0]);pri…

[Java安全入门]三.CC1链

1.前言 Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库&#xff0c;它提供了很多强大的数据结构类型和实现了各种集合工具类。Commons Collections触发反序列化漏洞构造的链叫做cc链&#xff0c;构造方式多种&#xff0c;这里先学习cc1链…

Dubbo-记录

1.概念 Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo 提供的丰富服务治理…

C语言--函数指针变量和函数指针数组的区别(详解)

函数指针变量 函数指针变量的作用 函数指针变量是指向函数的指针&#xff0c;它可以用来存储函数的地址&#xff0c;并且可以通过该指针调用相应的函数。函数指针变量的作用主要有以下几个方面&#xff1a; 回调函数&#xff1a;函数指针变量可以作为参数传递给其他函数&…

【数仓】通过Flume+kafka采集日志数据存储到Hadoop

相关文章 【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用&#xff08;集群配置&#xff09;【数仓】Hadoop集群配置常用参数说明【数仓】zookeeper软件安装及集群配置【数仓】kafka软件安装及集群配置【数仓】flume软件安…

【深度学习笔记】6_10 双向循环神经网络bi-rnn

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 6.10 双向循环神经网络 之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的&#xff0c;因此它们都将信…

【Leetcode打卡】递归回溯

【Leetcode打卡】递归回溯 784. 字母大小写全排列 class Solution { public:int find(string s,int pos){int ipos;while(i<s.size()){if(isalpha(s[i])){return i;}i;}return -1;}void turn(string& s,int pos){if(islower(s[pos])){s[pos]toupper(s[pos]);}else{s[po…

ChatGPT提示词工程:prompt和chatbot

ChatGPT Prompt Engineering for Developers 本文是 https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/ 这门课程的学习笔记。 ChatGPT提示词工程&#xff1a;prompt和chatbot 文章目录 ChatGPT Prompt Engineering for DevelopersWhat …

Linux下使用open3d进行点云可视化(.bin文件)

整个场景可视化&#xff1a; import numpy as np import open3d as o3ddef read_kitti_bin_point_cloud(bin_file):# 加载.bin文件point_cloud_np np.fromfile(bin_file, dtypenp.float32).reshape(-1, 4)# 仅使用X, Y, Z坐标&#xff0c;忽略反射率point_cloud_o3d o3d.geo…

代码训练LeetCode(6)编辑距离

代码训练(6)LeetCode之编辑距离 Author: Once Day Date: 2024年3月9日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 72. 编辑距离 - 力扣&#xff08;LeetCode&#xff09;力扣 (LeetCode) 全球极客挚爱的技…

44岁「台偶一哥」成现实版「王子变青蛙」,育一子一女成人生赢家

电影《周处除三害》近日热度极高&#xff0c;男主角阮经天被大赞演技出色&#xff0c;最让人意想不到&#xff0c;因为该片在内地票房报捷&#xff0c;很多人走去恭喜另一位台湾男艺人明道&#xff0c;皆因二人出道时外貌神似&#xff0c;至今仍有不少人将两人搞混。 多年过去&…

RNN预测正弦时间点

import torch.nn as nn import torch import numpy as np import matplotlib matplotlib.use(TkAgg) from matplotlib import pyplot as plt # net nn.RNN(100,10) #100个单词&#xff0c;每个单词10个维度 # print(net._parameters.keys()) #序列时间点预测num_time_steps 50…

什么是RabbitMQ的死信队列

RabbitMQ的死信队列&#xff0c;是一种用于处理消息&#xff0c;处理失败或无法路由的消息的机制。它允许将无法被正常消费的消息重新路由到另一个队列&#xff0c;以便稍后进行进一步的处理&#xff0c;分析或排查问题。 当消息队列里面的消息出现以下几种情况时&#xff0c;就…

ChatGPT 控制机器人的基本框架

过去的一年&#xff0c;OpenAI的chatGPT将自然语言的大型语言模型&#xff08;LLM&#xff09;推向了公众的视野&#xff0c;人工智能AI如一夜春风吹遍了巴黎&#xff0c;全世界都为AI而疯狂。 OpenAI ChatGPT是一个使用人类反馈进行微调的预训练生成文本模型。不像以前的模型主…

每日一练:LeeCode-209、长度最小的子数组【滑动窗口+双指针】

每日一练&#xff1a;LeeCode-209、长度最小的子数组【滑动窗口双指针】 思路暴⼒解法滑动窗口 本文是力扣 每日一练&#xff1a;LeeCode-209、长度最小的子数组【滑动窗口双指针】 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐 L…