Java集合总结

 更新时间:2019年01月04日 14:11:00   作者:sdr_zd  
今天小编就为大家分享一篇关于Java集合总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

集合和数组在存储数据的时候是各有优缺点的,先总结下集合和数组的区别

1.数组长度固定,集合长度不固定

2.数组只能存储同一类型的元素,集合可以存储不同数据类型(在引入泛型后,可以规定元素的类型相同)

3.数组可以存储基本类型也可以存储引用类型,集合只能存储引用类型

集合类由两大接口派生而出:Collection<E>和Map<K,V>

Collection<E>:是接口,需要由实现类去实现接口,存储单列元素。

它的主要方法:

添加:boolean add(E e)  移除:boolean remove(Object o)  判断是否包含某元素:boolean contains(Object o)  返回集合中元素的个数:int size()   判断集合是否为空:boolean isEmpty()  迭代器:Iterator<E> iterator()  是Collection集合特有的一种遍历方式,实现了Iterable<E>接口,使用boolean hasNext():如果迭代器中还有元素,则返回true。和E next():返回迭代器中的下一个元素  这两个方法进行遍历

它的子接口:List<E>Set<E>Queue<E>。List集合中元素是有序不唯一的(有序是指存储有序但不是排序),Set集合中元素是无序但唯一的。

List<E>集合的实现类:

  • ArrayList:底层数据结构是数组,查询快,增删慢;线程不安全,效率高;
  • Vector:底层数据结构是数组,查询快,增删慢;线程安全,效率低;
  • LinkedList:底层数据结构是联邦,查询慢,增删快;线程不安全,效率低。
  • Queue<E>:底层数据结构是队列,类似于List(Queue接触较少,后面不做总结)

Set<E>集合的实现类:

HashSet:底层数据结构是哈希表,依赖HashCode()方法和equals()方法。这两个方法的执行顺序:先HashCode(),值不同:添加;值相同:equals()值,不同:添加;相同:不添加。 其子类LinkedHashSet,底层数据结构由哈希表及链表构成,链表保证元素有序,Set保证元素唯一。

TreeSet:底层数据结构是红黑树,是一种自平衡的二叉树。元素排序(是排序不是有序!)

排序分为自然排序和比较器排序。自然排序:元素具备比较性,元素所属类实现接口Comparable即可,比如我们平常使用的Integer,String都已实现Comparable接口;比较器排序:如果元素是自定义类时,需要按需求对元素进行排序,比如按自定义类中的某个成员变量的大小进行排序,此时需要集合接收一个Comparator的实现类对象,可采用匿名内部类或外部类去重写compare()方法。

Map<K,V>:是一个接口,K是键 ,V是该键对应的值,存储的元素是键值对,也就是成对存在的,存储双列元素。键不能重复,每一个键最多映射一个值。

它的主要方法:

添加:V put(K key,V value)   删除:V remove(K key,V value)   判断:1).boolean containsKey(Object o):是否包含某个键;2).boolean containsValue(Object o):是否包含某个值;3).boolean isEmpty():是否为空  获取:1) Set<K> keySet() 获取所有键的视图  2) V get(Object key) 返回改建对应的值  3) int size() 获得该集合的键值对的对数

Map集合的遍历方式:

1)键找值:将所有的键获取到一个集合Set中,再遍历该集合获取对应的值

2)由键值对对象找键和值:获取所有的键值对对象到集合中,再遍历该集合获得每一个键值对的键和值

Map常用的实现类与Set的实现类类似:

  • Hashtable:类似HashSet,线程安全,效率低,被HashMap替代;
  • HashMap:类似HashSet,线程不安全,效率高;
  • LinkedHashMap:类似LinkedHashSet;
  • TreeMap:类似SetMap

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

判断使用哪个集合:

是否是键值对形式的元素?

是:Map

是否需要排序?

是:TreeMap

否:HashMap

否:Collection

是否唯一(或有序)

不唯一,有序:List

数据结构:数组:ArrayList(线程不安全,效率高);Vector(线程安全,效率低)

链表:LinkedList(线程不安全,效率高);

唯一,无序:Set

是否排序?

是:TreeSet

否:HashSet

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • SpringBoot + JPA @ManyToMany的操作要点说明

    SpringBoot + JPA @ManyToMany的操作要点说明

    这篇文章主要介绍了SpringBoot + JPA @ManyToMany的操作要点说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • maven中pom.xml详细介绍

    maven中pom.xml详细介绍

    最近在学习maven,这篇文章主要介绍了maven中pom.xml详细介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • idea2020.1无法自动加载maven依赖的jar包问题及解决方法

    idea2020.1无法自动加载maven依赖的jar包问题及解决方法

    这篇文章主要介绍了idea2020.1无法自动加载maven依赖的jar包问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • HTTPClient如何在Springboot中封装工具类

    HTTPClient如何在Springboot中封装工具类

    这篇文章主要介绍了HTTPClient如何在Springboot中封装工具类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 解决idea check out 切换分支时找不到需要的分支问题

    解决idea check out 切换分支时找不到需要的分支问题

    这篇文章主要介绍了解决idea check out 切换分支时找不到需要的分支问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • mybatis如何实现saveOrUpdate

    mybatis如何实现saveOrUpdate

    这篇文章主要介绍了mybatis如何实现saveOrUpdate问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java轻松掌握面向对象的三大特性封装与继承和多态

    Java轻松掌握面向对象的三大特性封装与继承和多态

    本文主要讲述的是面向对象的三大特性:封装,继承,多态,内容含括从封装到继承再到多态的所有重点内容以及使用细节和注意事项,内容有点长,请大家耐心看完
    2022-05-05
  • idea中定时及多数据源配置方法

    idea中定时及多数据源配置方法

    因项目要求,需要定时从达梦数据库中取数据,并插入或更新到ORACLE数据库中,这篇文章主要介绍了idea中定时及多数据源配置方法,需要的朋友可以参考下
    2023-12-12
  • Java不可变类机制浅析

    Java不可变类机制浅析

    所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。接下来通过本文给大家介绍Java不可变类机制,需要的朋友参考下
    2017-02-02
  • 在ChatGPT的API中支持多轮对话的实现方法

    在ChatGPT的API中支持多轮对话的实现方法

    ChatGPT是由OpenAI研发的一种预训练语言模型,只能在OpenAI平台上进行训练,目前并不对外开放训练接口,这篇文章主要介绍了在ChatGPT的API中支持多轮对话的实现方法,需要的朋友可以参考下
    2023-02-02

最新评论