Java中集合类的详解

Java中集合类的详解

1、集合的概述

  集合在Java是一种用来存储多个数据的容器,它的功能与数组相类似,但集合类的提出解决了数组长度不可变的难题,让数据的存储更加方便快捷。

  按照集合的存储结构,可以将集合类分为两大类,分别是进行单值存储的Collection集合和进行键值对存储的Map集合,这两集合都在Java的封装的工具包:java.util 中,因此在使用对应的集合类时需要进行导包操作。

  

2、集合的结构图

  以下是Java中集合的结构图:

在这里插入图片描述

  由上图可以知晓集合类有三个顶级的父接口:Collection接口、Map接口和Iterator接口,Collection接口是所有Collection集合的顶级父接口,Map接口是所有Map集合的顶级父接口,而Iterator接口很特殊,它不是的功能不是用来存储数据的,而是用来遍历集合中的数据。

  

3、集合的分类

  在上面介绍了集合按存储的结构可以分为Collection集合和Map集合,下面就来介绍关于这两种集合的相关知识。

3.1、Collection集合

  Collection集合在存储数据时,进行的是单个数据的存储,也就是说只要是一个Java中的对象就能存进该类集合中去。在Collecttion集合中,作为顶级父接口的Collection接口在开发中是不会直接使用的,会进行操作的是该接口中的两个子接口,分别为:List接口和Set接口。

3.1.1、List接口

  List接口是进行单值存储的集合的一个重要分支,实现该接口的集合类可以存储相同的数据,存储的数据是以一种线性方式进行存储,类似于数组的结构,每个数据都会存在一个下标,通过该下标便可以访问对应的元素(数据),正是因为数据时线性存储的在遍历时,输出数据的顺序和存入数据的顺序是一样的。

  List集合常用的方法有以下几个:

  • public void add(int index,E e)——将制定的元素存储到指定的下标处。

  • public E get(int index)——返回指定下标的元素

  • public E remove(int index)——删除指定下标处的元素,返回被删除的元素

  • public E set(int index,E e)——将指定下标处的元素替换成新的元素,返回的是被替换的旧元素

  因为List接口是无法使用 new 字段创建一个List集合对象的,因此需要创建List集合需要使用到List接口的两个实现类,分别是:ArrayList类和LinkedList类。

  这两个集合类在我之前的两篇博文中有详细介绍,感兴趣的小伙伴可以点击下方链接了解详情,在这我就不做详细的介绍了,就简单的介绍一下。

  ArrayList集合的底层实现结构与数组相类似,但ArrayList的长度可以实现动态扩容,该集合的特点是方便数据的查询和遍历,缺点是对数据的增删处理效率低;而LinkedList集合的底层实现结构是基于双向链表实现,该集合的特点是方便数据的增删,缺点是对数据的查询和遍历处理效率低。

“Java中的集合类:LinkedList”
“Java中的集合类:ArrayList”

3.1.2、Set接口

  Set接口与List接口在数据存储机制上有所不同,List接口中是可以存储相同数据,但在Set接口中元素是不可以重复的,也就是说不可以存储相同的元素,List集合中的数据时线性存储的,而在Set集合中,数据的存储是无序的。这就是实现Set接口的集合与List集合不一样的地方。

  当然Set接口和List接口一样,无法使用 new 字段创建集合对象,需要使用到它的一个常用的子类:HashSet类和一个不常用的子类:TreeSet类。HashSet类我之前的博文也有详细的介绍,在这就不做详细的介绍了,感兴趣的小伙伴可以点击下方链接进行了解,在这就简单的介绍一下:

  HashSet集合类的底层实现结构是基于哈希表的实现,通过哈希值的计算得出存储的位置,而该集合不可以存储相同数据的机制是依赖于HashMap集合的结构。该集合的特点是:具有良好的数据存取和查找的性能。

“Java中的集合类:HashSet”

  TreeSet集合类中的数据比HashSet集合中的数据的约束更严格,在TreeSet中数据的存储的按照大小进行排序,因此在数据存储后会进行大小比较,排序规则是依靠了一个接口Comparable接口,在上面的结构图中也有体现(在图的右下角)。

  在Comparable接口中可以自己定义数据比较后存储顺序的规则:返回-1表示新数据比较小,放在旧数据前面,返回1表示新数据比较大,放在旧数据后面,返回0表示比较的两个数据相同,那么新数据不进行存储。

  因此存储的数据需要实现Comparable接口,而在Java中八种基本类型是是实现了Comparable接口的,但如果存储的数据的类型是自定义的类型,那么该类性需要实现Comparable接口,如下方代码所示:

