一、List和Map

1、特点

(1)、List

1、可以允许重复的对象。

2、可以插入多个null元素。

3、是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。

4、常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

(2)、Map

1、不是collection的子接口或者实现类。Map是一个接口。

2、Map的每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。

3、TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。

4、Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。

5、Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)。

(3)、区别

1、list是存储单列数据的集合,map是存储双列数据的集合;

2、list中存储的数据是有序的,map中存储的数据是无序的;

3、list允许重复,map的键不能重复,值可以重复。

二、List

1、Arraylist和Vector的区别

(1)、都实现了List接口(List接口继承了Collection接口)都是有序集合List集合规范制定(数据允许重复,可有通过索引取出数据)

(2)、ArrayList和Vector都是基于数组,因此大致代码相似。区别在于 Vector在Jdk1.0就有的古老集合, 因此包含大量方法名很长的方法。 Jdk1.2开始引入集合框架引入了List接口 Vector实现了List接口因此增加了一些List接口中的方法

(3)、总体来讲ArrayList可以完全取代Vector,除非有一些老古董强制要求Vector。Vectory是线程安全的因此性能较差。ArrayList是非线程安全所以接口性能较好。即使在多线程中也应该用ArrayList,因为可以通过Collections吧ArrayList和LInkedList转换成一个线程安全的集合

例子:List ls = Collections.synchronizedList(new ArrayList<>());

2、ArrrayList、Vecor、LinkedList的存储性能和特性

(1)、ArrayList Vector ==>> 数组方式存储数据

数组元素的数据 > 实际存储的数据以及增加和插入元素

按序号索引元素

插入元素 ==>>数组移动等内存操作

索引数据快、插入数据慢

(2)、Vector ==>> synchronized方法(线程安全)

性能上较ArrayList差

(3)、LinkedList ==>> 双向链表实现存储

序号索引数据需要向前或向后遍历

插入数据时只需要记录本项的前后项即可

所以插入速度较快

线程不安全

3、ArrrayList、Vecor、LinkedList容量以及适用场景

(1)、ArrayList

特点:

1、ArrayList 内部是通过动态数组实现的,它允许对元素进行快速随机访问;

2、当数组大小不满足时需要扩容,需要将已有数组移动到新的内存空间;

1、当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动代价比较高;

1、线程不安全。

初始容量:10初始容量:10

扩容容量:(原始容量 x 3 ) / 2 + 1。

适用场景:ArrayList 适合单线程,或多线程环境,但 List 只会被单个线程操作;随机查找和遍历,不适合插入和删除。

(2)、LinkedList

特点:

1、LinkedList 是基于双向链表存储数据的,很适合数据的动态插入和删除;

