Java 知识回顾

collection 系列集合,map 系列集合主要用来盛装其他对象。
而Iterator 则主要用来遍历collection集合中的元素。
Iterator对象也被称为迭代器。

Iterator 接口定义了三个方法
boolean hasNext() 如果被迭代的集合元素还没有被遍历,则返回true.
Object next() 返回集合的写一个元素
void remove() 删除集合里上一次next方法返回的元素

当使用Iterator 对集合元素进行迭代时,Iterator并不是把
集合元素本身传给了迭代变量,而是把集合元素的值传递给迭代变量,所以修改迭代
变量的值对集合元素本身没有任何影响。

当使用Iterator 迭代访问Collection 集合元素时,collection集合的元素不能被改变,
只有通过Iterator的remove方法删除上一次next方法返回的集合元素才可以。

Set 集合中不允许相同元素。判断两个对象相同不是使用== 运算符,而是根据equal方法。

HashSet 是Set接口的典型实现,大多数时候使用Set集合就是使用这个实现类。
HashSet按照Hash算法来存储集合中的元素,因此具有较好的存取和查找性能。

HashSet 具有以下特点:
不能保证元素的排列顺序,顺序有可能发生变化。
HashSet 不是同步的,假设有两个或者以上的线程同时修改HashSet集合时,需要通过代码
保证其同步。
集合元素可以是null.

HashSet集合判断两个元素的相同的标准是两个对象通过equals() 方法比较相等,并且两个对象的
hashCode() 方法返回值也相等。

当把一个对象放入HashSet中时,如果需要重写该对象对应类的Equal()方法,则也应该重写其
hashCode()方法。规则是如果两个对象通过equals()方法比较返回true.
那么两个对象的hashCode()值也应该相同。

HashSet 有子类LinkedHashSet, linkedHashSet集合也是根据元素的hashCode值来决定元素
的存储未知,但它同时使用链表来维护元素的次序,这样使得元素看起来是以插入的顺序保存的。
也就是说当遍历linkedHashSet集合中的元素时,LinkedHashSet将会按照元素的添加顺序来访问集合里的元素

TreeSet 是SortedSet 接口的实现类,TreeSet可以确保集合元素处于排序状态。
与HashSet集合相比,TreeSet还提供一些几个额外的方法:
1 Comparator comparator() 如果TreeSet采用定制排序,则该方法返回定制排序使用的Comparator,
如果TreeSet采用自然排序,则返回null.
2 Object first() 返回集合的第一个元素
3 Object last() 返回集合的最后一个元素
4 Object lower(Object e)返回集合中位于制定元素之前的元素(即小于指定元素的最大元素,
参考元素不需要是TreeSet集合里的元素)
5 Object higher(Object e)返回集合中位于制定元素之后的元素(即大于指定元素的最大元素,
参考元素不需要是TreeSet集合里的元素)
6 SortedSet subSet(fromElement,toElement) 返回此Set的子集合,范围从fromElement(包含)到toElement(不包含)
7 SortedSet headSet(toElement )返回此Set的子集,有小于toElement的元素组成。
8 SortedSet tailSet(fromElement) 返回此Set的子集,由大于或等于fromElement的元素组成。

TreeSet并不是根据元素的插入顺序进行排序的,而是根据元素实际值的大小进行排序的。
TreeSet采用红黑树的数据接口存储集合元素。
支持两中排序方法:自然排序和定制排序

如果试图将一个对象添加到TreeSet时,则该对象的类必须实现Comparable接口。
TreeSet中添加的应该是同一个类的对象,除此之外,如果向TreeSet中添加的对象是自定义类的对象时,
可以想TreeSet添加多种类型的对象。前提是自定义的类实现了Comparable接口。实现该接口时实现的compareTo方法没有进行强制类型转换。
担当试图去除TreeSet里的集合数据时,不同类型的元素会发生ClassCastException

TreeSet判断两个对象的唯一标准是:两个对象通过compareyTo()方法比较是否返回0.
如果返回0,则认为相等。否则就认为不想等。

List 判断两个对象是否相等只要通过equals()方法返回true 即可

list 还额外提供了listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。
ListIterator在Iterator 接口基础上增加了如下方法:
1 boolean hasPrevious() 返回该迭代器关联的集合是否还忧伤一个元素
2 Object previous() 返回该迭代器的上一个元素
3 void add() 在制定未知插入一个元素

ArrayList和Vector 作为List类的两个典型实现
ArrayList和Vector都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的,允许在分配的Object 数组
数组大小默认是10

一般情况,无需关心其大小,如果添加大量元素时,可以使用ensureCapacity()方法一次性增加initialCapacity
,从而减少重新分配的次数,从而提高性能
另外有ensureCapacity 和trimToSize 调整Object 数组的大小

ArrayList是线程不安全的,Vector 是线程不安全的,故性能较低。

