Java集合知识点,猿人花了几天时间整理,还有Java超神之路脑图、月薪3万Java优秀简历模板、全网最全一线大厂Java笔试面试题、1000+本Java开发精华电子书送给大家,希望大家认真学习哦!

集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。

数组与集合的区别如下:

1)数组长度不可变化而且无法保存具有映射关系的数据;集合类用于保存数量不确定的数据,以及保存具有映射关系的数据。

2)数组元素既可以是基本类型的值,也可以是对象;集合只能保存对象。

Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系,(注意:Map不是Collection的子接口)

其中List代表了有序可重复集合,可直接根据元素的索引来访问;Set代表无序不可重复集合,只能根据元素本身来访问;Queue是队列集合;Map代表的是存储key-value对的集合,可根据元素的key来访问value。

集合体系中常用的实现类,分别是ArrayList、LinkedList、ArrayQueue、HashSet、TreeSet、HashMap、TreeMap等实现类。

如下给出了集合的思维导图:

猿码天地-Java知识学堂脑图 (文件密码:请关注公众号【猿码天地】,回复关键字‘活到老学到老’获取)
猿码天地-Java超神之路脑图 (文件密码:请关注公众号【猿码天地】,回复关键字‘活到老学到老’获取)

List用法

实现方式:ArrayList,LinkedList,Vector
添加对象:list.add()
获取对象:list.get()
获取对象大小:list.size()

1.可以允许重复的对象。
2.可以插入多个null元素。
3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

为什么要用 List list = new ArrayList() ,而不用 ArrayList list = new ArrayList()呢?

问题就在于List有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如LinkedList或者Vector等等,这时你只要改变这一行就行了。
List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。
假设你开始用 ArrayList list = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。

Map用法


Map接口中键和值一一映射. 可以通过键来获取值。
实现类:HashMap、LinkedHashMap、Hashtable 和 TreeMap
插入元素:map.put()
移除元素:map.remove()
清空元素:map.clear()
获取map里有多少个键值对:map.size()

1、Map不是collection的子接口或者实现类。Map是一个接口。

2、Map 的 每个Entry都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。

3、TreeMap也通过 Comparator 或者 Comparable维护了一个排序顺序。

4、Map里你可以拥有随意个 null 值但最多只能有一个 null 键。

5、Map接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

java中遍历map具体方式:

在Map接口中,共有四种实现:HashMap、LinkedHashMap、Hashtable 和 TreeMap。
HashMap 线程不安全,效率高。允许null键和null值,是基于哈希表的Map接口实现,哈希表的作用是用来保证键的唯一性。
Hashtable:线程安全,效率低。不允许null键和null值。
TreeMap 是基于红黑树的Map接口的实现。
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。 添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。

结果:
{key4=value4, key3=value3, key6=value6, key5=value5, key2=value2, key1=value1, key8=value8, key7=value7}
8
true
[key4, key3, key6, key5, key2, key1, key8, key7]
键key4,键key3,键key6,键key5,键key2,键key1,键key8,键key7,value3
{key4=value4, key6=value6, key5=value5, key2=value2, key1=value1, key8=value8, key7=value7}
[value4, value6, value5, value2, value1, value8, value7]
value6
key4<->value4
key6<->value6
key5<->value5
key2<->value2
key1<->value1
key8<->value8
key7<->value7

map遍历的7种方式

