【集合类学习反思】 10.14

1.list是有序、可重复的(有序是因为底层实现是数组,有下标。可重复是满足equals();返回值为true)。set是无序的不可重复的。collection里面包含的方法在set和list中都有。

2.arrayList索引相关的顺序方法:因为他底层是数组实现的,所以可以进行索引。实际上链表实现的也可以进行索引,只是效率比较低下。
ArrayList里面提供了set、add、get等方法用以对集合里面的元素进行查找等操作。这个不用刻意的记忆,只需要知道集合里面提供了很多操作方法可以对集合进行操作就好了。如果以后遇到需要用集合操作的,查询集合里面存在的方法。用到其它的类也是,自己脑袋里面有想实现的方法,先看类里面有没有,有相似的再进行重写。
set();是直接替换指定位置的元素,add是指定位置插入一个元素,其他元素往后移。(为什么可以实现在数组中插入一个元素,效率不会很低吗?如果选择插入或者删除使用链表会更好)

3.List中的常用实现类有ArrayList(线程不安全,使用较多)、Vector(线程安全)、LinkedList。底层实现分别是数组、数组、链表。

4.思考:左移右移是个啥?可以提高效率,但是是怎么做的呢?
位运算右移一位相当于翻倍,左移一位相当于减半。是对相应的数值转换成二进制然后再进行左右以为运算。>>右移,<<左移。
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方

5.ArrayList中数组的长度是没有限制的,本质上是有长度限制的,只是每次存储的时候都会进行检测,如果超出长度则扩容一半,把原数组拷贝到新数组上面去实现扩容。删除、插入的原理都是数组的拷贝,牵一发动全身,故效率会比较低下。

6.为什么要重写toString方法呢?
toString()是Object的方法,Object是所有类的父类,因此所有类中都有toString方法,该方法原先的返回值是类名+@+内存地址(哈希值)【getClass().getName() + “@” +Integer.toHexString(hashCode());】,如果期望得到一个类的值就需对toString()进行重写,如果某类没有重写toString()方法,这时调用toString()将得到(类名+地址名)这样的字符串。
IDEA中也有快捷键对toString()、equals()等方法进行重写,笔记本上Fn+Alt+Insert。
注意:打印一个对象,可以直接System.out.println§;其实println方法内部会自动调用p 的 toString() 方法。

7.删除有时等同于覆盖。数组拷贝的时候新数组覆盖原数组相当于删除;数组添加元素的时候后面的一串元素覆盖待删除的一个或者多个相当于删除;链表中删除元素也是同样的道理。

8.数组本身有界但是要想实现无限对的数组,进行扩容操作就可以。

9.set、get方法有什么作用呢?
因为设置的变量或者方法可能是私有的,不能进行直接访问,需要使用set、get方法进行访问变量或者方法。私有成员函数或者变量是不是可以使用反射机制进行访问嗯?反射机制又是什么呢?

10.为什么要设置泛型?
通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。这能够显著提高性能并得到更高质量的代码(高性能),因为您可以重用数据处理算法,而无须复制类型特定的代码(可重用)。

11.运行时异常有哪些?运行时异常是交给用户自己处理的吗?
数组越界、被除数为0、空指针异常等等。当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

常见RuntimeException:
ArrayStoreException                试图将错误类型的对象存储到一个对象数组时抛出的异常
ClassCastException                试图将对象强制转换为不是实例的子类时,抛出该异常
IllegalArgumentException         抛出的异常表明向方法传递了一个不合法或不正确的参数
IndexOutOfBoundsException   指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出
NoSuchElementException       表明枚举中没有更多的元素
NullPointerException                当应用程序试图在需要对象的地方使用 null 时,抛出该异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值