当前位置:首页 > Java技术 > Java集合体系

Java集合体系

2022年11月08日 18:18:46Java技术14

Java集合体系 _ JavaClub全栈架构师技术笔记

1. Collection

最基本的集合接口
一个Collection代表一组Object的集合

public interface Collection<E> extends Iterable<E>
java.util.Collection的子接口包括: 
java.util.Set 
    java.util.SortedSet 
    java.util.NavigableSet 
java.util.Queue 
    java.util.concurrent.BlockingQueue 
    java.util.concurrent.TransferQueue 
java.util.Deque 
    java.util.concurrent.BlockingDeque

任何实现Collection接口的类,都必须实现iterator方法来提供遍历集合中的元素

Iterator<T> iterator();

例如List中集合的遍历可以采用如下方式

List<String> stringList = Arrays.asList(array);
Iterator<String> iterator = stringList.iterator();
while(iterator.hasNext()){
    System.out.printf(iterator.next());
}

值得注意的是,Collection和Collectors的区别,Collection是集合的接口,所有的集合类都实现该接口;Collectors是一个类,提供了sort方法对集合进行排序。

1.1.List

List代表元素有序,可重复的集合,集合中每个元素都有对应的顺序索引,允许加入重复元素,通过索引指定元素的位置,实现有ArrayList,Vector,Queue。

1.1.1 ArrayList

ArrayList是基于数组的实现,封装了一个动态增长,允许再分配的Object[]数组。

1.1.2 Vector

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

使用方法和ArrayList基本相同,子类有Stack。和ArrayList区别是Vector是线程安全的,对集合元素操作的时候都加了Synchronized,保证线程的安全;在扩容时,Vector默认增长一倍的容量,而List只增长50%;

1.1.2.1 Stack

stack(栈)实现了Vector类,后进先出。

1.1.3 LinkedList

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

实现List接口,Deque接口;基于链式的存储方式

1.2 Queue

queue用于模拟队列这种数据结构,先进先出。
1.2.1PriorityQueue

最大堆,最小堆,基于数据的完全二叉树实现

1.2.2 Deque

1.2.2.1 LinkedList

实现了List和Deque(双端队列Deque继承了Queue接口)两个接口。它可以作为List和Queue使用,也可以作为栈进行使用。

1.3 Set

Set继承Collection接口,不能包含重复元素,Set判断两个对象不是使用==来判断,是使用equals方法,新加入的元素会与已有的元素判断equals比较返回false则加入,否则拒绝加入;所以使用Set的时候有两点需要注意:1.放入的对象要实现equals方法;2.对set的构造函数中,传入的Collection参数不能包含重复的元素。

1.3.1 HashSet

HashSet实现了Set接口,由哈希表提供支持,不保证Set的迭代顺序;允许使用null值,同时不允许元素有重复,因为HashSet底层是使用HashMap来实现的,HashSet中的元素都存放在HashMap的key上面,value是一个统一的静态变量;

HashSet中添加元素调用add方法,然后会调用HashMap的put方法插入元素,HashMap的put方法插入元素时,会首先判断是否存在key,如果不存在,则插入这个key-value,存在则修改value值;在set中,value值没用,因此往HashSet中添加元素,首先判断key是否存在,不存在插入元素,存在则不做处理;
HashSet使用Hash算法存储集合中的元素,具有很好的查找和存取性能。向HashSet中存入一个元素时,HashSet调用对象的HashCode方法获取对象的HashCode值,根据HashCode值决定对象的存储位置。HashSet判断元素对象是否相同的方法是同时使用HashCode和equals方法来判断,关于equals方法和HashCode的说明:

1.equals相等的对象,hashCode一定相等;

2.equals不相等的对象,hashCode可能相等,也可能相等。(哈希生成的时候产生碰撞)

3.反之,HashCode不相等,则equals方法一定不相等(如果equals相等则与规则1矛盾);

4.HashCode相等,equals可以相等,也可以不相等。

HashSet判断元素相等方法时,首先判断两个对象的HashCode是否相等,如果不相等,则认为两个对象也不相等,如果相等再判断equals方法是否相等;如果hashCode相等,equals方法不相等,则认为时不同的对象;为什么这样做,主要是为了提高效率,HashCode的效率比equals效率更高,不必每次重新计算Hash值.
1.3.1.1 linkedHashSet
linkedHashSet继承自HashSet,同时使用链表来维护元素的顺序,元素以插入的顺序进行访问;在性能上略低于HashSet,但在迭代访问时有很好的性能;

1.3.2 SortedSet
主要用于排序操作,实现此接口的子类都属于排序子类。

1.3.1.1 TreeSet
基于SortedSet,底层实现是通过二叉树,插入的元素要实现Comparable接口。

作者:CodeHunter_qcy
来源链接:https://blog.csdn.net/qq_43390235/article/details/90746869

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68495.html

标签: Java集合Java
分享给朋友:

“Java集合体系” 的相关文章

Java空指针异常解决java.lang.NullPointerException解决心得

Java空指针异常解决java.lang.NullPointerException解决心得

今天做课设的时候运行程序报出以下错误 java.lang.NullPointerException 首先要理解的是此错误并不会在 程序中报错,只会在运行的时候报错。 是由于某个参数(集合,数组等数据)可能出现一个null值而导致后面的程序不能运行时...

Java日志框架那些事儿

Java日志框架那些事儿

在项目开发过程中,我们可以通过 debug 查找问题。而在线上环境我们查找问题只能通过打印日志的方式查找问题。因此对于一个项目而言,日志记录是一个非常重要的问题。因此,如何选择一个合适的日志记录框架也非常重要。在Java开发中,常用的日志记录框架有JDKLog、Log4J、LogBack、SLF4J...

java计数循环及小技巧

要运行一个很大次数的循环应该选择一个小数,然后去判断 例如本例子是100可以选择10去判断 public static void main(String[] args) { // TODO Auto-generated metho...

全网最细笔记java与kotlin的一些异同

本文主要介绍java与kotlin的一些异同 后面可能还会继续比较kotlin和dart 期待吗? 打印日志 Java System.out.print("Amit Shekhar"); S...

编写高质量代码改善java程序的151个建议——[52

编写高质量代码改善java程序的151个建议——[52

原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks Although the world is full of...

深入浅出: Java回调机制(异步)

Writer      :BYSocket(泥沙砖瓦浆木匠) 什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道“就一个回调…”。此时千万个草泥马飞奔而过(逃 哈哈,看着源码,享受着这种回调在代码上的作用,...

图解 Java IO : 二、FilenameFilter源码

图解 Java IO : 二、FilenameFilter源码

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆  &...

java提高篇(二五)

java提高篇(二五)

      在java中与有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个...

java IO流学习总结

java IO流学习总结

java IO流学习总结 近期学习了Java的IO流,尝试着总结一下。 java.io 包下的IO流很多: 其中,以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流。所有的输入流都是抽象类IuputStream(字节输入流)或者抽象类R...

JavaWeb(一)之细说Servlet

JavaWeb(一)之细说Servlet

前言   其实javaWeb的知识早就学过了,可是因为现在在搞大数据开发,所以web的知识都忘记了。准备开始慢慢的把Web的知识一点一点的回忆起来,多学一点没有关系,就怕到时候要用的话,什么都不会了。 一、Servlet概述 1.1、Servlet简介   Se...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。