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. leetCode(37):Implement Queue using Stacks

    Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

  2. 大师养成计划之二:hibernate框架的使用------实例演示

    搭建hibernate项目框架的步骤: 一.导入jar包 二.new    .cfg.xml配置文件 <?xml version="1.0" encoding="U ...

  3. Android View中getViewTreeObserver().addOnGlobalLayoutListener() (转)

    转自:Android View中getViewTreeObserver().addOnGlobalLayoutListener() 我们知道在oncreate中View.getWidth和View.g ...

  4. java多线程实现复制大文件

    有些开发的时候我们经常遇到这样一个问题,对大文件的处理.比如:日志文件.那么十几G的大文件.我们应该如何复制呢? 还有就是希望从本地和远程复制文件,文件都很大,10G级的如何办呢? 在这里我告诉你们, ...

  5. .net 字符串驻留

    .net中的string表达的是常量字符串. JIT编译器编译时判断遇到的常量字符串是否在内部散列表中,如果不在,添加进去.当第一次执行到含字符串的方法时,CLR会检查该字符串是否在内部的一个散列表中 ...

  6. shell脚本注释方法

    [1]单行注释 利用“#”对单行进行注释. 示例应用,新建文本,命名为test_single.sh 输入内容: # 单行注释 echo '单行注释' echo '123' # echo '456' e ...

  7. git使用命令行方式提交代码到github或gitlab上

    (1)使用命令行(Git Bash)在gitlab上新建项目的流程   //进入项目目录下: C:\Users\wuwy>cd D:\workspace\eclipse\H5Patient\// ...

  8. sublime中如何安装vue.js插件,并使代码高亮显示

    前提概要: sublime的下载地址:http://www.sublimetext.com/ notepad++下载地址:https://notepad-plus-plus.org/ .vue的文件在 ...

  9. MySQL常见问题和命令

    问题: 1.centos MySQL启动失败:关闭selinux, vi /etc/selinux/config, 设置SELINUX=disabled,重启电脑: 命令: 停止.启动mysql服务器 ...

  10. Mark指针的指针(**)和链表使用(*&)

    利用二级指针删除单向链表 彻底理解链表中为何使用指针的指针或者指针的引用 详解C++指针的指针和指针的引用