资讯专栏INFORMATION COLUMN

java学习(七) —— API集合类

senntyou / 1290人阅读

摘要:集合类主要负责保存盛装其他数据,因此集合类也被称为容器类。所有的集合类都位于包下。表示一组对象,这些对象也称为的元素。成员方法把集合转成数组迭代器,集合的专用遍历方式之接口概述有序的,也称为序列。

前言

在编程中,常常需要集中存放多个数据。从传统意义上讲,数组是我们的一个很好的选择,前提是我们实现已经明确知道我们将要保存的对象的数量。

一旦在数组初始化时指定了数组长度,这个数组长度就是不可变的,如果我们需要保存一个可以动态增长的数据,在编译时无法确定具体的数量,java的集合类就是一个很好的设计方案。

集合类概述:面对对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供类集合类。

数组和集合类都是容器,不同之处:

</>复制代码

  1. (1)数组虽然也可以存储对象,但长度是固定的;集合的长度是可变的。
  2. (2)数组中可以存储基本数据类型,集合只能存储对象。

集合类特点:集合只用于存储对象,集合长度可变,集合可以存储不同类型的对象。

集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。

所有的集合类都位于java.util包下。

细数java集合,其中比较常见的就是List、Set、Map、和Queue,在这四者中,除了Map,其他三个接口都继承于Collection。

Collection

Collection接口概述:Collection层次结构中的根接口。

Collection表示一组对象,这些对象也称为collection的元素。

一些collection允许有重复的元素,而另一些不允许;一些collection是有序的,而另一些则是无序的。

成员方法:

</>复制代码

  1. 1boolean add(E e)
  2. 2)boolean remove(Object o)
  3. 3void clear()
  4. 4)boolean contains(Object o)
  5. 5boolean isEmpty()
  6. 6int size()
  7. 7boolean addAll(Collection c)
  8. 8boolean removeAll(Collection c)
  9. 9boolean containsAll(Collection c)
  10. 10boolean retainAll(Collection c)
  11. (11)把集合转成数组:Object[] toArray()
  12. (12)迭代器,集合的专用遍历方式:Iterator iterator()

Collection之List接口

概述:有序的collection,也称为序列。

List接口在java集合类中充当的是一个元素有序、元素可重复的集合角色。

继承于Collection集合,所以拥有Collection集合的所有方法。

List集合也拥有属于自己的方法:用来实现根据元素索引来操作集合元素的作用。

此接口的用户可以对列表中的每个元素的插入位置进行精确的控制。

用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

成员方法:

</>复制代码

  1. 1void add(int index,E element)
  2. 2)E remove(int index)
  3. 3)E get(int index)
  4. (4)E set(int index,E element)
  5. (5)ListIterator listIterator()

常见的继承List接口的实用类

ArrayList:

</>复制代码

  1. (1)基于数组实现的List类,封装了一个动态的、允许再分配的Object[]数组
  2. (2)ArrayList用initialCapacity参数来设置该数组的长度,当长度超过预设值后,ArrayList会动态增加。
  3. (3)ArrayList类是线程不安全的,如果要保证该集合的同步性,必须在程序中手动保存。
  4. (4)底层数据结构是数组,查询快,增删慢
  5. (5)线程不安全,效率高
  6. (6)增删慢也是在数据量较大的情况下,在数据量较小的情况下,ArrayList()不一定比LinkedList()方法慢。
  7. (7)另外,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。

LinkedList:

</>复制代码

  1. (1)底层数据结构是链表,查询慢,增删快。
  2. 2)除了继承List接口外,LinkedList接口也继承了Deque接口,所以也可以当作栈和队列(双向)来使用。
  3. (3)成员方法:
  4. 1public void addFirst(E e)及addLast(E e)
  5. 2public E getFirst()及getLast()
  6. 3public E removeFirst()及public E removeLast()

Vector:

</>复制代码

  1. (1)底层数据结构是数组,查询快,增删慢
  2. 2)Vector与Array List十分的相像,都是基于数组实现的List类,也是封装了一个动态分配的Object[]数组,也可以使用initialCapacity参数来设置数组的长度。
  3. (3)Vector是线程安全的,因此性能差

Stack:

</>复制代码

  1. 1)Stack是继承Vector的子类,它主要是用来模拟栈,因此也具备了peek()、pop()、push()等主要用于栈操作的方法。
  2. (2)Stack也是线程安全的,因此性能差

使用List集合的建议:

</>复制代码

  1. 1)遍历集合元素。ArrayList和Vector使用get()方法来获取遍历元素,LinkedList应该采用迭代器来遍历集合元素。
  2. (2)插入和删除。当这类操作较多的时候,优先考虑使用LinkedList。
  3. (3)多线程。当需要使用到多线程的ArrayList时,可以使用Collections将该集合类包装成线程安全的集合。

Collection之Set接口

一个不包含重复元素的collection。

Set接口是一个无序的、不可重复的集合。

Set集合中加入数据元素时,Set集合通常不用记住元素的添加顺序。

当两个相同元素加入到一个Set集合中,则添加操作失败。

常见的继承Set接口的实用类

