第12章:集合框架

第12章:随堂复习与企业真题(集合框架)


一、随堂复习

1. 数组存储数据方面的特点和弊端

   数组存储多个数据方面的特点:> 数组一旦初始化,其长度就是确定的。> 数组中的多个元素是依次紧密排列的,有序的,可重复的> (优点) 数组一旦初始化完成,其元素的类型就是确定的。不是此类型的元素,就不能添加到此数组中。int[] arr = new int[10];arr[0] = 1;arr[1] = "AA";//编译报错Object[] arr1 = new Object[10];arr1[0] = new String();arr1[1] = new Date();> (优点)元素的类型既可以是基本数据类型,也可以是引用数据类型。数组存储多个数据方面的弊端:> 数组一旦初始化,其长度就不可变了。> 数组中存储数据特点的单一性。对于无序的、不可重复的场景的多个数据就无能为力了。> 数组中可用的方法、属性都极少。具体的需求,都需要自己来组织相关的代码逻辑。> 针对于数组中元素的删除、插入操作,性能较差。

2. 集合框架概述

java.util.Collection:存储一个一个的数据|-----子接口:List:存储有序的、可重复的数据 ("动态"数组)|---- ArrayList(主要实现类)、LinkedList、Vector|-----子接口:Set:存储无序的、不可重复的数据(高中学习的集合)|---- HashSet(主要实现类)、LinkedHashSet、TreeSetjava.util.Map:存储一对一对的数据(key-value键值对,(x1,y1)、(x2,y2) --> y=f(x),类似于高中的函数)|---- HashMap(主要实现类)、LinkedHashMap、TreeMap、Hashtable、Properties
学习的程度把握:
层次1:针对于具体特点的多个数据,知道选择相应的适合的接口的主要实现类,会实例化,会调用常用的方法。
层次2:区分接口中不同的实现类的区别。
*****************
层次3:① 针对于常用的实现类,需要熟悉底层的源码 ② 熟悉常见的数据结构 (第14章讲)

3. Collection的常用方法

3.1 常用方法
add(Object obj)
addAll(Collection coll)
clear()
isEmpty()
size()
contains(Object obj)
containsAll(Collection coll)
retainAll(Collection coll)
remove(Object obj)
removeAll(Collection coll)
hashCode()
equals()
toArray()
**************
iterator() ---> 引出了迭代器接口
向Collection中添加元素的要求:
> 要求元素所属的类一定要重写equals()!
集合与数组的相互转换:
集合 ---> 数组:toArray()
数组 ---> 集合:调用Arrays的静态方法asList(Object ... objs),返回一个List
3.2 迭代器接口
  • 设计模式的一种
  • 迭代器不负责数据的存储;负责对集合类的遍历
1. 如何获取迭代器(Iterator)对象?
Iterator iterator = coll.iterator();2. 如何实现遍历(代码实现)
while(iterator.hasNext()){System.out.println(iterator.next()); //next():①指针下移 ② 将下移以后集合位置上的元素返回
}

4. Collection的子接口:List

  • 常用方法
小结:增add(Object obj)addAll(Collection coll)remove(Object obj)remove(int index)set(int index, Object ele)get(int index)add(int index, Object ele)addAll(int index, Collection eles)长度size()遍历iterator() :使用迭代器进行遍历增强for循环一般的for循环
List及其实现类特点
java.util.Collection:存储一个一个的数据|-----子接口:List:存储有序的、可重复的数据 ("动态"数组)|---- ArrayList:List的主要实现类;线程不安全的、效率高;底层使用Object[]数组存储在添加数据、查找数据时,效率较高;在插入、删除数据时,效率较低|---- LinkedList:底层使用双向链表的方式进行存储;在对集合中的数据进行频繁的删除、插入操作时,建议							使用此类在插入、删除数据时,效率较高;在添加数据、查找数据时,效率较低;|---- Vector:List的古老实现类;线程安全的、效率低;底层使用Object[]数组存储[面试题] ArrayList、Vector的区别?  ArrayList、LinkedList的区别?