package com.bowen.demo.demo004;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;/*** <h3>java-study</h3>* <p>MapBL</p>* @author : zhang.bw* @date : 2021-03-22 12:30**/
public class MapBL {/*** HashMap 遍历* 大体上可以分为4类:* 1,迭代器 (EntrySet、KeySet)* 2,ForEach 遍历 (EntrySet、KeySet)* 3,lambda 表达式遍历(lambda遍历)* 4,StreamsApi 遍历(StreamsApi单线程、StreamsApi所线程)*//*** 迭代器 (EntrySet)*/public  static  void test1(){//创建Map 对象Map<Integer, String> map = new HashMap<>();//添加数据map.put(1,"我爱中国1");map.put(2,"我爱中国2");map.put(3,"我爱中国3");map.put(4,"我爱中国4");map.put(5,"我爱中国5");//遍历Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();while (iterator.hasNext()){Map.Entry<Integer, String> next = iterator.next();System.out.println(next.getKey());System.out.println(next.getValue());}}/*** 迭代器 (KeySet)*/public  static  void test2(){//创建Map 对象Map<Integer, String> map = new HashMap<>();//添加数据map.put(1,"我爱中国1");map.put(2,"我爱中国2");map.put(3,"我爱中国3");map.put(4,"我爱中国4");map.put(5,"我爱中国5");//遍历Iterator<Integer> iterator = map.keySet().iterator();while (iterator.hasNext()){Integer key = iterator.next();System.out.print(key);System.out.print(map.get(key));}}/*** ForEach 遍历 (EntrySet)*/public  static  void test3(){//创建Map 对象Map<Integer, String> map = new HashMap<>();//添加数据map.put(1,"我爱中国1");map.put(2,"我爱中国2");map.put(3,"我爱中国3");map.put(4,"我爱中国4");map.put(5,"我爱中国5");//遍历for (Map.Entry<Integer,String> entry: map.entrySet()) {System.out.println("entry.getKey() = " + entry.getKey());System.out.println("entry.getValue() = " + entry.getValue());}}/*** ForEach 遍历 (KeySet)*/public  static  void test4(){//创建Map 对象Map<Integer, String> map = new HashMap<>();//添加数据map.put(1,"我爱中国1");map.put(2,"我爱中国2");map.put(3,"我爱中国3");map.put(4,"我爱中国4");map.put(5,"我爱中国5");//遍历for (Integer key: map.keySet()) {System.out.println(key);System.out.println(map.get(key));}}/*** lambda 表达式遍历(lambda遍历)*/public  static  void test5(){//创建Map 对象Map<Integer, String> map = new HashMap<>();//添加数据map.put(1,"我爱中国1");map.put(2,"我爱中国2");map.put(3,"我爱中国3");map.put(4,"我爱中国4");map.put(5,"我爱中国5");//遍历map.forEach((key,value) -> {System.out.print(key);System.out.print(value);});}/*** treamsApi 遍历(StreamsApi单线程)*/public  static  void test6(){//创建Map 对象Map<Integer, String> map = new HashMap<>();//添加数据map.put(1,"我爱中国1");map.put(2,"我爱中国2");map.put(3,"我爱中国3");map.put(4,"我爱中国4");map.put(5,"我爱中国5");//遍历map.entrySet().stream().forEach((integerStringEntry -> {System.out.println(integerStringEntry.getKey());System.out.println(integerStringEntry.getValue());}));}/*** treamsApi 遍历(StreamsApi所线程)*/public  static  void test7(){//创建Map 对象Map<Integer, String> map = new HashMap<>();//添加数据map.put(1,"我爱中国1");map.put(2,"我爱中国2");map.put(3,"我爱中国3");map.put(4,"我爱中国4");map.put(5,"我爱中国5");//遍历map.entrySet().parallelStream().forEach((integerStringEntry -> {System.out.println(integerStringEntry.getKey());System.out.println(integerStringEntry.getValue());}));}/*** 测试* @param args*/public static void main(String[] args) {MapBL.test1();MapBL.test2();MapBL.test3();MapBL.test4();MapBL.test5();MapBL.test6();MapBL.test7();}}

Set用法

Set类继承了Conllection类,是一种集合类。
Set的实现类有三个:HashSet()、LinkedHashSet()、TreeSet()

1.不允许重复对象。
2.无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。
3.只允许一个 null 元素。
4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。

HashSet()

1.Set中是不能出现重复数据的。
2.Set中可以出现空数据。
3.Set中的数据是无序的。

LinkedHashSet()

1.Set中是不能出现重复数据的。
2.Set中可以出现空数据。
3.Set中的数据是有序的。

TreeSet()

1.不能写入空数据。
2.写入的数据是有序的。
3.不写入重复数据。

使用场景

keyset()和entryset()区别(推荐使用entrySet())

Map<String, String> map = new HashMap<String, String>();
map.put("01", "zhangsan");
map.put("02", "lisi");
map.put("03", "wangwu");
//先获取map集合的所有键的Set集合,即为map中所有key值的集合
Set<String> keySet = map.keySet();
//有了Set集合,就可以获取其迭代器。
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {  String key = it.next();  //有了键可以通过map集合的get方法获取其对应的值。  String value = map.get(key);  //获得key和value值  System.out.println("key: " + key + "-->value: " + value);
}  Map<String, String> map = new HashMap<String, String>();
map.put("01", "zhangsan");
map.put("02", "lisi");
map.put("03", "wangwu");
通过entrySet()方法将map集合中的映射关系取出(这个关系就是Map.Entry类型)
Set<Map.Entry<String, String>> entrySet = map.entrySet();
//将关系集合entrySet进行迭代,存放到迭代器中
Iterator<Map.Entry<String, String>> it2 = entrySet.iterator();
while (it2.hasNext()) {//获取Map.Entry关系对象meMap.Entry<String, String> me = it2.next();//通过关系对象获取keyString key2 = me.getKey();//通过关系对象获取valueString value2 = me.getValue();System.out.println("key: " + key2 + "-->value: " + value2);
}
虽然使用keyset及entryset来进行遍历能取得相同的结果,但两者的遍历速度是有差别的。
keySet():迭代后只能通过get()取key;再根据key值取value。
entrySet():迭代后可以e.getKey(),e.getValue()取key和value。

getParameterMap和putAll使用

Map readOnlyMap = request.getParameterMap();
Map writeAbleMap = new HashMap();
writeAbleMap.putAll(readOnlyMap);
writeAbleMap.remove()或者put()...
在后续的程序代码中使用writeAbleMap即可
putAll可以合并两个map,只不过如果有相同的key那么用后面的覆盖前面的。

List转Map

List results= null; // R类有no 和 name 属性值
Map<String, String> collect = results.stream ().collect (Collectors.toMap (R::getNo, R::getName));

参考:https://www.cnblogs.com/IvesHe/p/6108933.html

粉丝福利

猿码天地-Java知识学堂脑图 (文件密码:请关注公众号【猿码天地】,回复关键字‘活到老学到老’获取)
猿码天地-Java超神之路脑图 (文件密码:请关注公众号【猿码天地】,回复关键字‘活到老学到老’获取)

福利一:月薪3万Java优秀简历模板

简历是对你过往学习和工作的一个总结,一份好的简历容易给人留下深刻印象,更容易被企业发现,创造更多的就业机会。优秀的简历可以把你推销给优秀的企业,看看别人的优秀简历范文,让自己的简历更加优秀吧。

可以在微信搜索「猿码天地」,关注后回复关键字「简历」即可获取!

福利二:全网最全一线大厂Java笔试面试题

面试题涵盖了Spring核心知识、SpringMVC、SpirngBoot、SpringCloud、JVM、数据库、常用消息组件Kafka、RabbitMQ、分布式、微服务组件Eureka、Ribbon、Config、Feign、Nacos、Zookeeper等、SQL优化、常用服务器Tomcat、Nginx、多线程、高并发等等。

可以在微信搜索「猿码天地」,关注后回复关键字「BAT面试」即可获取!

福利三:1000+本Java开发精华电子书

猿人从事Java开发多年,从最初的小白,一步步通过自己不断的学习、摸索,终于走上了码农这条没有回头的路。学习是无止境的,有时零零散散的学习资料难以将我们的知识成体系的串联起来。为此,为了让大家在学习Java的道路上成系统的学习,少走弯路,猿人为大家整理了1000+本Java开发精华电子书,毕竟现在电子书也是挺贵的,哈哈,希望能给大家带来帮助。

电子书涵盖:Java入门、并发编程、底层、常用框架、性能优化、设计模式、工具、计算机网络、操作系统、数据库、数据结构与算法、大数据、架构设计、Linux知识、面试、扩展、管理、容器化技术、云计算、微服务、领域设计等方方面面,猿人还会给持续更新。

获取方式

第一种:微信搜索「猿码天地」或者扫描下面的二维码,关注后回复关键字「电子书」即可获取!

第二种:Gitee:https://gitee.com/zhangbw666/java-books

希望程序员朋友能认真学习,根据自身需要获取对应的电子书,学习是永无止境的。

你多学一样本事,就少说一句求人的话,现在的努力,是为了以后的不求别人,实力是最强的底气。记住,活着不是靠泪水博得同情,而是靠汗水赢得掌声。
——《写给程序员朋友》

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!相关推荐

