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. php正則表達式中的非贪婪模式匹配的使用

    php正則表達式中的非贪婪模式匹配的使用 通常我们会这么写: $str = "http://www.baidu/.com? url=www.sina.com/"; preg_mat ...

  2. Linux上部署Java应用+Python3环境搭建

    给了Linux的测试环境,目前需要install JDK, Tomcat,此处记录下小白的操作过程. 1. 查询Linux发行版本,包括内核信息 (1) Linux查询内核信息 $ uname -a ...

  3. 解决myeclipse10.x的Servers产生的at com.genuitec.eclipse.ast.deploy.core.Deployment.<init>(Unknown Source)错

    错误: java.lang.NullPointerException at com.genuitec.eclipse.ast.deploy.core.Deployment.<init>(U ...

  4. 微信支付v3开发(6) 收货地址共享接口

    请看新版教程  微信支付开发(7) 收货地址共享接口V2 本文介绍微信支付下的收货地址共享接口的开发过程. 一. 简单介绍 微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,兴许能够免填 ...

  5. spring-test-dbunit的配置和使用

    1.数据源配置 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" ...

  6. eclipse 给jar包关联javadoc

    1.右键点击Referenced Libraries下的jar --> 选择 Build Path --> Configure Build Path. 2.选择jar的Javadoc lo ...

  7. EasyDSS流媒体解决方案实现的RTMP/HLS视频直播、直播鉴权(如何完美将EasyDSS过渡到新版)

    上一篇博文介绍了EasyDSS点播功能,然后作为RTMP流媒体服务器,接受RTMP推流.进行实时的直播流分发又是自身一大核心功能. 需求背景: 写本篇博文的一个目的是向大家介绍一下EasyDSS新版的 ...

  8. hive常规配置及常用命令使用

    hive 常用的几种shell交互方式 查看hive命令帮助:bin/hive -help [hd@hadoop-senior hive]$ bin/hive -help usage: hive -d ...

  9. Mac标识物理位置算法 import Levenshtein mac列表特征值

    mac 字符串 与 基准字符串的 Levenshtein   距离,考虑  mac信号强度的时序性,60秒内若干次变化 不引入强度 mac字符串的唯一性 如何排序 基准字符串的选取 同一尺度 都按强度 ...

  10. 运行“cordova build android” - 无法找到属性android:fontVariationSettings和android:ttcIndex

    :app:processArm64DebugResourcesC:\Users\xfcao\.gradle\caches\transforms-1\files-1.1\xwalk_core_libra ...