Java各种集合以及特点归纳总结

在Java中有List、 Set、 Map三大集合,其中List与Set是继承自Collection,而Map不是。
文末有三大集合的汇总总结,有需要的可以直接拉到文末。

List集合:

1、ArrayList(最常用)

底层是动态数组,故优缺点同数组:查询快,增删慢
线程不安全,效率高

2、LinkedList

底层是链表,(巧记:和数组优缺点互补)查询慢,增删快
线程不安全,效率高

3、Vector

底层是数组,查询快,增删慢
线程安全,效率低

Set集合:

1、HashSet

(也可参考我的另一篇:https://blog.csdn.net/tiansheshouzuo/article/details/88902405)
底层是哈希表
哈希表唯一依赖两个方法:hashCode(),equals();
向HashSet集合中放入新元素的执行顺序:
1、调用Hashcode()函数,看是否已经有相同的哈希值
2、如果没有则放入该新元素,如果有则调用equals()函数逐个比对,如果没有,则放入,如果有,则不执行添加元素操作。

2、LinkedHashSet

底层是:哈希表(元素不可重复)+链表(有序,因为链表记录每个元素都记录后一个元素的地址)
PS:何为有序?
有序指的不是自动排序,序指的是元素存入集合的顺序,当元素存入的顺序和元素的排序位置是一致时就是有序

3、TreeSet

底层是红黑树,自然平衡二叉树,因为是二叉树结构所以集合内元素自动按升序排列(升序是其最大特征)。
元素不可重复
(理解思路1:TreeSet是对Set集合的实现,而Set集合都是不可重复的
理解思路2:TreeSet自动排序,添加元素时会调用compareTo(Object obj)方法,遇到重复不添加元素)
有两种排序方法:自然排序(默认升序)和定制排序。

Map集合:(一对数据地去保存:“键+值”)

1、HashMap

底层是哈希表(哈希表的本质是数组+链表)
把它的键套用HashSet的规则即可,只是每个键都附带了其各自的值。

2、LinkedHashMap

底层是哈希表和链表
把它的键套用LinkedHashSet的规则即可,只是每个键都附带了其各自的值。

3、Hashtable

底层是哈希表(哈希表的本质是数组+链表),十分类似于HashMap
与HashMap唯一区别:Hashtable线程安全,效率低,不允许null键null值
HashMap线程不安全,效率高,允许null键null值

4、TreeMap

底层是红黑树,自然平衡二叉树
其键的存储类似于TreeSet,只是每个键都附带了其各自的值(value)。

List集合特点:1、有存放顺序(有序)2、元素可重复

Set集合特点:1、没有存放顺序 2、元素不可重复

Map集合特点:Map属于双列集合,由键值对组成(键+值 成对存储),其中键完全和List集合的特点相同(底层一样),值依附于每一个键上,不受规则影响(比如TreeMap的键不可重复,但值可重复)

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 我可以提供一个示例:List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); int sum = list.stream().mapToInt(i -> i).sum(); System.out.println("Sum = " + sum); ### 回答2: 在Java中,可以使用Stream流来对数据进行归纳和处理。Stream是Java 8中引入的一种处理数据集合的方式,可以将集合中的元素进行过滤、转换、排序等操作。 假设有一个学生类Student,包含学生的姓名、年龄和性别等信息。现在有一个Student对象的列表,我们需要对这个列表进行归纳归纳可以包括统计学生人数、计算学生年龄平均值、筛选出指定条件的学生等操作。 首先,我们可以使用stream()方法将Student列表转换为一个流对象。然后,可以使用不同的Stream操作来进行归纳。比如,我们可以使用filter()方法筛选出年龄大于18的学生: List<Student> students = ...; List<Student> filteredStudents = students.stream().filter(s -> s.getAge() > 18).collect(Collectors.toList()); 接下来,我们可以使用count()方法统计学生人数: long count = students.stream().count(); 同时,我们可以使用mapToInt()方法将学生的年龄提取出来进行计算,然后使用average()方法计算年龄平均值: double averageAge = students.stream().mapToInt(Student::getAge).average().orElse(0); 除了上述常用的归纳操作外,Stream提供了丰富的操作方法,可以根据需求进行选择和组合。比如,可以使用sorted()方法对学生按照特定的属性进行排序,使用max()方法找出年龄最大的学生等。 综上所述,使用Java Stream流可以非常方便地对数据进行归纳操作,提高了代码的简洁性和可读性,同时也提升了程序的性能和效率。 ### 回答3: Java Stream是Java 8中引入的一个强大的数据处理工具。使用Stream可以以一种简洁而高效的方式对数据进行处理和归纳。 首先,我们需要一个数据集合来进行归纳。假设我们有一个学生类Student,包含姓名、年龄和分数属性。我们要对一组学生进行归纳,计算总年龄和分数。 可以通过以下步骤来完成: 1. 创建一个学生列表: ``` List<Student> students = new ArrayList<>(); ``` 2. 向列表中添加学生对象: ``` students.add(new Student("张三", 18, 90)); students.add(new Student("李四", 20, 85)); students.add(new Student("王五", 19, 95)); ``` 3. 使用Stream对学生列表进行归纳: ``` int totalAge = students.stream() .mapToInt(Student::getAge) .sum(); int totalScore = students.stream() .mapToInt(Student::getScore) .sum(); ``` 首先,我们通过stream()方法将列表转换为流。然后,使用mapToInt()方法将学生对象的年龄和分数转换为对应的int值,并依次求和。 最后,我们可以打印出总年龄和总分数: ``` System.out.println("总年龄:" + totalAge); System.out.println("总分数:" + totalScore); ``` 以上代码将会输出: ``` 总年龄:57 总分数:270 ``` 通过Stream的链式操作,我们可以简单而高效地对数据进行归纳,避免了繁琐的循环和临时变量。同时,Stream提供了更多的数据处理方法,如过滤、排序、去重等,可以根据实际需求进行灵活应用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值