HashSet:

</>复制代码

  1. (1)按照hash算法来存储集合中的元素,因此具有良好的存取和查找功能。
  2. 2)无序的,非线程同步的,集合元素可以是null
  3. (3)HashSet集合存储过程:
  4. 【1】当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该值决定该对象在HashSet中的存储位置。
  5. 2】如果有两个元素通过equals()方法返回true,但他们的hashCode()方法返回值不相等,HashSet也会将其存储在不同的位置。
  6. 3】也就是说:HashSet的添加元素判断标准是:两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。

LinkedHashSet:

</>复制代码

  1. (1)元素有序并且唯一。
  2. (2)由链表保证元素有序。
  3. (3)由哈希表保证元素唯一。
  4. (4)LinkedHashSet是继承HashSet的子类。

TreeSet:

</>复制代码

  1. (1)使用元素的自然顺序对元素进行排序。
  2. 2)或者根据创建set时提供的Comparator进行排序。
  3. (3)TreeSet是SortedSet接口的实现类,所以TreeSet可以确保集合元素处于排序状态。
  4. 4)TreeSet使用红黑树来维护集合元素的次序。如果实现comparator()方法,可以实现定制排序。如果采用自然排序,则返回null

EnumSet:

</>复制代码

  1. (1)专为枚举类设计的集合类
  2. (2)所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet显式或隐式的指定。
  3. (3)EnumSet在内部以位向量的形式存储,十分紧凑高效,因此EnumSet对象占用内存小,并且运行效率高
  4. 4)该集合元素中不允许加入null元素。

Map接口

该接口无法继承Collection接口,主要原因还是因为Map是用来存储具有映射关系的数据。

Map中保存着两组值。一组值用来保存Map中的Key,另外一组用来保存Map里的value。

值得注意的是,Map中的Key不能重复,判断标准是同一个Map对象的任何两个Key通过equals方法比较总是返回false

成员方法:

</>复制代码

  1. (1)V put(K key,V value)
  2. (2)V remove(Object key)
  3. (3)void clear()
  4. (4)boolean containsKey(Object key)
  5. (5)boolean containsValue(Object value)
  6. (6)boolean isEmpty()
  7. (7)int size()

Map接口和Collection接口的不同:

</>复制代码

  1. (1)Map是双列的,Collection是单列的
  2. (2)Map的健是唯一的,Collection的子体系Set是唯一的
  3. (3)Map集合的数据结构值针对健有效,跟值无关
  4. (4)Collection集合的数据结构是针对元素有效的

常见的继承Map接口的实用类

HashMap:

</>复制代码

  1. (1)线程不安全,并且HashMap中可以使用null作为key或者value
  2. (2)key是哈希表结构,可以保证健的唯一性

LinkedHashMap:

</>复制代码

  1. (1)LinkedHashMap使用一个双向链表来维护key-value对的次序
  2. (2)LinkedHashMap是一个有序的Map集合,顺序与key-value对的插入顺序保持一致
  3. (3)具有可预知的迭代顺序

TreeMap:

</>复制代码

  1. (1)TreeMap是一个红黑树的结构,每个key-value作为红黑树的一个节点
  2. (2)TreeMap也会对key进行排序,也分为自然排序和定制排序两种
  3. (3)健的红黑树结构,可以保重健的排序和唯一性

Iterator

Iterator概述:对collection进行迭代的迭代器,依赖于集合而存在

凡是实现了Collection接口的集合类,都有一个Iterator方法,用于返回一个实现了Iterator接口的对象,用于遍历集合。

成员方法:

</>复制代码

  1. (1)boolean hasNext()
  2. (2)E next()
  3. (3)remove()

参考链接

https://www.cnblogs.com/zhouy...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77081.html

相关文章

  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • Java9的新特性

    摘要:新特性概述系列一安装及使用系列二运行系列三模块系统精要系列四更新系列五系列六系列七系列八系列九与的区别迁移注意事项参数迁移相关选项解析使用构建实例使用示例带你提前了解中的新特性 Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...

    ddongjian0000 评论0 收藏0
  • Java学习笔记6-数据结构

    摘要:工具包提供了强大的数据结构这一节,我们来学习下的数据结构。枚举接口定义了一种从数据结构中取回连续元素的方式。六字典字典类是一个抽象类,它定义了键映射到值的数据结构。哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。 Java工具包提供了强大的数据结构,这一节,我们来学习下Java的数据结构。 一、数据结构分类 枚举(Enumeration) 位集合(BitSet) 向量(V...

    wmui 评论0 收藏0
  • 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

    摘要:导读阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下。目录一基础篇二进阶篇三高级篇四架构篇五扩 导读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己...

    huaixiaoz 评论0 收藏0
  • 我的阿里之路+Java面经考点

    摘要:我的是忙碌的一年,从年初备战实习春招,年三十都在死磕源码,三月份经历了阿里五次面试,四月顺利收到实习。因为我心理很清楚,我的目标是阿里。所以在收到阿里之后的那晚,我重新规划了接下来的学习计划,将我的短期目标更新成拿下阿里转正。 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金...

    姘搁『 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<