集合,可变参数,Collections,Steam流

集合

一.单列集合

(1)collection接口, 单列数据,定义了存取一组对象的方法的集合。

 collection  

1、添加
add(Object obj)
addAll(Collection coll)
2、获取有效元素个数
int size()

3、集合是否相等
boolean equals(Object obj)
4、转换成对象数组
Object [] toArray()
5、获取集合对象的哈希值
hashCode()
6、遍历
iterator():返回迭代器对象,用于集合遍历

collection常用子接口:List接口(其中List常用子接口又有ArrayList、LinkedList、Vector...  )、Set接口(其中Set子接口又有HashSet、TreeSet、LinkedHashSet)

List接口

ArrayList:

ArrayList():构造一个默认大小为10容量的空列表。

LinkedList和ArrayList方法一样,只是底层实现不一样。ArrayList底层为数组存储,LinkedList是以双向链表存储。LinkedList集合没有初始化容量。最初这个链表中没有任何元素。first和last引用都是null。

LinkedList:

一) LinkedList():构造一个空的LinkedList对象。

  二) LinkedList(Collection c):构造一个和参数c相同元素的LinkedList对象

Vector

1、底层也是一个数组。
2、初始化容量:10
3、怎么扩容的?
    扩容之后是原容量的2倍。
    10--> 20 --> 40 --> 80
4、Vector中所有的方法都是线程同步的,都带有synchronized关键字,
是线程安全的。效率比较低,使用较少了。
5、怎么将一个线程不安全的ArrayList集合转换成线程安全的呢?
    使用集合工具类:
        java.util.Collections;
        java.util.Collection 是集合接口。
        java.util.Collections 是集合工具类。
Collections.synchronizedList();//将及格转换为线程安全的。

二.双列集合

  Map接口:双列数据,保存具有映射关系“key-value对”的集合。

 Map常用子接口:Hashtable,LinkedHashMap,HashMap,TreeMap、Properties

(2)map接口:双列数据,保存具有映射关系“key-value对”的集合。

Set接口
  • Set接口是Collection的子接口,Set集合中的元素是无须,同时不可重复的
  • 可以存放null元素
  • Set接口的实现类有HashSet、treeSet、LinkedHashSet
HashSet

1.HashSet是为了优化查询速度而设计的Set,允许存放null值。元素不可重复且无序
对于存在HashSet集合中的元素需要重写equals()方法和HashCode()方法
HashSet是线程不安全的

2.添加数据底层源码解析

底层实现图解:链表+数组+红黑树

treeSet

  ①Tree是SortedSet接口的实现类,TreeSet可以确保集合元素除余排序状态。

        ②Tree底层使用红黑树结构存储数据。

        ③新增的方法:(了解)

                >Comparator comparator()        >Object higher(Object e)

                >Object first()                             >SortedSet subSet(fromElement,toElement)

                >Object last()                             >SortedSet headSet(toElement)

                >Object lower(Object e)             >SortedSet taiSet(fromElement)

        ④Tree两种排序方法:自然排序和定制排序。默认情况下,Tree采用自然排序。

        ⑤TreeSet和后面的TreeMap采用红黑树的存储结构。特点:有序,查询速度比List快。

原文链接:https://blog.csdn.net/qq_55133453/article/details/124476889

HashMap


        ①HashMap是Map接口使用频率最高的实现类。

        ②允许使用null键和null值,与HashSet一样,不保证映射的顺序。

        ③所有的key构成的集合是Set:无序的、不可重复的。所以,key所在的类要重写equals()和hashCode()

        ④所有的value构成的集合是Collection:无序的、可以重复的。所以,value所在的类要重写equals()

        ⑤一个key-value构成一个entry

        ⑥所有的entry构成的集合是Set:无序的、不可重复的

        ⑦HashMap 判断两个key相等的标准是:两个key通过equals()方法返回true,hashCode值也相等。

        ⑧HashMap 判断两个value相等的标准是:两个value通过equals()方法返回true。

LinkedHashSet

    ①LinkedHashMap是HashMap的子类

        ②在HashMap存储结构的基础上,使用了一堆双向链表来记录添加元素的顺序

        ③与LinkedHashSet类似,LinkedHashMap可以维护Map的迭代顺序:迭代顺序与Key-Value对的插入顺序一致 

可变参数

一 可变参数本质上就是一个数组

二 作用:在形参中接收多个数据

三 格式:数据类型...参数名称

如:int...a

四 注意事项:

1.在方法形参中最多只能写一个可变参数

2.在方法中,如果除了可变参数,还有其他形参,可变参数要写到最后

Collections

1.java.util.Collections:是集合工具类

2.作用:Collections不是集合,而是集合的工具类

3.方法(主要):Collections.addall(集合名,element)

Collections.shuffle(集合名)

Collections.sort()给元素排序(默认规则)Collections.sort(集合名,new Compare)

Steam流

概述:
Stream是Java 8引入的一种新的抽象,它使得我们可以以类似于SQL查询的方式来操作集合数据。Stream不是数据结构,而是对数据进行操作的工具。结合了lambda表达式,简化集合,数组的操作。它可以从集合、数组等数据源创建,并支持各种操作,如过滤、映射、排序、聚合等。

特点:
Stream是面向函数式编程的,它允许使用Lambda表达式进行操作。
Stream提供了一种延迟执行的机制。在进行最终操作之前,可以对Stream进行多次中间操作,这样可以构建一个操作流水线。
Stream操作是惰性的,只有在需要结果时才会进行实际计算。
Stream可以是无限的,也可以是有限的。

创建Stream:
从集合创建:可以通过集合的stream()方法来创建一个Stream流。

从数组创建:可以使用Arrays.stream()方法来创建一个Stream流。

从值或数组元素创建:可以使用Stream.of()方法来创建一个包含指定值或数组元素的Stream流。

从文件创建:可以使用Files.lines()方法来读取文件并创建一个Stream流。
中间操作和终端操作:

中间操作:中间操作是对Stream进行转换和过滤的操作,它们返回一个新的Stream对象。常见的中间操作包括filter()、map()、sorted()、distinct()等。

终端操作:终端操作是对Stream进行最终操作并产生结果的操作。它们可能返回一个非Stream的结果,例如forEach()、count()、collect()等,或者返回一个新的Stream,例如map()和filter()操作的组合。
常见操作示例:

过滤:使用filter()方法根据给定的条件过滤集合中的元素。
映射:使用map()方法将集合中的元素映射为新的值,转换流中数据类型
排序:使用sorted()方法对集合中的元素进行排序。
聚合:使用reduce()方法将集合中的元素聚合为单个结果。
收集:使用collect()方法将Stream中的元素收集到集合中。

获取:使用limit()方法获取前几个元素

跳过:使用skip()跳过前几个元素

Stream<T> distinct() 元素去重,依赖(hashCode,equals方法)

static <T>Stream<T>concat(Stream a, Steam b)合并a,b两个流

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值