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

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用法

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第1张图片

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

1.可以允许重复的对象。
2.可以插入多个null元素。
3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。
Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第2张图片

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第3张图片

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

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

Map用法

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第4张图片
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具体方式:
Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第5张图片

在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),这两个基本操作的时间开销为常数。
Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第6张图片

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第7张图片

结果:
{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;

/**
 * 

java-study

*

MapBL

* @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 map = new HashMap<>(); //添加数据 map.put(1,"我爱中国1"); map.put(2,"我爱中国2"); map.put(3,"我爱中国3"); map.put(4,"我爱中国4"); map.put(5,"我爱中国5"); //遍历 Iterator> iterator = map.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry next = iterator.next(); System.out.println(next.getKey()); System.out.println(next.getValue()); } } /** * 迭代器 (KeySet) */ public static void test2(){ //创建Map 对象 Map map = new HashMap<>(); //添加数据 map.put(1,"我爱中国1"); map.put(2,"我爱中国2"); map.put(3,"我爱中国3"); map.put(4,"我爱中国4"); map.put(5,"我爱中国5"); //遍历 Iterator 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 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 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 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 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 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 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用法

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第8张图片

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中的数据是无序的。
Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第9张图片

LinkedHashSet()

1.Set中是不能出现重复数据的。
2.Set中可以出现空数据。
3.Set中的数据是有序的。
Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第10张图片

TreeSet()

1.不能写入空数据。
2.写入的数据是有序的。
3.不写入重复数据。
Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第11张图片

使用场景

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第12张图片

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关系对象me
    Map.Entry<String, String> me = it2.next();
    //通过关系对象获取key
    String key2 = me.getKey();
    //通过关系对象获取value
    String 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 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、多线程、高并发等等。

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第13张图片

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第14张图片

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

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

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

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

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第15张图片

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第16张图片

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第17张图片

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第18张图片

获取方式

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

Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!_第19张图片

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

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

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

你可能感兴趣的:(跟着猿人学Java,面试技巧,工具,java,集合,面试)