Java数据结构、list集合、ArrayList集合、LinkedList集合、Vector集合

数据结构:

数据存储的常用结构有:栈、队列、数组、链表、红黑树。

栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作,简单的说,采用该结构的集合,对元素的存取有着前进后出、栈的入口和出口都是栈的顶端位置的特点。
在这里插入图片描述
队列:queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。简单的说采用该结构的集合有先进先出、队列的入口和出口各占一侧的特点。
在这里插入图片描述
数组:有序的元素序列,数组是在内存中开辟的一段连续的空间,并在此空间存放元素,就像是一排出租屋,有100个房间,这几100个房间是有顺序编号的,通过编号就可以快速的找到元素,其特点:通过索引可快速找到元素,但是增删元素慢;(指定索引位置新增元素:需要创建一个新数组,将指定新元素存储在指定索引位置,在把原数组元素根据索引,复制到新的数组对应索引的位置)
在这里插入图片描述
链表:linked list,由一系列结点node组成,链表中每个元素称为结点,结点可以在运行时动态生成,每个结点包括两部分,一是存储数据元素的数据域,二是存储下一个结点地址的指针域,常说的链表有单向链表和双向链表,其单向链表特点:多个结点之间通过地址进行连接,查找元素慢,增删元素快(查找某个元素需要通过连接的结点依次向后查找指定元素,增加元素只需要修改连接下个元素的地址即可
在这里插入图片描述
红黑树:二叉树,binary tree,是每个结点不超过2的有序树,顶上的结点称为根节点,两边的结点称为左子树和右子树,其特点:查询速度非常快。
在这里插入图片描述
list集合 :

import java.util.ArrayList;
import java.util.List;// List集合继承了Collection接口,具有以下特点:存和取元素是有序的、有索引且包含了带索引的方法,允许存储重复的元素
public class ListClass {public static void main(String[] args) {// 创建一个list集合:并使用它特有的方法:List<String> list = new ArrayList<String>();// 1.add()向集合中添加元素:add方法传入一个参数时表示给list末尾追加元素;当有两个参数时,参数1表示要追加元素的索引位置,参数二表示追加的元素list.add("a");list.add("a");list.add("bc");System.out.println(list); // [a, a, bc]list.add(1,"b");System.out.println(list); // [a, b, a, bc]// 2.remove()移除指定索引位置的元素,并返回被移除的元素,接收一个参数时即元素索引String removedElement = list.remove(0);System.out.println(removedElement); // aSystem.out.println(list); // [b, a, bc]// 3.set()用某个元素替换集合中指定位置的元素,并将之前的被替换的元素返回,接收两个参数时,第一个参数是要替换元素的索引位置,第二个参数表示要替换的新元素String setElement = list.set(1, "f");System.out.println(setElement); // aSystem.out.println(list); // [b, f, bc]// 4.get()获取指定索引位置的元素,传入一个参数表示索引String getElement = list.get(1);System.out.println(getElement); // f// 扩展:遍历集合可以使用普通的for-i,通过get(i)拿到每一个元素外,还可以使用迭代器,除此之外,也可以使用加强版for(类似JavaScript中的for in,只需将in改为冒号,且这里变量表示某个元素,而JavaScript中变量表示索引),如:for (String item : list) {System.out.println(item); // 分别打印每一个元素};}
}

ArrayList集合底层原理 :

ArrayList是List集合的一个实现类,底层是一个数组,数组的特点长度不变,当使用add等方法的时候,实际是先创建一个长度比原来多1的新数组,然后将旧数组拷贝到新数组里面去,这也不难理解ArrayList增删难的弊端,又因为数组中元素的索引是连续的,因此查询速度非常快。

LinkedList集合:

此集合是List接口的链表实现,此实现类为多线程,即非同步。特别注意此实现类不能使用多态的方式创建对象。

import java.util.LinkedList;// LinkedList是List接口的一个实现类,底层是一个链表结构,查询慢,增删快,并且该实现类有很多特有的方法来操作元素,因为是特有的,因此不能使用多态的方式来使用这些特有的方法。
public class LinkedListClass {public static void main(String[] args) {// 因为LinkedList不能使用多态的方式创建对象,因此我们使用普通的方式创建对象并使用其特有的方法:LinkedList<String> lt = new LinkedList<String>();// 使用非特有方法add()向结合中添加默认元素:lt.add("a");lt.add("b");lt.add("c");System.out.println(lt); // [a, b, c]// 下面是特有方法:// 1.addFirst()方法向集合的最前面添加元素:lt.addFirst("F");System.out.println(lt); // [F, a, b, c]// 2.push()向集合最前面添加元素,等效于addFirst(),和javascript中push方法有个天壤之别,因为js中push方法是在数组后面追加元素:lt.push("H");System.out.println(lt); // [H, F, a, b, c]// 3.addLast()向集合的最后面添加元素,和add()没多大区别:lt.addLast("V");System.out.println(lt); // [H, F, a, b, c, V]// 4.getFirst()获取并返回第一个元素:空集合不能使用此方法,否则会报异常String firstItem = lt.getFirst();System.out.println(firstItem); // H// 5.getLast()获取并返回最后一个元素:空集合不能使用此方法,否则会报异常String lastItem = lt.getLast();System.out.println(lastItem); // V// 6.removeFirst()移除并返回集合的第一个元素:String reFiItem = lt.removeFirst();System.out.println(reFiItem); // HSystem.out.println(lt); // [F, a, b, c, V]// 7.pop()移除返回集合第一个元素,和removeFirst()类似:String pFiItem = lt.pop();System.out.println(pFiItem); // FSystem.out.println(lt); // [a, b, c, V]// 8.removeLast()移除并返回集合中最后一个元素:String reLastItem = lt.removeLast();System.out.println(reLastItem); // VSystem.out.println(lt); // [a, b, c]// 9.clear()清空集合中的元素:lt.clear();System.out.println(lt); // []}
}

Vector集合:

Vector类可以实现可增长的对象数组,单线程的。之前的旧api,被ArrayList取代了。

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

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

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

相关文章

第11章 GUI Page436 使用缓冲DC, wxBufferedPaintDC

所谓“缓冲DC”&#xff0c;是指将所有图元都先划到一个人眼看不到的“设备上下文”之上&#xff0c;最后再一次性复制到真正的屏幕DC之上&#xff0c;这样我们就看不到中间画的过程了&#xff0c;也就不会感到闪烁了。 注意&#xff0c;这时不能解除ScrolledWindow1的背景擦除…

Tomcat+JSP经典配置实例

经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题&#xff0c;于是总结了一下如何tomcat下配置jsp、servlet和ben&#xff0c;希望对那些初学者有所帮助。    一、开发环境配置    第一步&#xff1a;下载j2sdk和tomcat&#xff1a;到sun官方站&#xf…

python海龟编辑器画小汽车_【海龟编辑器下载】海龟编辑器(Python编辑器) v1.3.4 官方免费版-趣致软件园...

海龟编辑器是一款专为广大少儿打造的Python编辑器&#xff0c;该软件功能强大且使用便利&#xff0c;可以帮助孩子们以搭积木的方式来学习Python&#xff0c;并且支持Python代码和图形化积木的双向互相转译&#xff0c;不但可以有效提升孩子的学习兴趣&#xff0c;而且还能够降…

微信小程序中组件的使用

微信小程序中组件的使用&#xff1a; 微信小程序中组件定义在项目根目录下components文件夹下&#xff0c;在页面使用的时候需要在页面的json文件中声明&#xff0c;如 父组件向子组件传值及子组件向父组件传值&#xff1a; 父组件wxml中&#xff1a;通过属性绑定值的方式向…

如何保证交叉表编译器和目标系统版本一致_嵌入式系统词汇表

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群AASIC(专用集成电路) Application-Specific Integrated Circuit. A piece of custom-designed hardware in a chip. 专用集成电路。一个在一个芯片上定制设计的硬件。address bus (地…

动态定义数组

首先&#xff1a;为什么需要动态定义数组呢&#xff1f; 这是因为&#xff0c;很多情况下&#xff0c;在预编译过程阶段&#xff0c;数组的长度是不能预先知道的&#xff0c;必须在程序运行时动态的给出 但是问题是&#xff0c;c要求定义数组时&#xff0c;必须明确给定数组的…

sql随机抽取数据50条_厉害!苏宁通过citus打造分布式数据库抗住DB高负载

2018-07-16 23:59内容来源&#xff1a;2017 年 10 月 20 日&#xff0c;苏宁云商IT总部资深技术经理陈华军在“PostgreSQL 2017中国技术大会”进行《苏宁citus分布式数据库应用实践》演讲分享。IT 大咖说&#xff08;微信id&#xff1a;itdakashuo&#xff09;作为独家视频合作…

java中Debug调试、异常的概念、异常体系、处理异常的关键字try/catch/finally/throw/throws、多个异常使用捕获并处理的方式、继承关系中处理异常、自定义异常类

Debug调试&#xff1a; bug指程序当中遇到的一些错误异常&#xff0c;Debug指调试bug,找到bug对其解决&#xff1b;debug可以让代码逐行执行&#xff0c;查看代码执行的过程&#xff0c;调试程序中出现的bug或异常。 public class DebugClass {public static void main(Strin…

densenet网络结构_FC-DENSENET用于图像分割学习笔记

近日使用FC Dense Net 做分割&#xff0c;记录学习使用过程。FC-DenseNet 原文链接&#xff1a;https://arxiv.org/abs/1611.09326 《The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation》初次使用此网络&#xff0c;第一眼是被这个名…

mongodb mysql资源占用_如何限制mongodb启动时占用过多内存

默认情况下&#xff0c;mongodb占用的内存大小为&#xff1a;Starting in 3.4, the WiredTiger internal cache, by default, will use the larger of either:50% of RAM minus 1 GB, or256 MB.下面我们来看一下限制mongodb启动时占用内存的方法&#xff1a;新增配置文件 /etc/…

js ...运算符_「 giao-js 」用js写一个js解释器

前言在这篇文章中,我们将通过 JS 构建我们自己的 JS 解释器,用 JS 写 JS,这听起来很奇怪,尽管如此,这样做我们将更熟悉 JS,也可以学习 JS 引擎是如何工作的!什么是解释器 (Interpreter) ?解释器是在运行时运行的语言求值器,它动态地执行程序的源代码。 解释器解析源代码,从源代…

地区json文件_【小例子】使用jQuery实现省市区三级联动显示,附源码json文件

开发工具-intellij IDEA需求1.实现对json文件的读取。2.可以在省级选择所有省名和直辖市名3.选择一级省名后自动刷新市名4.选择二级市名后自动刷新区名逻辑分析第一步&#xff1a;读取json文件第二步&#xff1a;遍历出所有一级的省名第三步&#xff1a;把遍历出来的省名动态追…

qt 状态栏

有段时间没有写过博客了。假期去上海旅游&#xff0c;所以一直没有能够上网。现在又来到这里&#xff0c;开始新的篇章吧&#xff01;今天的内容主要还是继续完善前面的那个程序。我们要为我们的程序加上一个状态栏。状态栏位于主窗口的最下方&#xff0c;提供一个显示工具提示…

动态获取textarea后面的p标签_HTML简单标签连起实现的小玩意:

《今天不发知识点&#xff0c;刚被误封了&#xff0c;所有没有太多时间去给整理哈&#xff0c;请谅解》&#xff08;谢谢欣赏&#xff09;前面发了那么多HTML标签&#xff0c;今天来玩个小视频&#xff0c;小白也能几分钟就会的&#xff0c;代码没有写好&#xff0c;时间急了点…

elipse+pydev+python开发arcgis脚本程序

环境配置参考&#xff1a;http://www.cnblogs.com/halfacre/archive/2012/07/22/2603848.html 添加arcpy类库、arctoolbox、arcgis-bin如下所示。 windos——preference——pydev 完成环境配置。 二、获取文件路径Python方法 os.getcwd()返回的是当前文件的目录。假如我的代码…

BZOJ3427 Poi2013 Bytecomputer

可以YY一下嘛 最后一定是-1, -1, ..., -1, 0, 0, ... 0, 1, 1, ..., 1的一个数列 于是f[i][j]表示到了第i个数&#xff0c;新数列的第j项为-1 or 0 or 1的的最小代价 然后就没有然后了 1 /**************************************************************2 Problem: 3427…

mysql timdir_MYSQL学习笔记——数据类型

mysql的数据类型可以分为三大类&#xff0c;分别是数值数据类型、字符串数据类型以及日期时间数据类型。数值数据类型数值类型又可以分为整型、浮点类型、Decimal。整型mysql的整型可以分为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT&#xff0c;下表给出了每个类型的存储空间…

python编写网页游戏脚本_[大数据]用Python脚本做一些网页游戏中力所能及的自动化任务 - 码姐姐找文...

下面是一段自动登录360传奇霸业游戏的脚本&#xff1a; from pymouse importPyMouseimporttimeimportwebbrowserfrom pykeyboard importPyKeyboard url "http://cqby.wan.360.cn/game_login.php?server_idS577&&srcloginhistory"webbrowser.open_new_tab(ur…

flutter怎么添加ios网络权限_使用Flutter控制蓝牙通讯

背景知识视频教程Dart和Flutter&#xff1a;完整的开发人员指南 - 国外课栈​viadean.comFlutter使用Firestore构建复杂的Android和ios应用 - 国外课栈​viadean.comFlutter的实际项目 - 国外课栈​viadean.com您想使用蓝牙玩物联网设备&#xff0c;但不能在其中放置任何软件吗…

python网页结构分析_Python爬虫基础之网页组成解析

当我们用浏览器访问网站时&#xff0c;每个网页的大不相同&#xff0c;你是否想过它为什么会呈现多种不同的样式呢&#xff1f;就让我们一起了解一下网页的基本组成、结构和节点等内容吧&#xff01;网页的组成 网页可以分为三大部分——HTML、CSS和JavaScript。如果把网页比作…