public class Person implements Comparable<Person>{
    private  String name;
    private  int age;

    public Person() {
    }

    
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
    //该方法便是实现了Comparable接口后需要重写的关于排序规则的方法
    @Override
    public int compareTo(Person person) {
        if(this.age>person.age){
            return 1;
        }else if(this.age<person.age){
            return -1;
        }else {
            if(this.getName().equals(person.getName())){
                return 0;
            }
            return 1;
        }
    }
}

  该集合有几个常用的方法:

  • boolean add(E e)——添加指定的元素,成功返回true,失败返回false
  • Boolean remove(Object o)——删除你指定的元素,元素在集合中存在则删除成功,返回true,元素在集合中不存在则删除失败,返回false
  • Boolean contains(Object o)——查找列表中是否含有指定元素,含有返回true,不含有返回false
  • int size()——获取集合中的元素总数
  • Boolean isEmpty()——判断集合是否为空,为空返回true。不为空返回false
  • Iterator< E > iterator()——返回该集合的迭代器,该迭代器可以用来进行集合的遍历,遍历方式和上面的HashSet介绍博文中介绍的是一样的

  关于Collection集合的相关知识就介绍到这,下面来介绍Map集合。

3.2、Map集合

  Map集合在进行数据存储时,是进行键值对的方式存储,简单的说就是:在你进行元素存储时,需要给这个元素加一个标识,该标识就是键值对中的键(Key),而你要进行存储的元素就是键值对中的值(Value)。在Map集合中,作为顶级父接口的Map接口在开发中也是不会直接使用的,会进行操作的是该接口中的三个子类,分别为:HashMap类、Hashtable类和TreeMap类

3.2.1、HashMap类

  该集合类在我之前的博文中有详细的介绍,在这里我就不做详细介绍了,感兴趣的小伙伴可以点击下方链接进行了解,在这就简单的介绍一下:

  该集合的底层实现结构也是基于哈希表的实现,和HashSet集合类不同的是HashMap集合类存储的是键值对,该集合中不允许出现重复的键(Key),如果出现重复的键(Key),那么该重复键所对应的新的值(Value)将覆盖旧的值。反应快的朋友是不是就想到了上面在HashSet中提到了不存储重复值的机制是依赖于HashMap集合来实现的,没错正是依赖于HashMap集合中键不可以重复的机制。

“Java中的集合类:HashMap”

3.2.2、Hashtable类

  该集合类是Java在早期时对Map接口的实现类,之后被性能更高的HashMap所取代,因此该集合类和上述的HashMap集合操作基本类似,基本类似也就是说还是有不同之处的,二者的不同之处在于以下两点:

  (1)Hashtable集合中进行的是同步处理,性能较低,而HashMap集合进行的是异步处理,性能较高,

  (2)Hashtable集合中的存储的键值对中的值(Value)不可以为null,而HashMap集合中存储的键值对中的键(Value)可以为null。

  以上就是二者的不同之处的介绍。

3.3.3、TreeMap类

  该集合类与上述的TreeSet集合类相似,数据也是按照大小进行顺序存储,因此存储的数据也需要实现Comparable接口,具体是操作依照TreeSet集合类的演示。

  该集合类有几个常用的方法:

  • V put(K key,V value)——存储指定键值对,返回存储的值(Value)
  • boolean containKey(Object key)——判断集合中是否含有指定的键(Key),存在返回true,不存在返回false
  • boolean containValue(Object value)——判断集合中是否含有指定的值(Value)存在返回true,不存在返回false
  • V get(Object key)——获得指定键(key)所对应的值(value),不存在键(Key)则返回null
  • Set< K > keySet()——返回集合中所有键(Key)的Set列表
  • v remove(Object key)——删除指定键(Key)对相应的值(Value)删除成功返回被删除的值,键(Key)不存在则返回null
  • int size()—获得集合中元素的个数
  • Collection< V > values()——返回集合中所有值(Value)的Collection列表

  以上就是对Map集合的所有介绍,由此关于Java中的集合类的详解就已经介绍完毕了。希望文章可以帮到你们,感谢大家阅读,如果觉得文章写得不错就关注我吧,我会不定期更新关于Java的相关知识的博文。

  

相关博文链接:

“Java中的集合类:HashMap”
“Java中的集合类:HashSet”
“Java中的集合类:LinkedList”
“Java中的集合类:ArrayList”

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值