  1. Java String,看这篇就够了

    String,是Java中最重要的类.这句肯定的推断不是Java之父詹姆斯·高斯林说的,而是沉默王二说的,因此你不必怀疑它的准确性. 关于字符串,有很多的面试题,但我总觉得理论知识绕来绕去没多大意思. ...

  2. python中tkinter模块窗口操作_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)...

    本篇博文搬到个人博客:[洪卫の博客](https://sunhwee.com)上面去了,想要获得最佳阅读体验,欢迎前往 [https://sunhwee.com](洪卫の博客), 建议用电脑查看教程文 ...

  3. Java分布式锁看这篇就够了,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  4. Java序列化,看这篇就够了!

    一.序列化的含义.意义及使用场景 序列化:将对象写入到IO流中 反序列化:从IO流中恢复对象 意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输 ...

  5. JAVA反射----->看这篇就够了

    目录 反射概述 反射获取类对象 反射获取构造器对象 反射获取成员变量对象 反射获取方法对象 反射的作用-绕过编译阶段为集合添加数据 反射的作用-通用框架的底层原理 反射的作用-----总结 反射概述 ...

  6. java基础复习看这篇就够了

    目录 Java重要特点 Java运行机制及运行过程 什么是JDK,JRE 配置环境变量path Java开发注意事项和细节说明 Java转义字符 注释的重要性 DOS命令了解 相对路径和绝对路径 变量 ...

  7. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)

