Java中的容器真的很重要

举报
周杰伦本人 发表于 2022/11/29 18:17:41 2022/11/29
【摘要】 Java中的容器真的很重要提起Java的容器,对java有一定基础的小伙伴肯定不会陌生。它是一个重要的数据结构,对对象的操作通常离不开集合。容器分为两种:Collection和Map,Collection是元素的集合,而Map是键值对。对应容器的代码都是java.util的包下的内容,提供很多操作集合的API像添加容器使用Arrays.asList()和Collections.addAll...

Java中的容器真的很重要

提起Java的容器,对java有一定基础的小伙伴肯定不会陌生。它是一个重要的数据结构,对对象的操作通常离不开集合。

容器分为两种:Collection和Map,Collection是元素的集合,而Map是键值对。

对应容器的代码都是java.util的包下的内容,提供很多操作集合的API

像添加容器使用Arrays.asList()和Collections.addAll()方法

List集合

List接口继承了Collection接口,它下面有很多实现类,典型就是ArrayList和LinkedList了。

Set接口和Collection接口完全一致,,它的特性就是元素不重复,所以常常用它来进行去重操作。它下面的实现类典型的有HashSet、TreeSet。HashSet使用数组散列函数处理这些元素,TreeSet使用红黑树的数据结构,TreeSet可以保证有序。

队列Queue

Queue同样继承了Collection接口,既然是队列,众所周知,先进先出的特性。你可能不知道,LinkedList实现了List接口的同时也实现了Queue接口。

PriorityQueue可以按照一定的等待时长优先级排列这些元素

PriorityQueue的构造方法:

public PriorityQueue(int initialCapacity,
                         Comparator<? super E> comparator) {
    
    if (initialCapacity < 1)
        throw new IllegalArgumentException();
    this.queue = new Object[initialCapacity];
    this.comparator = comparator;
}

通过PriorityQueue的构造方法我们知道,可以传入一个Comparator的实现类来定义排序规则,例如Collections.reverseOrder()

看一下Queue提供的一些方法:

  • offer()是放入元素到队尾
  • peek()方法是获取队头的元素,不会将队头元素移除,如果队列为空返回null
  • element()方法同样是获取队头的元素,不会将队头元素移除,当如果队列为空的话抛出异常
  • poll()方法是移除队头元素并返回队头元素,队列为空返回null
  • remove()方法移除并返回队头元素,队列为空抛出异常

Map

说完Collection再说说Map,Map中的get()方法用来获取元素,put()方法用来放置元素,containsKey()方法检测key是否存在,containsValue()方法检测对应的value值是否存在,keySet()方法会让map中的所有的key组成一个set集合,遍历的时候通常会用到这个方法。比如下面这种遍历方式:

for (String key : map.keySet()) {
   System.out.println("key= "+ key + " and value= " + map.get(key));
}

最后附上一张这些接口和类的关系图,希望你看完之后更加明了。

总结

这篇文章我们讲了容器中的List、Queue和Map等内容,其实是Collection接口和Map接口两大分支。Java的容器还是相当重要的了,里面涉及到的类也很多,包括一些并发容器,java容器的内容还是值得研究的。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。