5. Collection的子接口:Set

  • Set中的常用的方法都是Collection中声明的方法,没有新增的方法
  • 常见的实现类的对比
java.util.Collection:存储一个一个的数据|-----子接口:Set:存储无序的、不可重复的数据(高中学习的集合)|---- HashSet:主要实现类;底层使用的是HashMap,即使用数组+单向链表+红黑树结构进行存储。(jdk8中)|---- LinkedHashSet:是HashSet的子类;在现有的数组+单向链表+红黑树结构的基础上,又添加了一组双向链表,用于记录添加元素的先后顺序。即:我们可以按照添加元素的顺									序实现遍历。便于频繁的查询操作。|---- TreeSet:底层使用红黑树存储。可以按照添加的元素的指定的属性的大小顺序进行遍历。
  • 难点: Set中无序性、不可重复性的理解(以HashSet及其子类为例说明)
>无序性: != 随机性。添加元素的顺序和遍历元素的顺序不一致,是不是就是无序性呢? No!到底什么是无序性?与添加的元素的位置有关,不像ArrayList一样是依次紧密排列的。这里是根据添加的元素的哈希值,计算的其在数组中的存储位置。此位置不是依次排列的,表现为无序性。>不可重复性:添加到Set中的元素是不能相同的。比较的标准,需要判断hashCode()得到的哈希值以及equals()得到的boolean型的结果。哈希值相同且equals()返回true,则认为元素是相同的。
添加到HashSet/LinkedHashSet中元素的要求:
>要求元素所在的类要重写两个方法:equals() 和 hashCode()。
>同时,要求equals() 和 hashCode()要保持一致性!我们只需要在IDEA中自动生成两个方法的重写即可,即能保证两个方法的一致性。
  • 了解TreeSet的使用

6. Map接口

  • 常用的方法
增:put(Object key,Object value)putAll(Map m)
删:Object remove(Object key)
改:put(Object key,Object value)putAll(Map m)
查:Object get(Object key)
长度:size()
遍历:遍历key集:Set keySet()遍历value集:Collection values()遍历entry集:Set entrySet()
  • 常用的实现类