2、可根据索引值获取(get(int index)))或删除(remove(int index))节点(实现原理:通过计数索引值实现,当 index > 链表长度的1/2,从链表尾部开始遍历;反之,从链表头部开始遍历;

3、可作为队列和栈使用

4、线程不安全。

适用场景:适合单线程中,顺序读取,不适合随机读取和随机删除。

(3)、Vecor

特点:

1、其特点大致与 ArrayList 一样。

2、线程安全(因为内部方法都是通过 synchronized 关键字同步的)。

初始容量:10初始容量:10

扩容容量:若扩容系数 > 0,则将容量的值增加“扩容系数”;否则,将容量大小增加一倍。

适用场景:能不用就别用。

三、Map

1、HashMap与HashTable简介

类似于ArrayList和LinkedList的区别, HashTable是JDK1.0 就存在的老东西,因此 HashTable是一个继承Dictionary 的古老集合。JDk1.2引入了集合框架的Map接口,HashTable也实现了Map接口,因此HashTable也增加了一些Map的方法

2、HashMap与HashTable区别

(1)、HashMap允许使用null作为Key或者Value,HashTable不允许

(2)、HashMap是线程不安全的因此性能较好,而HashTable是线程不安全的因此性能较差

3、场景

多线程环境下也是用HashMap,Collections可以把HashMap转换成线程安全的集合.

例:Map map = Collections.synchronizedList(new HashMap())

总的来说向Vector和HashTable这种JDK1.0产物尽量不使用,除非某些api强制使用~~~果然老东西得退休~

Java中List和Map的区别的更多相关文章

  1. Java中Set,List,Map的区别

    java集合的主要分为三种类型: Set(集) List(列表) Map(映射)   1.1 Collection接口 Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和 ...

  2. Java中List,Set,Map的区别以及API的使用

    1.面试题:你说说collection里面有什么子类. (其实面试的时候听到这个问题的时候,你要知道,面试官是想考察List,Set) 正如图一,list和set是实现了collection接口的. ...

  3. java中fail-fast 和 fail-safe的区别

    java中fail-fast 和 fail-safe的区别   原文地址:http://javahungry.blogspot.com/2014/04/fail-fast-iterator-vs-fa ...

  4. Java中的映射Map - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的映射Map - 入门篇>,希望对大家有帮助,谢谢 简介 前面介绍了集合List,这里开始简单介绍下映射Map,相关类如下图所示 正 ...

  5. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  6. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  7. Java中如何遍历Map对象的4种方法

    在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHa ...

  8. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  9. 转!! Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

随机推荐

  1. Portswigger web security academy:DOM Based XSS

    Portswigger web security academy:DOM Based XSS 目录 Portswigger web security academy:DOM Based XSS DOM ...

  2. 在@Data注释lombok上使用继承警告等于/ hashCode(Warning equals/hashCode on @Data annotation lombok with inheritance)

    生成equals / hashCode实现但没有调用超类,即使这个类没有扩展java.lang.Object.如果这是故意的,请将 @EqualsAndHashCode(callSuper = fal ...

  3. Java线程的6种状态

    6种状态分别是: NEW.RUNNABLE.TERMINATED.WAITING.TIMED_WAITING.BLOCKED NEW:线程创建完毕 RUNNABLE:线程运行中,又分为READY + ...

  4. Jenkins + Docker + ASP.NET Core自动化部署

    本来没想着要写这篇博客,但是在实操过程中,一个是被网络问题搞炸了心态(真心感觉网络能把人搞疯,别人下个包.下个镜像几秒钟搞定,我看着我的几KB小水管真是有苦说不出),另一个就是这里面坑还是有一些的,写 ...

  5. .NET Core 基于 Grafana Loki 日志初体验

    介绍 Loki: like Prometheus, but for logs. Loki是一个轻量级的日志系统,受到Prometheus项目的启发,由Grafana团队设计和开发,所以在Grafana ...

  6. SparkSQL电商用户画像(五)之用户画像开发(客户基本属性表)

    7.电商用户画像开发 7.1用户画像--数据开发的步骤 u 数据开发前置依赖 -需求确定 pv uv topn -建模确定表结构 create table t1(pv int,uv int,topn ...

  7. Redis 分布式锁|从青铜到钻石的五种演进方案

    缓存系列文章: 缓存实战(一):20 图 |6 千字|缓存实战(上篇) 缓存实战(二):Redis 分布式锁|从青铜到钻石的五种演进方案 缓存实战(三):分布式锁中的王者方案 - Redisson 上 ...

  8. prometheus管理api

    健康检查:GET /-/healthy 准备检查:GET /-/ready 停止服务:PUT|POST /-/quit 重载配置文件 PUT|POST /-/reload reference mana ...

  9. /var/log/syslog日志usb接口

    p:~# cat /proc/bus/input/devices |grep usbP: Phys=usb-0000:00:05.1-1/buttonS: Sysfs=/devices/pci0000 ...

  10. 攻防世界(九)PHP2

    攻防世界系列:PHP2  1.打开什么信息也没有. 尝试各种首页index.php index.html 加 [F12]没有结果,最后发现是index.phps .phps文件是什么? phps文件就 ...