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. 安卓TabHost+ViewPager+RadioGroup多功能模板整理

    如今安卓比較流行的布局就是类似新闻client和手机QQ那种的底端可选择,上面的个别页面能够滑动选择. 在測试过程中发现用安卓自带的TabHost去构建.非常难得到自己定义的效果. 因此採用TabHo ...

  2. mapreduce 查找共同好友

    A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D,E,F H:A,C,D,E,O I:A, ...

  3. Python修饰器的函数式编程(转)

    From:http://coolshell.cn/articles/11265.html 作者:陈皓 Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Desi ...

  4. ubuntu 16.04.3 安装完成后的一些初始化工作

    虚拟机安装前记得把桥接调好! 1. 重置root密码 sudo passwd, 然后系统会让你输入密码,这时输入的密码就是root用户的密码,su root切用户 2. 设置固定IP,有重启服务功能令 ...

  5. 录音整理文字工具otranscribe简介

    网址: http://otranscribe.com/ 首先载入音频文件,支持 mp3, ogg, webm, wav (HTML5 无需将文件上传至服务器,可保护隐私),然后就可以边听边整理了. 通 ...

  6. Delphi Property详解

    http://anony3721.blog.163.com/blog/static/51197420107105132120/?ignoreua Property Keyword Defines co ...

  7. 【BZOJ3309】DZY Loves Math 莫比乌斯反演+线性筛(好题)

    [BZOJ3309]DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10 ...

  8. UITableview刷新时界面“乱跑”现象

    Self-Sizing在iOS11下是默认开启的,Headers, footers, and cells都默认开启Self-Sizing,所有estimated 高度默认值从iOS11之前的 0 改变 ...

  9. [note]BSGS & exBSGS

    BSGS (感觉这东西还是要写一下) BSGS主要用于求解形如\(x^k=y\pmod p\)(注意这里p与x互质)这样的方程的最小正整数解的问题 设\(m=\lceil\sqrt p\rceil,k ...

  10. make编译一

    在C和C++中,首先要把源文件编译成中间代码文件,在windows下就是obj文件,linux下就是.o文件:object file.这个动作叫做编译,然后再把大量的object file合成执行文件 ...