一、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. Windows PE 第八章 延迟加载导入表

    延迟加载导入表 延迟加载导入表是PE中引入的专门用来描述与动态链接库延迟加载相关的数据,因为这些数据所引起的作用和结构与导入表数据基本一致,所以称为延迟加载导入表. 延迟加载导入表和导入表是相互分离的 ...

  2. windows核心编程-第一章 对程序错误的处理

    第一章-对程序错误的处理 在开始介绍Microsoft Windows 的特性之前,必须首先了解 Wi n d o w s的各个函数是如何进行错误处理的. 当调用一个Wi n d o w s函数时,它 ...

  3. [CSP-J2019 江西] 道路拆除 题解

    发现大家都是将路径拆成三条链来做,这里提供一种暴力的乱搞方法. 思路 看到这一道题的第一想法就是跑最短路.可是仔细想想就发现,由于重合的路径只算一遍,所以导致两条最短路不一定是最优解. 接着,看到数据 ...

  4. 数据表格 layui.table

    layui官网-表单 自动渲染 方法渲染 table.render,cols中的field是后台传递的data map.put("data",stuService.selectSt ...

  5. locustfile中的User类和HttpUser类

    locustfile是什么? locustfile是Locust性能测试工具的用户脚本,描述了单个用户的行为. locustfile是个普通的Python模块,如果写作locustfile.py,那么 ...

  6. 使用BeanUtils.copyProperties踩坑经历

    1. 原始转换 提起对象转换,每个程序员都不陌生,比如项目中经常涉及到的DO.DTO.VO之间的转换,举个例子,假设现在有个OrderDTO,定义如下所示: public class OrderDTO ...

  7. 克鲁斯卡尔(Kruskal)算法

    概览 相比于普里姆算法(Prim算法),克鲁斯卡尔算法直接以边为目标去构建最小生成树.从按权值由小到大排好序的边集合{E}中逐个寻找权值最小的边来构建最小生成树,只要构建时,不会形成环路即可保证当边集 ...

  8. [MySQL数据库之表的详细操作:存储引擎、表介绍、表字段之数据类型]

    [MySQL数据库之表的详细操作:存储引擎.表介绍.表字段之数据类型] 表的详细操作 存储引擎 mysql中建立的库======>文件夹 库中建立的表======>文件 用来存储数据的文件 ...

  9. ES6对象的新增方法的使用

    Object.assign Object Object.assign(target, ...sources) 将所有可枚举属性的值从一个或多个源对象复制到目标对象 参数: target 目标对象 so ...

  10. [Qt] 事件机制(二)

    在samp4_1中加一个小功能,点击右上角关闭按钮时,弹出"确认是否关闭"的消息框.如果点"yes"则关闭,如果点"No"则不关闭 在wid ...