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

实现方式: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关系对象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<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

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

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

  • 108
    点赞
  • 704
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿码天地

相互学习,谢谢您的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值