Java中各种集合特点:

Collection【单列集合】:

List(有序,可重复):

ArrayList:

  底层数据结构是数组,查询快,增删慢、线程不安全,效率高。

Vector:

  底层数据结构是数组,查询快,增删慢、线程安全,效率低。

LinkedList:

  底层数据结构是链表,查询慢,增删快、线程不安全,效率高

Set(无序,唯一):

HashSet:

  底层数据结构是哈希表;哈希表依赖两个方法:hashCode() 和 equals()。

  (

   一般规则:对象 equals 是 true 的话,hashCode需要相同,但是hashCode 相同的对象不一定equals,这就是所谓的冲突现象,

     但是有不同的冲突解决方法。

     你的 hashCode() 设计的好的话冲突也就小了。比如楼上给出的超出int范围之后这种 hashCode()实现,对象肯定是无数的。

     但是hash实现是有限的呢,所以冲突了。

  )

执行顺序:

  首先判断 hashCode() 值是否相同。

  是:继续执行equals(),看其返回值。

    是true:说明元素重复,不添加

    是false:就直接添加到集合

  否:就直接添加到集合

最终:自动生成hashCode()和equals()即可

LinkedHashSet:

  底层数据结构由链表和哈希表组成。由链表保证元素有序。由哈希表保证元素唯一。

TreeSet:

  底层数据结构是红黑树。(是一种自平衡的二叉树)

如何保证元素唯一性呢?

  根据比较的返回值是否是0来决定

如何保证元素的排序呢?两种方式

自然排序(元素具备比较性),让元素所属的类实现Comparable接口

比较器排序(集合具备比较性),让集合接收一个Comparator的实现类对象

Map【双列集合】:

A:Map集合的数据结构仅仅针对键有效,与值无关。

B:存储的是键值对形式的元素,键唯一,值可重复。

HashMap:

底层数据结构是哈希表。线程不安全,效率高,哈希表依赖两个方法:hashCode()和equals()

执行顺序:

首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
  是true:说明元素重复,不添加
  是false:就直接添加到集合
否:就直接添加到集合

最终:自动生成hashCode()和equals()即可。

LinkedHashMap:

  底层数据结构由链表和哈希表组成。由链表保证元素有序。由哈希表保证元素唯一。

Hashtable:

  底层数据结构是哈希表。线程安全,效率低,哈希表依赖两个方法:hashCode()和equals()

执行顺序:

首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
  是true:说明元素重复,不添加
  是false:就直接添加到集合
否:就直接添加到集合

最终:自动生成hashCode()和equals()即可。

TreeMap:

  底层数据结构是红黑树。(是一种自平衡的二叉树)

如何保证元素唯一性呢?

  根据比较的返回值是否是0来决定

如何保证元素的排序呢?

两种方式:

  自然排序(元素具备比较性):让元素所属的类实现Comparable接口

  比较器排序(集合具备比较性):让集合接收一个Comparator的实现类对象

分享知识-快乐自己:Java中各种集合特点的更多相关文章

  1. Java 中的集合接口——List、Set、Map

    Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组 ...

  2. 实现java 中 list集合中有几十万条数据,每100条为一组取出

    解决"java 中 list集合中有几十万条数据,每100条为一组取出来如何实现,求代码!!!"的问题. 具体解决方案如下: /** * 实现java 中 list集合中有几十万条 ...

  3. java中对集合对象list的几种循环访问

    java中对集合对象list的几种循环访问的总结如下 1 经典的for循环 public static void main(String[] args) { List<String> li ...

  4. 菜鸟日记之 java中的集合框架

    java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterat ...

  5. C#与java中的集合区别

    集合一般的操作       插入: add       删除: remove       查找: contains,remove java中的集合 注意哪些是接口,哪些是实现类 使用集合的时候 1. ...

  6. java中list集合的内容,如何使用像数据库中group by形式那样排序

    java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name    mone ...

  7. Java中的集合类型的继承关系图

    Java中的集合类型的继承关系图

  8. (转)java中对集合对象list的几种循环访问总结

    Java集合的Stack.Queue.Map的遍历   在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...

  9. java中的集合操作类(未完待续)

    申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...

随机推荐

  1. map端join

    package my.hadoop.hdfs.mapreduceJoin; import java.io.BufferedReader; import java.io.FileInputStream; ...

  2. Hadoop2.6.0版本MapReudce示例之WordCount(二)

    继<Hadoop2.6.0版本MapReudce示例之WordCount(一)>之后,我们继续看MapReduce的WordCount示例,看看如何监控作业运行或查看历史记录,以及作业运行 ...

  3. CentOS6.4下编译安装Apache2.4+PHP5.6

    安装Apache2.4: 首先从  http://httpd.apache.org/download.cgi#apache24下载apache源码包httpd-2.4.4.tar.gz从  http: ...

  4. 织梦DedeCMS自定义表单提交成功后返回当前页面的教程

    织梦的自定义表单制作的留言,报名等功能,提交成功后会自动返回到首页,那么如何让它返回到当前页面呢? 方法如下: 打开plus/diy.php文件 找到 showmsg($bkmsg, $goto); ...

  5. DFS应用——查找强分支

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "DFS应用--查找强分支" 的idea 并用源代码加以实现 : [1]查找强分支 1 ...

  6. XtraBackup备份mysql5.1.73

    一.基础介绍 mysql5.1在源码中配备了两个版本的innodb存储引擎源码:innobase和innodb_plugin,编译安装的时候可以通过参数--with-plugins=innobase, ...

  7. 安装android Studio和运行react native项目(基础篇)

    ANDROID_HOME环境变量 确保ANDROID_HOME环境变量正确地指向了你安装的Android SDK的路径. 打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设 ...

  8. Linux 技巧:让进程在后台运行的可靠方法

    原文链接:http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 想让进程在断开连接后依然保持运行?如果该进程已经开始运行了该如何补救? 如果有大 ...

  9. 识别不了socket未知的名称或服务

    个人博客地址:https://blog.sharedata.info/ socket 链接导致java.net.UnknownHostException: R1-T1-N6: R1-T1-N6: 未知 ...

  10. Eclipse 查看第三方jar包文件源代码解决方法

    1.打开第三方依赖包,源文件的快捷键:ctrl + mouseClick 2.由于我们下载的第三方jar 包,如Spring等相关的依赖包时,并没有附加下载相应的源文件,所以经常出现如图的这种问题. ...