java.util.Map:存储一对一对的数据(key-value键值对,(x1,y1)、(x2,y2) --> y=f(x),类似于高中的函数)|---- HashMap:主要实现类;线程不安全的,效率高;可以添加null的key和value值;底层使用数组+单向链表+红黑树结构存储(jdk8)|---- LinkedHashMap:是HashMap的子类;在HashMap使用的数据结构的基础上,增加了一对双向链表,用于记录添加的元素的先后顺序,进而我们在遍历元素时,就可以按照添加的顺序显示。开发中,对于频繁的遍历操作,建议使用此类。|---- TreeMap:底层使用红黑树存储;可以按照添加的key-value中的key元素的指定的属性的大小顺序进行遍历。需要考虑使用①自然排序 ②定制排序。|---- Hashtable:古老实现类;线程安全的,效率低;不可以添加null的key或value值;底层使用数组+单向链表结构存储(jdk8)|---- Properties:其key和value都是String类型。常用来处理属性文件。[面试题] 区别HashMap和Hashtable、区别HashMap和LinkedHashMap、HashMap的底层实现(① new HashMap() ② put(key,value))
HashMap中元素的特点:
> HashMap中的所有的key彼此之间是不可重复的、无序的。所有的key就构成一个Set集合。--->key所在的类要重写hashCode()和equals()
> HashMap中的所有的value彼此之间是可重复的、无序的。所有的value就构成一个Collection集合。--->value所在的类要重写equals()
> HashMap中的一个key-value,就构成了一个entry。
> HashMap中的所有的entry彼此之间是不可重复的、无序的。所有的entry就构成了一个Set集合。
  • (了解)TreeMap的使用

  • (重要)Properties的使用

    public class PropertiesTest {@Testpublic void test() throws IOException { //注意:因为设计到流的操作,为了确保流能关闭,建议使用try-catch-finally//方式1:数据和代码耦合度高;如果修改的话,需要重写的编译代码、打包发布,繁琐//数据
    //        String name = "Tom";
    //        String password = "abc123";//代码:用于操作name,password//...//方式2:将数据封装到具体的配置文件中,在程序中读取配置文件中的信息。实现了//数据和代码的解耦;由于我们没有修改代码,就省去了重新编译和打包的过程。File file = new File("info.properties"); //注意,要提前创建好
    //        System.out.println(file.getAbsolutePath());FileInputStream fis = new FileInputStream(file);Properties pros = new Properties();pros.load(fis); //加载流中的文件中的数据//读取数据String name = pros.getProperty("name");String pwd = pros.getProperty("password");System.out.println(name + ":" + pwd);fis.close();}}
    

7. Collections工具类的使用

区分Collection 和 Collections
Collection:集合框架中的用于存储一个一个元素的接口,又分为List和Set等子接口。
Collections:用于操作集合框架的一个工具类。此时的集合框架包括:Set、List、Map
  • 熟悉常用的Collections中的方法即可。

二、企业真题

2.1 集合概述

1. List,Set,Map是否继承自collection接口?(北京中*译咨询、思*贸易)

Map不是。

2. 说说List,Set,Map三者的区别(民*银行)
类似问题:
> Map与Set、List的区别(纬*)

3. 写出list、map、set接口的实现类,并说出其特点(华**为)
类似问题:
> 集合有哪些, 各自有哪些特点, 各自的API有哪些?(湖**利软件)
> List Map Set三个接口在存储元素时个有什么特点(*软)

4. 常见集合类的区别和适用场景(饿**)

5. 集合的父类是谁?哪些安全的?(北京中**信)

略。 不安全:ArrayList、HashMap、HashSet ; 安全:Vector、Hashtable

6. 集合说一下哪些是线程不安全的(*科软)

7. 遍历集合的方式有哪些?(恒*电子)
  • 迭代器Iterator用来遍历Collection,不能用来遍历Map!

  • 增强for

  • 一般的for:可以用来遍历List

2.2 List接口

1. List下面有哪些实现(软**力)

2. ArrayList与LinkedList区别?(O**O、滴*、汇*天下、拓*软件、博纳**软件、上海*进天下,北京永生**信息、*联、在*途游)
类似问题:
> ArrayList跟LinkedList的区别详细说出?(阿*校招、*东)

略。 补充上第14章中的源码(底层的数据结构)

3. ArrayList与Vector区别呢?为什么要用ArrayList取代Vector呢?(湖**利软件)

Vector效率低。

4. Java.util.ArrayList常用的方法有哪些?(华**为)

5. Arraylist 是有序还是无序?为什么?(蜜*信息)

有序;底层使用数组:Object[]

2.3 Set接口

1. Set集合有哪些实现类,分别有什么特点?(拓*软件)
类似问题:
> Set的实现类有哪些?(博*科技)

2. List集合和Set集合的区别?(亚*科技、*海*翼科技,*华电*系统,达*贷)

3. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?(鸿*网络)
类似问题:
> 1.HashSet如何检查重复(创*科技)
> 3.Set使用哪个区分不能重复的元素的?(北京创**荣信息)

hashCode() 、 equals()

4. TreeSet两种排序方式在使用的时候怎么起作用?(拓*软件)

在添加新的元素时,需要调用compareTo() 或 compare()

5. TreeSet的数据结构(*米)

红黑树

2.4 Map接口

1. 说一下Java的集合Map有哪些Map?(奥*医药)

2. final怎么用,修饰Map可以继续添加数据吗?(*深蓝)

final HashMap map = new HashMap();

map.put(“AA”,123);

可以!

3. Set和Map的比较(亚*科技)

HashSet底层就是HashMap

LinkedHashSet底层就是LinkedHashMap

TreeSet底层就是TreeMap

4. HashMap说一下,线程安全吗?(*米)
类似问题:
> HashMap为什么线程不安全?(微*银行)
> HashMap是线程安全的吗?为什么不安全?(*团、*东、顺*)

不安全

5. HashMap和Hashbable的区别?(银*数据、阿**巴芝麻信用、*众银行、爱*信、杭州*智公司)
类似问题:
> HashMap 和 HashTable 有什么区别,以及如何使用,以及他的一些方法?(阿*校招、*东、*度校招、顺*)

6. Hashtable是怎么实现的,为什么线程安全?(迪*创新)

数组+单向链表;底层方法使用synchronized修饰

7. HashMap和LinkedHashMap的区别(北京*晨阳光)

略。

8. HashMap 和 TreeMap 的区别(度,太极*、*线途游、阿*校招)

底层的数据结构截然不同。

9. HashMap里面实际装的是什么?(惠*)

JDK7:HashMap内部声明了Entry,实现了Map中的Entry接口。(key,value作为Entry的两个属性出现)

JDK8:HashMap内部声明了Node,实现了Map中的Entry接口。(key,value作为Node的两个属性出现)

10. HashMap的key存储在哪里?和value存储在一起吗?那么value存储在哪里?说具体点?(湖**利软件、天*伟业)

数组+链表+红黑树。 key、value作为Node的属性出现

11. 自定义类型可以作为Key么?(阿*)

可以! 要重写hashCode() 和equals()

Collections

1. 集合类的工具类是谁?用过工具类哪些方法?(顺*)

Collections。略

2. Collection 和 Collections的区别?(平*金服、*软)

3. ArrayList 如何实现排序(阿*)

Collections.sort(list) 或 Collections.sort(list,comparator)

4. HashMap是否线程安全,怎样解决HashMap的线程不安全(中*卫星)
类似问题:
> 怎么实现HashMap线程安全?(*团、*东、顺*)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05-5.4.3 树和森林的遍历

👋 Hi, I’m Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

Shopee虾皮API:获取商家店铺商品列表

一、平台介绍 Shopee,作为东南亚及中国台湾地区领先的电商平台,为卖家提供了一个便捷、高效的销售渠道。作为卖家,能够将自己的商品展示在Shopee平台上,并通过平台的流量和工具,将商品销售给更多的潜在买家。 为了帮…

系统架构设计师 - 操作系统(2)

操作系统 操作系统(5-6分)文件管理绝对路径与相对路径 ★索引文件 ★★★位示图 ★ 存储管理段页式存储 ★★★页式存储段式存储段页式存储(了解) 页面置换算法 ★ 微内核操作系统嵌入式操作系统 ★★★ 大家好呀!我是…

数据库课设-中小企业工资管理系统

一、效果展示 二、后端代码 import string import random from flask import Flask, render_template, request, jsonify, redirect, session import pymysql from flask_cors import CORS import time import schedule from datetime import datetime import threading from …

HK1-BOX X3刷UBUNTU 24.04,并开启WIFI

端午刚好有点时间,顺便把改完散热的HK1-BOX刷了个最新OC版的UBUNTU 24,这里记录下操作的步骤: 准备材料 HK1-BOX S905X3:注意X4的不行固件没匹配的。建议先改完散热,不然作为7X24小时的机器长时间高温还是很伤硬件的…

Web前端项目-拼图游戏【附源码】

拼图游戏 拼图游戏是一种经典的益智游戏,通过HTML、CSS和JavaScript等前端技术的综合运用来实现;拼图游戏可以锻炼玩家的观察能力、空间认知能力和逻辑思维能力。游戏开始时,一张图片会被切割成多个小块,并以随机顺序排列在游戏区…

CMOS图像传感器——列噪声(CFPN)去除

目前CMOS 图像传感器系统中列共用结构应用最为广泛,在该结构中,虽然像素曝光均匀,但是由于列输出系统处理属性的变动,对于不同列,像素的输出是不均匀的。因此,基于列的CMOS 图像传感器表现出垂直条纹固定模式噪声(CFPN),从而降低了图像的质量。由于人眼 的关系,CFPN …

「布道师系列文章」宝兰德徐清康解析 Kafka 和 AutoMQ 的监控

作者|北京宝兰德公司解决方案总监徐清康 01 前言 当我们使用一个软件的时候,经常都会问这个软件怎么监控、监控他的哪些指标?Kafka 的监控挺长时间都是一个老大难的问题,社区在监控方面一直没有投入太大的精力。如果要实现一…

kotlin 中的字符串

一、字符类访问 1、字符串的访问跟js一样,可以使用索引来访问或者直接循环。 fun main() {val a: String "2024"// 方式一:for (item in a) {println(item) // 输出每一个字符}// 方式二:println("${a[0]}, ${a[1]}, ${a[2…

Leetcode 415. 字符串相加-大数相加

415. 字符串相加 - 力扣(LeetCode) class Solution {/**2024.6.17大数相加,从2个字符串最后一位开始加,如果没遍历到下标0,就一直遍历,减去‘a’得到数值,循环结束条件就是 字符串1遍历完了&am…

IAP固件升级进阶(Qt上位机)

前言 时隔近一年,再次接触IAP固件升级,这次修改了以前的一些bug,同时新增一些实用性的功能。 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com。 上位机界面 视频演示 当Up对iap固件升级的机制有了更深的理解后…

【C++】类和对象的引入

文章目录 前言一、类的定义二、类的访问控制与封装三、类的作用域四、类的实例化五、类的存储方式及大小计算六、隐藏的this指针 前言 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的&…

Git与SSH

Git Git是一种分布式版本控制系统,最初由Linus Torvalds为管理Linux内核开发而设计并开发。Git可以帮助开发团队协作管理代码,跟踪代码变更历史,并在需要时回溯到特定版本。 分布式版本控制:每个开发者都可以拥有完整的代码仓库…

go使用ssh执行脚本文件

目的:在go语言中ssh连接服务器,上传shell文件并执行 代码: import "golang.org/x/crypto/ssh" func InitHardware(username string, password string, ip string, ipv6 string, port int, arch string, ipStack string, classTy…

算法题解记录29+++全排列(百日筑基)

一、题目描述 题目难度:中等 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示…

华为网络设备高频命令

1.system-view • 用法:在用户视图下执行 system-view 命令。 • 作用:进入系统视图,以便进行配置性的操作。 • 场景:当需要对设备进行系统级的配置时。 2.sysname XXX • 用法:执行 [Huawei]sysname XXX 命令。…

iCopy for Mac 剪切板 粘贴工具 历史记录 安装(保姆级教程,新手小白轻松上手)

Mac分享吧 文章目录 效果可留存文本、图片、文件等复制历史记录也可根据关键字进行历史记录检索点击一下,可复制双击两下,复制内容,并将信息粘贴至鼠标指针处 一、准备工作二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹…

Audio2Face相关建模BS绑定对应表

文章说明 相信大家都可以在网上看到52点位的ARKit绑定对照表,但英伟达旗下Audio2Face这款软件出来的数据应该如何映射到BS上边,都比较迷茫。 所以对于Unity方面的46点位在建模时的对照图,我这边总结了一下。发出来供大家参考,如果…

简易版 | 代码生成器(包含插件)

一、代码生成器 先导入依赖 <!-- Mybatis-Plus --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version> </dependency><!-- 代码生成器 --…

Cisco Packet Tracer实验(五)不同vlan间的通信简单配置

1&#xff0e;单臂路由(图) 环境&#xff1a;一台路由器&#xff0c;一台二层交换机&#xff0c;两台pc机 单臂路由&#xff08;Single Arm Routing&#xff09;是指在网络架构中&#xff0c;只有一个物理接口&#xff08;单臂&#xff09;连接到路由器三层交换机&#xff0c;而…