百无聊赖之JavaEE从入门到放弃(十九)容器之List

目录

一.容器简介

二.容器的结构

三.Collection接口介绍

四.List接口介绍

五.ArrayList

1.基本操作

2.索引操作

3.ArrayList的并集、交集、差集

六.Vector容器

七.LinkedList


一.容器简介

容器,是用来容纳物体、管理物体。生活中 , 我们会用到各种各样的容器。如锅碗瓢盆、箱子和包等。
程序中的 容器 也有类似的功能,用来容纳和管理数据。
开发和学习中需要时刻和数据打交道,如何组织这些数据是我们编程中重要的内容。 我们一般通过 容器 来容纳和管理数 据。事实上,我们前面所学的数组就是一种容器,可以在其中
放置对象或基本类型数据。
数组的优势:是一种简单的线性序列,可以快速地访问数组元素,效率高。如果从查询效率和类型检查的角度讲,数组是最 好的。
数组的劣势:不灵活。容量需要事先定义好,不能随着需求的变化而扩容。比如:我们在一个用户管理系统中,要把今天注 册的所有用户取出来,那么这样的用户有多少个?我们在写程 序时是无法确定的。因此,在这里就不能使用数组。
基于数组并不能满足我们对于 管理和组织数据的需求 ,所以我们需要一种更强大、更灵活、容量随时可扩的容器来装载我们的对 象。 这就是我们今天要学习的容器,也叫集合 (Collection)

二.容器的结构

单例集合:

双例集合:

三.Collection接口介绍

Collection 表示一组对象,它是集中、收集的意思。 Collection 接口 的两个子接口是 List Set 接口。

 

Collection 接口中定义的方法:
由于 List Set Collection 的子接口,意味着所有 List Set 的实现类都有上面的方法。
JDK8 之后, Collection 接口新增的方法(将在 JDK 新特性和函数式编程中介绍):

四.List接口介绍

List 接口特点
List 是有序、可重复的容器。
有序: 有序 ( 元素存入集合的顺序和取出的顺序一致 ) List 中每个元素都有索引标记。可以根据元素的索引标记(在 List 中的位置)访问 元素,从而精确控制这些元素。
可重复: List 允许加入重复的元素。更确切地讲, List 通常允许满足e1.equals(e2) 的元素重复加入容器。
List 接口中的常用方法
除了 Collection 接口中的方法, List 多了一些跟顺序 ( 索引 ) 有关的方法,参见下表:

五.ArrayList

ArrayList List 接口的实现类。是 List 存储特征的具体实现。
ArrayList 底层是用数组实现的存储。特点:查询效率高,增删效率低,线程不安全。

1.基本操作

