数组:
.长度固定
.可以存储基本类型,也可以存储引用类型
.存储元素类型一致
数组可以在内存中连续存储多个元素的构造,在内存中的分配也是连续的
数组中的元素通过数组的下标进行访问的,下标从0开始的
优点 :
按照索引查询元素速度快
按照索引遍历数组方便
缺点:
数组的大小固定后就不能扩容了
数组只能存储一种类型的数据
添加,删除的操作慢,因为要移动其他的元素
适用场景:
频繁查询,对存储空间要求不大,很少增加和删除的情况

集合:
特点
长度可变
只可以存储引用类型
可以存储多种类型

List:有序、可以有重复的集合
List 接口的三个典型实现:
  ①、List list1 = new ArrayList();
    底层数据结构是数组,查询快,增删慢;线程不安全,效率高
  ②、List list2 = new Vector();
    底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合
  ③、List list3 = new LinkedList();
    底层数据结构是链表,查询慢,增删快;线程不安全,效率高
    
Set
HashSet:要保证元素唯一性,需要覆盖掉Object中的equals和hashCode方法(因为底层是通过这两个方法来判断两个元素是否是同一个)。

**TreeSet:**以二叉树的结构对元素进行存储,可以对元素进行排序。
排序的两种方式:
1、元素自身具备比较功能,元素实现Comparable接口,覆盖compareTo方法。
2、建立一个比较器对象,该对象实现Comparator接口,覆盖compare方法,并将该对象作为参数传给TreeSet的构造函数(可以用匿名内部类)。
Map接口其特点是:元素是成对出现的,以键和值的形式体现出来,键要保证唯一性:常用类有:HashMap,Hashtable ,TreeMap。
HashMap:线程不安全等的,允许存放null键null值。
Hashtable:线程安全的,不允许存放null键null值。
TreeMap:可以对键进行排序(要实现排序方法同TreeSet)。

链表:
通过一个链子把多个结点(元素)连接起来,由数据和地址组成的一个元素,
节点本身必须有一个地址值(就是下一个元素的地址值)
优点:
链表是很常用的一种数据结构,不需要初始化容量,
可以任意加减元素;
添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,
所以添加,删除很快;
缺点:
因为含有大量的指针域,占用空间较大;
查找元素需要遍历链表来查找,
非常耗时。
适用场景:
数据量较小,需要频繁增加,删除操作的场景

队列:
是一种先进先出的数据构造,也是运算受限制的线性表,只可以在对头删除元素,在队尾插入元素
线性表是同一类型数据的一个有限序列
元素之间的先后排列次序蕴涵着其线性关系。线性表中的第一个元素a1称为表头元素,an称为表尾元素
队列可以分为顺序队列和链式队列,根据不同的存储方式,定义的结构也不同。
顺序队列包含一个数组成员,有二端包含一个数组成员 我们把删除一端叫头
插入一端叫尾
链接存储的有序线性表类需要继承链接线性表类LinkList和实现有序线性表接口SortedList

区别:
1.占用的内存空间
链表存放的内存空间可以是连续的,也可以是不连续的,数组则是连续的一段内存空间。一般情况下存放相同多的数据数组占用较小的内存,而链表还需要存放其前驱和后继的空间。
2.长度的可变性
链表的长度是按实际需要可以伸缩的,而数组的长度是在定义时要给定的,如果存放的数据个数超过了数组的初始大小,则会出现溢出现象。
3.对数据的访问
链表方便数据的移动而访问数据比较麻烦;数组访问数据很快捷而移动数据比较麻烦。
链表和数组的差异决定了它们的不同使用场景,如果需要很多对数据的访问,则适合使用数组;如果需要对数据进行很多移位操作,则设和使用链表。

Java中数组、集合、链表、队列的数据结构和优缺点和他们之间的区别的更多相关文章

  1. java中的集合链表

    java中的集合类有很多种,每个都有自己的一些特点,推荐你专门在这方面研究一下,比方Vector,ArrayList,,LinkedList,Hashtable等,其中你问到的链表,是不是指Linke ...

  2. java中数组以及集合

    java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5]  a是在java栈中分配的引用变量,类型是int[ ...

  3. java中数组、集合、字符串之间的转换,以及用加强for循环遍历

    java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...

  4. java中的集合操作类(未完待续)

    申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...

  5. JAVA中的集合容器操作类

    目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...

  6. Java中的集合(五)继承Collection的List接口

    Java中的集合(五)继承Collection的List接口 一.List接口简介 List是有序的Collection的,此接口能够精确的控制每个元素插入的位置.用户能够根据索引(元素在List接口 ...

  7. Java中的集合(三)继承Collection的Queue接口

    Java中的集合(三)继承Collection的Queue接口 一.Queue介绍 Queue接口继承自Collection接口,是Java中定义的一种队列数据结构,元素是有序的(按插入顺序排序),先 ...

  8. 万字长文深入理解java中的集合-附PDF下载

    目录 1. 前言 2. List 2.1 fail-safe fail-fast知多少 2.1.1 Fail-fast Iterator 2.1.2 Fail-fast 的原理 2.1.3 Fail- ...

  9. Java中的集合概述

    Java中的集合类有两个重要的分支,分别是接口Collection(包括List,Set等)和接口Map. 由于HashSet的内部实现原理使用了HashMap,所以我们先来了解Map集合类. 1.H ...

  10. Java中各种集合(字符串类)的线程安全性!!!

    Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...

随机推荐

  1. SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel

    前言:作者查阅了Sentinel官网.51CTO.CSDN.码农家园.博客园等很多技术文章都没有很准确的springmvc集成Sentinel的示例,因此整理了本文,主要介绍SpringMvc集成Se ...

  2. IDEA提示无法解析resourse中的方法getResourceAsStream

    一.解决方案 1.错误展示: InputStream inputStream = Resources.getResourceAsStream(resource); 2.报错展示: 报错原因:这是因为找 ...

  3. 231106-jmeter随笔

    1. 获取接口的执行时间 String ctime = prev.getTime().toString();2. String转int int c = Integer.parseInt(ctime); ...

  4. jdk11的HttpClient

    我们都知道在jdk11之前都在用okhttp或者org.apache.httpcomponents  其实早在jdk9的时候这个方案就在孵化中 上面的截图来自openjdk的官网,注:openjdk是 ...

  5. [ABC313F] Flip Machines

    Problem Statement There are $N$ cards numbered $1$ through $N$. Each face of a card has an integer w ...

  6. C++ Qt开发:DateTime日期时间组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QDateTi ...

  7. 向mq写消息

    1.基础版本 import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.comm ...

  8. ElasticSearch之Get index API

    获取指定索引的基本信息. 命令样例如下: curl -X GET "https://localhost:9200/testindex_001?pretty" --cacert $E ...

  9. ElasticSearch之Health API

    查看当前集群全部健康指标的信息,执行如下命令: curl -X GET "https://localhost:9200/_health_report?pretty" --cacer ...

  10. Pikachu漏洞靶场 Sql Inject(SQL注入)

    SQLi 哦,SQL注入漏洞,可怕的漏洞. 文章目录 SQLi 数字型注入(post) 字符型注入(get) 搜索型注入 xx型注入 "insert/update"注入 inser ...