1、Set和Map的关系:

Set代表一种集合元素无序、不可重复的集合,Map代表一种由多个key-value对组成的集合。

Set的集合继承体系:

Map关系集合

Map集合的key特征:所有key不能重复,key之间没有顺序。Map集合的所有key将具有set集合的特征。

对Set做改造可将Set改造成Map集合;

2、HashSet和HashMap的区别和联系:
    对于HashSet,系统采用Hash算法决定集合元素的存储位置;对于HashMap,系统将value当成key的附属物,系统根据hash算法决定key的存储位置,value总是紧随key存储。

HashSet通过封装一个HashMap对象来存储所有的集合元素,所有放入HashSet中的集合元素实际上由HashMap的key来保存,而HashMap的value则存储了一个PERSENT,它是一个静态的Object对象。

HashSet的add()方法添加元素时实际上转变为调用HashMap的put()方法来添加key-value对,当新放入的hashmap的Entry中的key与集合中原有的Entry的key相同(hashCode()返回值相等,通过equals比较也返回true)时,新添加的Entry的value将覆盖原来Entry的value,但key不会有任何改变。如果向hashSet中添加一个已经存在的元素,新添加的集合元素不会覆盖已有的集合元素。

3、TreeMap和TreeSet的区别和联系:

TreeSet底层采用一个NavigableMap来保存TreeSet集合的元素,NavigableMap是一个接口,底层使用TreeMap来保存Set集合中的所有元素。TreeSet里绝大部分方法都是直接调用TreeMap方法来实现。

TreeMap采用一种被称为“红黑权”的排序二叉树来保存Map中的每个Entry——每个Entry都被当成红黑树的一个节点来对待。向TreeMap添加元素时,系统都要将该Entrty当成一个新节点,保证TreeMap中所有key总是由小到大排列的。TreeMap添加元素、取出元素的性能都比HashMap低。

4、Map和List

Map集合是一个关联数组,包含两组值,key组成的集合可以组成一个set集合,value组成的集合可以组成List集合。

Map接口提供get(K key)方法,允许Map对象根据key来获取value;

List接口提供get(int index)方法,允许List对象根据元素索引来取得value;

List相当于所有key都是int型的Map,也可以说Map相当于索引是任意类型的List;

5、ArrayList和LinkedList

List集合的实现类有三个:ArrayList、Vector和LinkedList。Vector还有一个Stack子类,Stack在Vector父类的基础上增加了五个方法。Stack是一个线程安全的类,Vector也是一个线程安全的类。

从序列化机制角度看,ArrayList的实现比Vector的实现更安全,Vector是ArrayList的线程安全版本。

当取元素时ArrayList性能大大优于LinkedList,因为ArrayList底层以数组来保存集合元素。当程序需要添加或删除元素时,ArrayList必须对底层数组元素整体移动,如果添加元素导致集合长度超过底层数组长度,ArrayList必须创建一个长度为原来1.5倍的数组,再由垃圾回收机制回收原有数组,开销较大。LinkedList,在插入删除元素上,性能高于ArrayList。

6、迭代器接口Iterator

用于迭代各种Collection集合,用iterator()方法返回一个Iterator用于遍历该集合中的元素。用remove()方法删除刚迭代的集合元素。

Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等的更多相关文章

  1. java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)

    *Map接口:采用是键值对的方式存放数据.无序 HashMap: *常见的实现类: *--HashMap:基于哈希表的 Map 接口的实现. *常用的构造方法: * HashMap()构造一个具有默认 ...

  2. 【java基础】java集合之HashTable,HashSet,HashMap

    [一]HashSet (1)HashSet内部维护的是一个HashMap,具体原理见java集合之HashMap [二]HashTable (1)HashTable内部维护的是一个Entry的数组.E ...

  3. java集合框架collection(5)HashMap和TreeMap

    上图转载自:http://www.cnblogs.com/vamei/archive/2013/04/15/3000913.html 一.区别和联系 1.迭代器 迭代器是一种设计模式,它是一个对象,它 ...

  4. java集合系列——Map之HashMap介绍(八)

    1.HashMap的简介 (JDK1.7.0_79版本) HashMap是基于哈希表的Map实现的的,一个Key对应一个Value,允许使用null键和null值,不保证映射的顺序,特别是它不保证该顺 ...

  5. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

    概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...

  6. Java 集合系列 16 HashSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  7. Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...

  8. Java集合框架之HashSet浅析

    Java集合框架之HashSet浅析 一.HashSet综述: 1.1HashSet简介 位于java.util包下的HashSet是Java集合框架的重要成员,它在jdk1.8中定义如下: publ ...

  9. java 集合之Map

    Map的功能方法 方法put(Object key,Object value)添加一个"值"(想要得东西)和与"值"相关的"键"(key)( ...

  10. Java基础系列 - JAVA集合ArrayList,Vector,HashMap,HashTable等使用

    package com.test4; import java.util.*; /** * JAVA集合ArrayList,Vector,HashMap,HashTable等使用 */ public c ...

随机推荐

  1. maven工作的过程

    1 建立各个module之间的依赖关系 2 越底层的依赖的module先生成 3 下载远程库中的依赖 4 先生成本地被依赖的module 问题是,如何保证本次module和远程库中的包不重名?

  2. protobuf + maven 爬坑记

    疯狂创客圈 死磕Netty 亿级流量架构系列之20 [博客园 总入口 ] 本文说明 本篇是 netty+Protobuf 整合实战的 第一篇,完成一个 基于Netty + Protobuf 实战案例. ...

  3. 【题解】T54037 最开始

    传送门 题目大意: 对于\(a+ \frac 1{a^{}}=n\)求$a^{m}+ \frac 1{a^{m}} $,对\(10^9+7\)取模. 题目做法: 乍看此题,没有思路,但是如果用数学办法 ...

  4. 【docker】kubernetes集群一键部署包

    背景说明: 随着docker使用的逐步深入,docker的管理变得越来越麻烦,单纯的通过docker命令行的方式进行管理已经不能满足需求,同时也存在效率低下的问题.所以急需一个docker集群管理工具 ...

  5. 【转】数据存储——APP 缓存数据线程安全问题探讨

    http://blog.cnbang.net/tech/3262/ 问题 一般一个 iOS APP 做的事就是:请求数据->保存数据->展示数据,一般用 Sqlite 作为持久存储层,保存 ...

  6. 尚学堂xml学习笔记

    1.打开eclipse,文件-新建java project,输入文件的名字,比如输入20181112. 2.对着src右键,选择new-file,输入文件名字,比如:book.xml. 3.开始写.x ...

  7. Java微信公众平台开发_03_消息管理之被动回复消息

    GitHub源码:https://github.com/shirayner/weixin_gz 一.本节要点 1.回调url 上一节,我们启用服务器配置的时候,填写了一个服务器地址(url),如下图, ...

  8. leetcode 66. Plus One(高精度加法)

    Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...

  9. HihoCoder1677 : 翻转字符串(Splay)(区间翻转)

    描述 给定一个字符串S,小Hi希望对S进行K次翻转操作. 每次翻转小Hi会指定两个整数Li和Ri,表示要将S[Li..Ri]进行翻转.(S下标从0开始,即S[0]是第一个字母) 例如对于S=" ...

  10. ACM学习历程——hihoCoder挑战赛10A 01串(策略)

    时间限制:7000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串"001"和" ...