一:java集合的体系结构如下:

Java集合大致分为Set、List、Queue、Map四个体系 。Collection: List和Set,Queue继承自Collection接口。


|--List:
|--ArrayList
|--Vector
|--LinkedList

|--Set:
|--HashSet
|--TreeSet

|--LinkedHashSet

|--Queue: 队列集合,有PriorityQueue类

List:有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。

Set:不允许元素重复。HashSet和TreeSet是两个主要的实现类。

Map:也属于集合系统,前两个继承至collection接口,Map为独立接口。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、Hashtable,TreeMap,LinkedHashMap前三个主要的实现类。

  • TreeMap是有序的,HashMap和HashTable是无序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

Collection的功能概述:

A:添加功能:boolean add(E e)确保此 collection 包含指定的元素(可选操作)。
B:删除功能:boolean remove(Object o)从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
C:判断功能:
      boolean isEmpty()如果此 collection 不包含元素,则返回 true。 
      boolean contains(Object o)如果此 collection 包含指定的元素,则返回 true
D:获取功能:Iterator<E> iterator()返回在此 collection 的元素上进行迭代的迭代器。
E:长度功能:int size()返回此 collection 中的元素数。
F:交集(了解):boolean retainAll(Collection<?> c)仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
G:把集合转数组(了解):Object[] toArray()返回包含此 collection 中所有元素的数组。

— List 有序,可重复

ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
—Set 无序,唯一

:HashSet和LinkHashSet允许存在null值,TreeSet中插入null数据时会报NullPointerException。

:HashSet的底层数据结构是哈希表,通过hashCode()和equals()方法保证集合元素的唯一性,首先用hashCode()比较的是两个对象的哈希值是否相同,如果相同则继续比较equals,equals比较的是两个成员变量的值是否相同,相同返回true不添加,否则则添加集合元素。一般在用hashSet的时候有重复元素时候,需要重写equals方法。

:有元素A和B,当通过hashCode()得到的哈希值相同的时候,只要equels不相等,根据“冲突检测机制”,会在A元素的内部索引位置新建一个链接表,将A和B串起来放在该位置。

HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()

LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序(按插入顺序排序的),唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一

TreeSet
底层数据结构是红黑树。(唯一,有序)
1. 如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定

java中List、Array、Map、Set等集合相互转:

List转换为Array:

List<String> list = new ArrayList<>();list.add("AAAA");list.add("BBBB");list.add("CCCC");list.add("DDDD");String [] array = list.toArray(new String[list.size()]);

Array转换为List:

String[] countries = {"AAAA", "BBBB", "CCCC", "DDDD"};List list = Arrays.asList(countries);

Map的Key值转换为List:

Map<Integer,String> map = new HashMap<>();map.put(1,"AAAA");map.put(2,"BBBB");map.put(3,"CCCC");map.put(4,"DDDD");List<Integer> list = new ArrayList<Integer>(map.keySet());

Map的Value值转换为List:

Map<Integer,String> map = new HashMap<>();map.put(1,"AAAA");map.put(2,"BBBB");map.put(3,"CCCC");map.put(4,"DDDD");List<String> list = new ArrayList<String>(map.values());

collection(list,set,map)集合详解的更多相关文章

  1. 集合详解之 Map

    集合详解之 Map + 面试题 集合有两个大接口:Collection 和 Map,本文重点来讲解集合中另一个常用的集合类型 Map. 以下是 Map 的继承关系图: Map 简介 Map 常用的实现 ...

  2. 集合详解之 Collection

    集合详解之 Collection 先来看看集合的继承关系图,如下图所示: 其中: 外框为虚线的表示接口,边框为实线的表示类: 箭头为虚线的表示实现了接口,箭头为实线的表示继承了类. 为了方便理解,我隐 ...

  3. Java 集合详解

    一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为了满足这些常规的编程需要,我们要 ...

  4. Java集合详解8:Java的集合类细节精讲

    Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...

  5. 【转载】Java 集合详解

    转载:https://www.cnblogs.com/ysocean/p/6555373.html 一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段 ...

  6. Java集合详解8:Java集合类细节精讲,细节决定成败

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  7. Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  8. Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  9. map接口详解

    1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...

随机推荐

  1. python通过多线程并获取返回值

    以下是多线程获取返回值的一种实现方式 # -*-coding:utf-8-*- from time import ctime, sleep import threading import numpy ...

  2. .NET Core 实现 腾讯云云解析简单客户端

    一.说明 腾讯云的.NET SDK虽然非常强大,但是对他的产品支持不是很完全,域名的云解析就没有SDK,所以自己写了一个,初衷是用来做动态DNS的,也准备接入多个云厂商,但是我自己本身仅仅只有腾讯云这 ...

  3. ASP.NET Core 2.2 WebApi 系列【二】使用EF CodeFirst创建数据库

    Code First模式 Code First是指"代码优先"或"代码先行". Code First模式将会基于编写的类和配置,自动创建模型和数据库. 一.准备 ...

  4. javaWeb核心技术第九篇之JSP

    JSP:全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术.在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示 ...

  5. Supply Initial Data提供初始数据 (EF)

    Open the Updater.cs (Updater.vb) file, located in the MySolution.Module project's Database Update fo ...

  6. 一文学会JVM性能优化

    实战性能优化 1 重新认知JVM 之前我们画过一张图,是从Class文件到类装载器,再到运行时数据区的过程,现在咱们把这张图不妨丰富完善一下,展示了JVM的大体物理结构图. 执行引擎:用于执行JVM字 ...

  7. 一则sql优化实现接口耗时降低30倍的优化案例

    业务场景: 也测的业务,如上图,通过捕获业务的涉及的接口如下: 查询接口耗时大于7s,已经是非常的慢 经验提示: 一般接口响应时间慢的问题,最简单的方式就是监控接口相关的sql是否存在问题 开启mys ...

  8. Dynamics 365 CE Update消息PostOperation阶段Image的尝试

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. Flutter中通过https post Json接收Json

    Flutter 已然成为炙手可热前端框架.若问跨平台到底有多香,自然是要多香有多香.今天我就分享这些天研究Flutter http连接和json格式转换的内容,小弟对Flutter也是小白一名,如有错 ...

  10. Docker启动守护式容器

    目录 启动守护式容器 查看容器日志 docker后台运行 查看容器内运行的进程 ​查看容器内部细节 进入正在运行的容器并以命令行交互 重新进入 上述两个区别 从容器内拷贝文件到主机上 启动守护式容器 ...