IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 学习大数据的第24天——集合一些小细节、异常处理、文件处理(1) -> 正文阅读

[大数据]学习大数据的第24天——集合一些小细节、异常处理、文件处理(1)

学习大数据的第24天——集合一些小细节、异常处理、文件处理(1)

集合总结

Collection 接口 集合顶层接口
–List
元素允许重复,是有序的(存储和取出顺序一致),拥有下标索引的特点
–ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全的,效率高
–Vector
底层数据结构是数组,查询快,增删慢
线程是安全的,效率低 (即使是线程安全的,我们将来不会去使用,因为有更好的去替代)
用Collections中带synchronized方法将不安全的集合转成安全的集合
–LinkedList
底层数据结构是双链表,查询慢,增删快
线程是不安全的,效率高
–Set
元素唯一,无序
–HashSet
底层数据结构是哈希表,哈希表保证元素的唯一性
但是当存储的是自定义对象的时候,要重写hashCode()和equals()方法
–LinkedHashSet
底层数据结构是哈希表和链表,哈希表保证元素的唯一性,链表保证元素的有序(存储和取出顺序一致)
–TreeSet
底层数据结构是红黑树,遍历的时候中序遍历
自然排序 元素的数据类型的类要实现Comparable,重写compareTo()方法
比较器排序
自定义一个类实现Comparator接口,重写compare()方法
匿名内部类的形式进行构造方法传参,重写compare()方法

Map 接口
元素是由一个一个键值对组成,键不允许重复,值允许重复
–HashMap
底层数据结构是哈希表,保证了元素的唯一(指的是键的唯一性),元素是无序
当键是自定义类型的时候,要想保证唯一性,就必须重写hashCode()方法和equals()方法
–LinkedHashMap
底层数据结构是哈希表和链表
哈希表保证的是元素的唯一性
链表保证的是元素有序(指的是存储和取出的顺序一致)
–TreeMap
底层数据结构是红黑树
排序针对于键来说的
自然排序
比较器排序
自定义一个类实现Comparator接口,重写compare()方法
匿名内部类的形式进行构造方法传参,重写compare()方法

将来开发的时候用谁呢?
1、元素的组成是单个还是成对,如果是单个使用Collection下面的集合,如果是成对出现的,使用Map下面的集合
2、元素允许重复吗?
允许:List
不允许:Set
3、元素需要排序吗?
需要:TreeSet或者TreeMap
不需要:ArrayList等
4、将来查找的功能多吗?
多,用底层是数组的集合
5、将来增删操作多吗?
多,用底层是链表的集合

如果你什么都不知道,用ArrayList。推荐具体情况具体选择。

注意:
增强for循环只能作用于数组和Collection集合,不适用于Map集合

ConcurrentModificationException(并发)
现象:当不允许这样的修改的时候,java就检测到该对象出现了并发修改异常。
原因::在迭代器遍历的时候,不能通过集合去修改元素
解决方案:1、迭代器遍历,迭代器修改
2、集合遍历,集合修改

LinkedList
请用LinkedList模拟栈数据结构的集合,并测试‘

(1)集合和数组的比较

? 数组可以存储同一种基本数据类型和引用数据类型,长度不可变,有下标索引,查询方便。

? 集合存储的只能是引用数据类型,但是引用数据类型可以不同,长度可变。

(2) 简述List、Set、Collection、Map的区别和联系。

? 四者都是接口,都不可以直接实例化

? Collection和Map是并列关系

? List和Set则是Collection的子类

? List允许有重复的元素,且有序

? Set不允许有重复的元素,且无序

?

(3)ArrayList和LinkedList的区别和联系。

? 都是List的子类,且都具备List的特性,有序且允许重复

? ArrayList的底层数据结构为数组,查询快增删慢,线程不安全

? LiskedList的底层数据结构为链表。查询慢,增删快,线程不安全

(4)HashSet采用了哈希表作为存储结构,请说明哈希表的特点和实现原理。

? 提示:结合Object类的hashCode()和equals()说明其原理

? HashSet采用哈希表进行存储,通过hascode()和equals()方法进行判断是否重复,如果想使用,该类得重写hascode()和equals()方法。

(5)Vector和ArrayList的区别和联系。

? 都实现了List接口的方法