Queue 模拟队列,FIFO的容器
Queue接口定义了如下几个方法:
1 void add 将指定元素加入到此队列的尾部
2 Object element 获取队列头部的元素,但不删除该元素
3 boolean offer 将指定元素加入到此队列的尾部
4 Object peek() 获取队列头部的元素,但不删除该元素
5 Object poll() 获取队列头部的元素,并删除该元素
6 Object remove() 获取队列头部的元素,并删除该元素

PriorityQueue 是队列实现类。但保存元素的顺序是按照队列元素的大小重新排序,
而不是按照加入队列的顺序。
不允许插入null, 两种排序方式:自然排序和定制排序

Deque 接口是Queue接口的子接口,代表一个双端队列
可以当作栈来使用
若程序中需要使用“栈” 这种数据接口,推荐使用ArrayDeque或LinkedLisyt

LinkedList 类是List接口的实现类,可以作为双端队列和栈来使用
内部以链表的形式来保存集合中的元素

Map 中的key 不允许重复,key和value 存在单向一一对应关系

Map 中包含一个keySet()方法,返回所有key组成的Set集合

Map中包含一个内部类 Entry,该类封装一个key-value对,包含一下三个方法
Object getKey() 返回该Entry包含的key值
Object getValue() 返回该Entry包含的value值
Object getValue(V value) 设置该Entry里包含的Value 值,并返回
新设置的value值

HashMap 和Hashtable
Hashtable,出现较早,尽量少用 是线程安全的,不允许nulll值作为key或value
HashMap 线程不安全,允许null 作为key或这value

Map 中用作key的对象必须实现hashCode()和equals()方法。

Hashtable和HashMap 判断两个key相等的标准是两个key通过equals()方法比较返回true,
两个key的hashCode值也相等
判断两个value 相等的标准,主要两个对象通过equals比较返回truej即可

LinkedHashMap 也使用双向链表来维护key-value对的插入次序

WeakHashMap 中的key只保留对实际对象的弱引用。意味着如果key所引用的对象可能被垃圾回收
当垃圾回收key所对应的实际对象后,WeakHashMap 会自动删除该key对应的key-value 对。

HashMap和Hashtable 效率大致相同,hashMap 线程不安全。
treeMap 插入删除时较慢,使用红黑树来管理键值对。但其中的键值对总是处于有序状态。

Collections 操作Set list 和Map集合的工具类
提供排序,查找,替换,同步控制等操作
也可用来设置不可变集合

HashMap 可以插入null 作为key或者value 不是线程安全的
Hashtable 不允许null 作为key或者value 是线程安全的

以stream结尾的是字节流
以writer或reader 结尾的是字符流

        类内部  本包  子类    外部包

public y Y Y Y
protected Y Y Y N
default Y Y N N
private Y N N N

defalut 拒绝一切包外访问 protected 接受包外的子类访问

ArrayList 底层实现是数组 查询快 增删慢
LinkedList 底层是链表 查询满 增删快

异或 ^ 相同为false,不同为true
&& 短路与 || (短路)或

负数用补码表示 最高位(最左边)为符号位 1 表示负数 0 表示正数

函数重载 函数名一样,但参数(个数,类型,顺序)不一样
重写是子类重写父类的相同参数签名的方法

只有一个函数(无重载),只要能进行类型转换,就能调用该函数
编译器会自动进行类型转换,并寻找最匹配的函数

栈底的内存地址是最高的

创建对象时,实例变量都有默认值
修改默认值可以通过初始化块或构造方法

子类对象可以赋值给父类引用变量 这叫多态
实际执行的时候调用的是子类实现 这叫动态绑定

new 过程中 父类先初始化
子类可以通过super() 调用父类的构造方法,如果没有通过super() 则默认调用父类的
默认的构造方法。如果父类没有默认的构造方法,则其的任何子类必须通过super()
调用父类的构造方法。

重写是子类重写父类的相同参数签名的方法
重写时子类方法不能够降低父类方法的可见性

栈存放函数的局部变量
堆存放动态分配的对象
内存区存放类的信息

对 变量的访问时静态绑定的?

import * 导入引用的包,不是递归导入的。
同一个包是指同一个直接包,子包下的类不能直接访问

import 是编译时概念,用来确定完全限定名
运行时只根据完全限定名加载类

包装类的静态方法valueof() 接收基本类型,返回引用类型
xxxvalue 返回对应的基本类型

equals 默认实现是比较地址
包装类重写了equals 所以实际比较的是其包装类的基本类型值

Integer 数值范围在-128到127 的会被缓存
Boolean Byte Short Long Character 都有类似的实现
共享常用对象这种设计思路成为享元模式

String 如果不是通过常量直接赋值,而是通过new 方法创建
两个字符就不相等 == 就不会返回true

StringBuffer 线程安全
StringBUilder 内存创建长度为16 的字符数组
长度扩展 之前的长度*2+2 指数扩展,在不知道大小的情况下比较常用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值