    一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinter 是什么 三.Tkinter 控件详细介绍 1. T ...

  8. python showinfo 方法_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)

    Tkinter支持16个核心的窗口部件,这个16个核心窗口部件类简要描述如下: Button:一个简单的按钮,用来执行一个命令或别的操作. Canvas:组织图形.这个部件可以用来绘制图表和图,创建图 ...

  9. python视窗编程_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)

    Tkinter支持16个核心的窗口部件,这个16个核心窗口部件类简要描述如下: Button:一个简单的按钮,用来执行一个命令或别的操作. Canvas:组织图形.这个部件可以用来绘制图表和图,创建图 ...

最新文章

  1. 2022-2028年中国煤化工行业市场前景分析预测报告
  2. PHP100精华:PHP打印函数集合
  3. matlab怎么实现拖音,请问M8190A怎么通过Matlab实现多音调
  4. Android开发之ApiCloud模块开发之模块引用第三方库的问题
  5. UTC时间、GMT时间、本地时间、Unix时间戳
  6. Java——集合的概述
  7. 如何解决PIP命令不可用
  8. C语言图形库——EasyX常用函数
  9. 正则表达式去掉文件路径中的特殊字符
  10. 使用自定义端口连接SQL Server 2008的方法
  11. 年轻人正在双11掀起国潮热
  12. 改进后的第二版Retropie树莓派掌机(二)
  13. 禅说派-全图型PPT之图片处理技巧精粹
  14. 论用户体验测试:牛逼的功能千篇一律,好的用户体验万里挑一
  15. 《Thinking in Java》Fourth Edition中文版笔记
  16. CTF-密码学-bacon
  17. python处理excel实例编程_python处理Excel的简单示例
  18. 漫谈云数据中心的前世今生
  19. 我叉,下载个ldc下载半天都搞不定.
  20. 广州市天河区2021-2022学年八年级第一学期期末考试英语试题

热门文章

  1. java logcat_使用 Logcat 写入和查看日志
  2. windows 关闭程序进程命令
  3. Unity插件ProBuilder
  4. connection ftp refused_ftp: connect: Connection refused 解决方法
  5. 思科交换机VLAN,DHCP配置模拟实例
  6. IDM 6.4.1逆向分析笔记
  7. 主备 主从 主主模式
  8. 论文阅读笔记5-An Asynchronous Energy-Efficient CNN Accelerator with Reconfigurable Architecture
  9. Python爬虫(二)正则表达式
  10. 任何时候都要保持清醒的头脑