? ArrayList底层数据结构是数组,查询快,增删慢,线程不安全,效率高

? Vector底层数据结构是数组,查询快,增删慢,线程安全,效率低

(6)请你简述HashMap和Hashtable的区别?

HashMap:

? 底层数据结构是哈希表,保证了元素的唯一(指的是键的唯一性),元素是无序
? 当键是自定义类型的时候,要想保证唯一性,就必须重写hashCode()方法和equals()方法

Hashtable:

? 底层数据结构是哈希表、链表,线程安全,效率低,支持同步

异常处理

Java中的异常分为三种:

? (1)严重的问题:Error,我们不处理,这样的问题一般都是很严重的,比如内存溢出(OOM)

? (2)Exception:

? 编译时期的异常:除了RuntimeException都是编译时期异常,必须要处理,如果不处理,程序编译会报错;

? 运行时期异常:RuntimeException以外的异常叫做编译时期异常,编译时期异常,一定要做处理,如果不做处理,编译无法通过,不能运行。

处理异常的方案:
1、try…catch…finally
处理一个异常
处理多个异常(JDK1.7的新特性)
2、throws
在方法上抛出异常的类名,可以一次性抛出多个异常,异常之间用逗号分割,表示一种可能性,可能会发生异常
将异常抛给调用者处理,调用者推荐使用try…catch处理,如果调用者继续抛出,一旦发生错误,后续的代码不会执行。

throw:在方法的内部抛出,表示一定会发生某种异常,
throw后面跟的是异常的对象,只能跟一个。一般情况下,throw用在自定义异常中比较多。

final,finally,finalize的区别:
final: 最终的意思,可以修饰类,成员变量,成员方法
修饰类:类不能被继承
修饰成员变量:变量变常量
修饰成员方法:方法不能被重写

? finally: 是属于处理异常try…catch…finally的一部分,一般是用于释放资源,正常情况下,都会执行,除非在执行finally之前,程序停止。
? finalize: 是Object类中一个方法,是用于垃圾回收的,堆内存中的空间没有栈的引用指向它,但是什么时候回收我们不确定。

文件处理以及递归

File:是java对于文件和文件夹抽象表现形式
构造方法:
public File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。 如果给定的字符串是空字符串,则结果是空的抽象路径名。
public File(String parent,String child)
从父路径名字符串和子路径名字符串创建新的File实例。
public File(File parent,String child)
从父抽象路径名和子路径名字符串创建新的File实例。

File的功能:
创建功能:
public boolean createNewFile() 创建一个文件
public boolean mkdir() 创建一个文件夹
public boolean mkdirs() 创建多级文件夹

    注意:
        1、要搞清楚你要创建文件还是文件夹
        2、骑白马的不一定王子,还有可能是唐僧,因为后缀名也是文件名字一部分,也可能是一个文件夹
删除功能:
    public boolean delete()
    注意:
        要想删除一个文件夹,这个文件里面必须是空的
重命名功能
    public boolean renameTo(File dest)
判断功能
    public boolean isDirectory()
    public boolean isFile()
    public boolean exists()
    public boolean canRead()
    public boolean canWrite()
    public boolean isHidden()
基本获取功能
    public String getAbsolutePath()
    public String getPath()
    public String getName()
    public long length()
    public long lastModified()
高级获取功能
    public String[] list()
    public File[] listFiles()
文件名称过滤器的实现思想及代码
    public String[] list(FilenameFilter filter)
    public File[] listFiles(FilenameFilter filter)

递归:方法定义中调用方法本身的现象
注意:
1、搞清楚递归和嵌套的区别:递归是方法定义的时候出现,嵌套是方法使用的时候出现的
2、递归要有出口条件(结束条件),如果没有,就成了死递归

IO流:(这里的输入输出,以java程序为参照物)
按照流向分类:
输入流
输出流
按照数据类型分类:
字节流
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream FileOutputStream
字符流
字符输入流 读取数据 Reader
字符输出流 写出数据 Writer
什么情况下,用字节流还是字符流,如果你操作的是记事本打开能看懂的数据,就用字符流,如果看不懂就用字节流
如果你不知道用什么流,就用字节流,字符流是建立在字节流的基础上出现的。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 01:14:20  更:2022-02-19 01:16:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:45:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码