1、Collection 和 Map 的区别

容器内每个为之所存储的元素个数不同。
Collection类型者,每个位置只有一个元素。List,Set
Map类型者,持有 key-value pair,像个小型数据库。

2、各自旗下的子类关系

Collection
    --List: 将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。有序
          --ArrayList / LinkedList / Vector
    --Set : 不能含有重复的元素    无序不重复
          --HashSet / TreeSet
Map     键值对
    --HashMap
    --HashTable
    --TreeMap

List特点:元素有放入顺序,元素可重复

Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)

Map特点:元素按键值对存储,无放入顺序

3.具体实例

List:

LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢

ArrayList:非线程安全的,数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低

Vector:线程安全的,效率低 ;矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现

Set:

HashSet:为快速查找而设计的Set,存入HashSet的元素必须定义hashCode,底层由HashMap实现

LinkedHashSet :具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序),所以在使用迭代器遍历Set时,结果会被元素插入的次序显示。元素也必须定义hashCode()方法。

TreeSet:SortedSet接口唯一的实现类,保持次序的Set,底层由平衡二叉树实现, 使用它可以从Set中提取有序的序列。元素必须实现Comparable接口,是按对象的比较函数对元素进行排序。

Map:

HashMap:Map基于散列表的实现,插入和查询“键值对”的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的性能。

HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null

LinkedHashMap:使用链表维护内部次序(插入次序)

TreeMap:基于红黑树的实现,特点在于所得到的结果是经过排序的。subMap()/方法返回一个子树

ConcurrentHashMap:一种线程安全的Map,不涉及同步加锁

WeakHashMap:允许释放映射所指向的对象

IdentityHashMap:用==代替equals方法

3、其他特征

*  List,Set,Map将持有对象一律视为Object型别。
*  Collection、List、Set、Map都是接口,不能实例化。
   继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
*  vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。

4. 存取

  1. List 通过下标来存取 和值来存取    add/get
  2. Map 键值对应来存取      put(k,v) / get(k)    keySet()抽取key序列   values()抽取value序列
  3. set 存取元素是无序的    set.add("a") /  set.iterator().hasNext()

线程安全:

synchronized  多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题

 hashing
       哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。
       所有存储结构中,array查找速度是最快的。所以,可以加速查找。
       发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。

Array , Arrays

Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

1、array效率高,但容量固定且无法动态改变。

array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

2、Java中有一个Arrays类,专门用来操作array
  arrays中拥有一组static函数,
 equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
 fill():将值填入array中。
 sort():用来对array进行排序。
 binarySearch():在排好序的array中寻找元素。
 System.arraycopy():array的复制。

List,Set,Map的更多相关文章

  1. 多用多学之Java中的Set,List,Map

            很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...

  2. (八)map,filter,flatMap算子-Java&Python版Spark

    map,filter,flatMap算子 视频教程: 1.优酷 2.YouTube 1.map map是将源JavaRDD的一个一个元素的传入call方法,并经过算法后一个一个的返回从而生成一个新的J ...

  3. Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法

    Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...

  4. sdut 487-3279【哈希查找,sscanf ,map】

    487-3279 Time Limit: 2000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接: sdut:   http://acm.sdut.ed ...

  5. POJ 3320 尺取法,Hash,map标记

    1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...

  6. Java-list,set,map的区别

    jdk中api的定义 Collection ├----List │ ├----LinkedList │ ├----ArrayList │ └----Vector │ └----Stack └----S ...

  7. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. python的 map,filter, reduce, enumerate

    一, map     #基本的map运用都可以用解析去替代,复杂的仍然需要定义函数,利用map去做 map(函数, 序列) 将序列的各项经过函数处理, 然后返回到一个新列表中. #itertools. ...

  9. scala学习笔记(8): 列表的map,flatMap,zip和reduce

    map,flatMap,zip和reduce函数可以让我们更容易处理列表函数. 1 map函数map将一个函数应用于列表的每一个元素并且将其作为一个新的列表返回.我们可以这样对列表的元素进行平方: s ...

  10. 哈希,哈希表,哈希Map

    数组: 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1):数组的特点是:寻址容易,插入和删除困难: 链表: 链表存储区间离散,占用内存比较宽松,故空间复杂 ...

随机推荐

  1. 第一个jdbc

    1. jdbc就是java提供连接数据库的规范.在java中就是一套接口.实现这套接口的这套类就是数据库驱动,用数据库驱动才能连接数据库. 2. Junit是为了方便测试的技术手段,在测试时,一个类中 ...

  2. mvn 手动安装jar 到本地库

    安装: mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.1.0.7.0 -Dpackagi ...

  3. c#基础(一)

    一. C#与.Net的关系 C#是一种相当新的编程语言.C#的重要性体现在以下两个方法: 1).它是专门为Microsoft的.net FrameWork一起使用而设计的 (.net FrameWor ...

  4. Python学习笔记(二):字典

    字典由多个键及与其对应的值构成的键值对构成,字典中键唯一,值不唯一. 1)dict 函数: >>>items=[('name','lilei'),('age',12)] >&g ...

  5. elasticsearch的percolator操作

    es的普通查询是通过某些条件来查询满足的文档,percolator则不同,先是注册一些条件,然后查询一条文档是否满足其中的某些条件. es的percolator特性在数据分类.数据路由.事件监控和预警 ...

  6. bzoj 4822: [Cqoi2017]老C的任务

    4822: [Cqoi2017]老C的任务 练手速... #include <iostream> #include <cstdio> #include <cstring& ...

  7. BZOJ 1192: [HNOI2006]鬼谷子的钱袋 [娱乐]

    题意: n个数分组,使得小于n的每个数都能表示出来,最少几组 就是“最优集合”的超级弱化版.....每次+=now+1 然后一个貌似科学的方法是n二进制拆分 #include <iostream ...

  8. BZOJ 1115: [POI2009]石子游戏Kam [阶梯NIM]

    传送门 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜 ...

  9. python学习1:程序元素和基本使用方法(跟随mooc学习)

    程序元素: 注释,缩进,变量,常量,表达式 输入,输出,分支,循环 示例程序,温度转换程序: #TempConvert.pyval=input("请输入带温度表示符号发温度值(例如:32C) ...

  10. 在linux内核中实现自己的系统调用

    如实现一个简单的打印:printk 1.cd linux-ok6410/kernel/ vim printk.cvoid sys_pk(){printk("<0>this is ...