public class ArrayListTest {public static void main(String[] args) {//实例化ArrayList容器List<String> list  =new ArrayList<>();//添加元素boolean flag1=list.add("oldlu");boolean flag2=list.add("itbz");boolean flag3=list.add("sxt");boolean flag4=list.add("sxt");System.out.println(flag1+"\t"+flag2+"\t"+fl ag3+"\t"+flag4);//删除元素boolean flag4=list.remove("oldlu");System.out.println(flag4);//获取容器中元素的个数int size=list.size();System.out.println(size);//判断容器是否为空boolean empty=list.isEmpty();        System.out.println(empty);//容器中是否包含指定的元素boolean value=list.contains("itbz");System.out.println(value);        //清空容器list.clear();//将ArrayList转换为数组Object[] objects1=list.toArray();      System.out.println(Arrays.toString(objects1));}
}

2.索引操作

ArrayList可以根据索引位置操作元素。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class ArrayListTest2 {public static void main(String[] args) {//实例化ArrayList容器List<String> list  = new ArrayList<>();//添加元素list.add("oldlu");list.add("itbz");//向指定位置添加元素list.add(0,"sxt");Object[] objects = list.toArray();System.out.println(Arrays.toString(objects));System.out.println("获取元素");String s = list.get(1);System.out.println(s);System.out.println("获取所有元素方式一");//使用普通for循环for(int i=0;i<list.size();i++){System.out.println(list.get(i));}System.out.println("获取所有元素方式二");for(String str: list){System.out.println(str);}System.out.println("元素替换");String k = list.set(1, "kevin");System.out.println(k);System.out.println("根据索引的位置删除元素");String remove = list.remove(1);System.out.println(remove);System.out.println("查找元素在容器中第一次出现的位置");int sxt = list.indexOf("sxt");System.out.println(sxt);System.out.println("查找元素在容器中最后一次出现的位置");list.add("sxt");int sxt1 = list.lastIndexOf("sxt");System.out.println(sxt1);}
}

3.ArrayList的并集、交集、差集

import java.util.ArrayList;
import java.util.List;public class ArrayListTest3 {public static void main(String[] args) {//并集操作:将另一个容器中的元素添加到当前容器中List<String> a  = new ArrayList<>();a.add("a");a.add("b");a.add("c");List<String> b = new ArrayList<>();b.add("a");b.add("b");b.add("c");//a并集ba.addAll(b);for(String str :a){System.out.println(str);}System.out.println("------------------");//交集操作:保留相同的,删除不同的List<String> a1  = new ArrayList<>();a1.add("a");a1.add("b");a1.add("c");List<String> b1 = new ArrayList<>();b1.add("a");b1.add("d");b1.add("e");//交集操作a1.retainAll(b1);for(String str :a1){System.out.println(str);}System.out.println("-------------");//差集操作:保留不同的,删除相同的List<String> a2  = new ArrayList<>();a2.add("a");a2.add("b");a2.add("c");List<String> b2= new ArrayList<>();b2.add("b");b2.add("c");b2.add("d");a2.removeAll(b2);for(String str :a2){System.out.println(str);}}
}

 ArrayList底层是用数组实现的存储。

六.Vector容器

Vector 容器的基本使用
Vector 底层是用数组实现的,相关的方法都加了同步检查,因此 线程安全 , 效率低 。比如, indexOf 方法就增加了 synchronized 同步 标记。

Vector 的使用
Vector 的使用与 ArrayList 是相同的,因为他们都实现了 List 接口,对 List 接口中的抽象方法做了具体实现。

import java.util.List;
import java.util.Vector;public class VectorTest {public static void main(String[] args) {//实例化Vector容器List<String> v = new Vector<>();//添加v.add("a");v.add("b");v.add("c");v.add("a");//遍历Vector容器for(int i=0;i<v.size();i++){System.out.println(v.get(i));}}
}

七.LinkedList

容器介绍

LinkedList 底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。
双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前一个节点和后一个节点。所以,从双向链表中 的任意一个节点开始,都可以很方便地找到所有节点。
LinkedList 的存储结构图

每个节点都应该有 3 部分内容:
如何选用 ArrayList LinkedList Vector?
  • 需要线程安全时,用Vector
  • 不存在线程安全问题时,并且查找较多用ArrayList(一般使用它)
  • 不存在线程安全问题时,增加或删除元素较多用LinkedList
LinkedList 容器的使用( List 标准)
LinkedList 实现了 List 接口,所以 LinkedList 是具备 List 的存储特征的( 有序,元素有重复 )
import java.util.LinkedList;
import java.util.List;public class LinkedListTest {public static void main(String[] args) {//实例化LinkedList容器List<String> list = new LinkedList<>();//添加元素boolean a = list.add("a");boolean b = list.add("b");boolean c = list.add("c");list.add(3,"a");System.out.println(a+"\t"+b+"\t"+c);//获取容器中的所有元素for(int i=0;i<list.size();i++){System.out.println(list.get(i));}}
}

 LinkedList容器的使用(非List标准)

import java.util.LinkedList;public class LinkedListTest2 {public static void main(String[] args) {//示例化LinkedList容器LinkedList<String> list = new LinkedList<>();//将指定元素插入到开头list.addFirst("a");list.addFirst("b");list.addFirst("c");for(String str:list){System.out.println(str);}System.out.println("--------------------");//将指定元素插入到结尾LinkedList<String> list2 = new LinkedList<>();list2.addLast("a");list2.addLast("b");list2.addLast("c");for(String str:list2){System.out.println(str);}System.out.println("--------------------");//返回此链表的第一个元素System.out.println(list2.getFirst());//返回此链表的最后一个元素System.out.println(list2.getLast());System.out.println("--------------------");//移除此链表中的第一个元素,并返回这个元素/*String s = list2.removeFirst();System.out.println(s+" S");*///从此链表所表示的堆栈处弹出一个元素,等效于removeFirstSystem.out.println(list2.pop()+" S");//移除此链表中的最后一个元素,并返回这个元素String s1 = list2.removeLast();System.out.println(s1+" S1");//将元素推入此链表所表示的堆栈  这个等效于addFisrt(E e)list2.push("e");for(String str:list2){System.out.println(str);}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Yalmip学习笔记

这里写自定义目录标题 基本用法变量定义关于大MBilevel programming 注&#xff1a;这篇文章主要是留给自己查漏补缺的&#xff0c;所以从来没有使用过yalmip的读者看着会觉得跳来跳去。 基本用法 建模开始前&#xff0c;使用yalmip(clear)清空Yalmip的内部数据库。 下面是一个…

回归预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络多变量回归预测

回归预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络多变量回归预测 目录 回归预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-B…

real-time-emotion-detection 排坑记录

real-time-emotion-detection 排坑记录 任务踩坑回顾CV2包版本问题症状描述解决方法 模型文件路径问题症状描述解决办法 tensorflow版本问题症状描述解决办法 其他 任务 我之前跑了一个CNN情绪识别的开源代码&#xff0c;现在我想尝试把他用到我的另一个项目里。但当时那个项目…

「效果图渲染」效果图与3D影视动画渲染平台

效果图渲染和3D影视动画渲染都是视觉图像渲染的领域应用。效果图渲染主要服务于建筑、室内设计和产品设计等行业&#xff0c;这些领域通常对视觉呈现的精度和细节有较高要求。与之相比&#xff0c;3D影视动画渲染则普遍应用于电影、电视、视频游戏和广告等媒体领域&#xff0c;…

蓝桥杯---垒骰子

赌圣atm晚年迷恋上了垒骰子&#xff0c;就是把骰子一个垒在另一个上边&#xff0c;不能歪歪扭扭&#xff0c;要垒成方柱体。经过长期观察&#xff0c;atm 发现了稳定骰子的奥秘&#xff1a;有些数字的面贴着会互相排斥&#xff01;我们先来规范一下骰子&#xff1a;1的对面是4&…

arcgis javascript api4.x加载非公开或者私有的arcgis地图服务

需求&#xff1a; 加载arcgis没有公开或者私有的地图服务&#xff0c;同时还想实现加载时不弹出登录窗口 提示&#xff1a;​ 下述是针对独立的arcgis server&#xff0c;没有portal的应用场景&#xff1b; 如果有portal可以参考链接&#xff1a;https://mp.weixin.qq.com/s/W…

故障诊断 | 一文解决,CNN-LSTM卷积神经网络-长短期记忆神经网络组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,CNN-LSTM卷积神经网络-长短期记忆神经网络组合模型的故障诊断(Matlab) 模型描述 CNN-LSTM模型是一种结合了卷积神经网络(Convolutional Neural Network)和长短期记忆神经网络(Long Short-Term Memory)的组合模型,常用于数据故障…

让MySQL和Redis数据保持一致的4种策略

1 前言 先阐明一下 MySQL 和 Redis 的关系&#xff1a;MySQL 是数据库&#xff0c;用来持久化数据&#xff0c;一定程度上保证数据的可靠性&#xff1b;Redis 是用来当缓存&#xff0c;用来提升数据访问的性能。 关于如何保证 MySQL 和 Redis 中的数据一致&#xff08;即缓存…

百无聊赖之JavaEE从入门到放弃(十八)其他常用类

目录 一.Math 类 二.Random 类 三.File类 四.枚举 一.Math 类 java.lang.Math 提供了一系列静态方法用于科学计算&#xff1b;常用方法如下&#xff1a; abs 绝对值 acos,asin,atan,cos,sin,tan 三角函数 sqrt 平方根 pow(double a, double b) a 的 b 次幂 max(double a,…

2401Idea用GradleKotlin编译Java控制台中文出乱码解决

解决方法 解决方法1 在项目 build.gradle.kts 文件中加入 tasks.withType<JavaCompile> {options.encoding "UTF-8" } tasks.withType<JavaExec> {systemProperty("file.encoding", "utf-8") }经测试, 只加 tasks.withType<…

后端——go系统学习笔记(不断更新中......)

数组 固定大小 初始化 arr1 : [3]int{1, 2, 3} arr2 : [...]int{1, 2, 3} var arr3 []int var arr4 [4]int切片 长度是动态的 初始化 arr[0:3] slice : []int{1,2,3} slice : make([]int, 10)len和cap len是获取切片、数组、字符串的长度——元素的个数cap是获取切片的容量—…

计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)

基于YOLOv5的无人机视频检测与计数系统 摘要&#xff1a; 无人机技术的快速发展和广泛应用给社会带来了巨大的便利&#xff0c;但也带来了一系列的安全隐患。为了实现对无人机的有效管理和监控&#xff0c;本文提出了一种基于YOLOv5的无人机视频检测与计数系统。该系统通过使用…

C++类和对象(3)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任…

Web3生态系统:构建去中心化的数字社会

随着科技的飞速发展&#xff0c;我们正处在迈向数字未来的道路上&#xff0c;而Web3生态系统则成为这一变革的中心。不仅仅是技术的演进&#xff0c;Web3代表着对传统互联网体系的颠覆&#xff0c;致力于构建一个去中心化的数字社会。本文将深入探讨Web3的核心特征、对金融、社…

数据可视化 pycharts实现地理数据可视化(全球地图)

自用版 紧急整理一点可能要用的可视化代码&#xff0c;略粗糙 以后有机会再改 requirements&#xff1a; python3.6及以上pycharts1.9 数据格式为&#xff1a; 运行结果为&#xff1a; import pandas as pd from pyecharts.charts import Map, Timeline from pyecharts im…

C#读取和保存INI文件配置

在C#应用程序中&#xff0c;读取和保存配置文件是常见的任务&#xff0c;而INI文件是一种轻量级的配置文件格式。在以下代码中&#xff0c;我们将探讨如何使用C#创建一个窗体应用程序&#xff0c;并通过读取和保存INI文件配置来实现一些基本的功能。 创建IniHelper类 首先&…

Node需要了解的知识

Node能执行javascript的原因。 浏览器之所以能执行Javascript代码&#xff0c;因为内部含有v8引擎。Node.js基于v8引擎封装&#xff0c;因此可以执行javascript代码。Node.js环境没有DOM和BOM。DOM能访问HTML所有的节点对象&#xff0c;BOM是浏览器对象。但是node中提供了cons…

Arcgis10.3安装

所需软件地址 链接&#xff1a;https://pan.baidu.com/s/1aAykUDjkaXjdwFjDvAR83Q?pwdbs2i 提取码&#xff1a;bs2i 1、安装License Manager 点击License Manager.exe&#xff0c;默认下一步。 安装完&#xff0c;点击License Server Administrator&#xff0c;停止服务。…

时间序列预测 —— TCN模型

时间序列预测 —— TCN模型 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;在图像处理等领域取得了显著的成就&#xff0c;一般认为在处理时序数据上不如RNN模型&#xff0c;而TCN&#xff08;Temporal Convolutional Network&#xff09;…

autojs简介与对抗

前言 最近发现现在大多安卓工具很多都是autojs和按键精灵等这些非常易于开发的工具来做黑灰产自动化工具&#xff0c;此帖也是由此做为出发点来展开说说这个autojs&#xff0c;我们如何去做对抗。由于笔者对这块也是刚了解学习不久而且这篇帖子也会说的很简单&#xff0c;有很…