JAVA必备知识整理

JAVA知识学习 面试

Object类的常见方法总结

Object类是一个特殊的类,是所有类的父类。它主要提供了以下11个方法:

public final native Class<?> getClass()//native方法,用于返回当前运行时对象的Class对象,使用了 final关键字修饰,故不允许子类重写。

public native int hashCode() //native方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的 HashMap。

public boolean equals(Object obj)//用于比较2个对象的内存地址是否相等,String类对该方法进行了重写用户比较字符串的值是否相等。

public String toString()//返回类的名字@实例的哈希码的16进制的字符串。建议Object所有的子类都重写这个方法。

public final native void notify()//native方法,并且不能重写。唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。

public final native void notifyAll()//native方法,并且不能重写。跟notify一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。

public final native void wait(long timeout) throws InterruptedException//native方法,并且不能重写。暂停线程的执行。注意:sleep方法没有释放锁,而wait方法释放了锁 。timeout是等待时间。

public final void wait(long timeout, int nanos) throws InterruptedException//多了nanos参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)。 所以超时的时间还需要加上nanos毫秒。

public final void wait() throws InterruptedException//跟之前的2个wait方法一样,只不过该方法一直等

待,没有超时时间这个概念

protected void finalize() throws Throwable { }//实例被垃圾回收器回收的时候触发的操作

类集框架

集合框架底层数据结构总结

Collection

1
2
3
4
5
public boolean add(E e);
public boolean contains(Object o);
public boolean remove(Object o);
public int size();
public Object[] toArray();

1. List

1
2
3
4
扩充的方法
public E get(int index);
public E set(int index,E element);

Arraylist:Object数组

Vector:Object数组

LinkedList: 双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环) 详细可阅读JDK1.7-LinkedList循环链表优化

2. Set

HashSet(无序,唯一)基于 HashMap 实现的,底层采用 HashMap 来保存元素

LinkedHashSet: LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。有点类

似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。

TreeSet(有序,唯一):红黑树(自平衡的排序二叉树。

Map

1
2
3
4
5
public V put (K key, V value); //如果重复会替换
public V get(Object key);
public boolean containsKey(Object key);
public Set<K> keySet(); //将key转换成set
public V remove(Object Key);

HashMap:JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希

冲突而存在的(“拉链法”解决冲突).JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默

认为8)时,将链表转化为红黑树,以减少搜索时间

LinkedHashMap: LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和

链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以

保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。

HashTable: 同步操作,读写安全,不允许储存null

TreeMap: 红黑树(自平衡的排序二叉树)

数组和链表对比

  • 链表不用扩容,增删方便;
  • 数组查找快,链表要遍历;

/*

* 集合的工具类 (Collections):

* 笔试题:说出 Collection 与 Collections 的区别?
* 1.Collection 是一个单列集合的跟接口,Collections 是操作集合对象的一个工具类
* Collections 常见方法:
* 1. 对 list 进行排序:
* sort(List list)
* sort(List list, Comparator c)
* 2. 对 list 进行二分查找:
* binarySearch(List> list, T key) \* binarySearch(List list, T key, Comparator c) \* 3. 对集合取最大值或最小值 \* max(Collection coll) \* max(Collection coll, Comparator comp) \* min(Collection coll) \* min(Collection coll, Comparator comp) \* 4. 对 list 集合进行反转 \* reverse(List list
* 5. 可以将不同步的集合变成同步的集合
* synchronizedCollection(Collection c)
* synchronizedList(List list)
* synchronizedMap(Map<K,V> m)
* synchronizedSet(Set s)

* */

数组的工具类 (Arrays)

* 1. 复制数组:
* copyOf(boolean[] original, int newLength)
* original: 源数组

* newLength: 新数组长度
* 2. 复制部分数组
* copyOfRange
* 3. 比较两个数组是否相同
* equals(int[],int[])
* 4. 将数组变成集合
* List aslist(T[])

* 5、返回成字符串toString();

* 6.Array.sort()

Java 中 && 和 &

都是表示与的逻辑运算符,都表示逻辑运输符 and,当两边的表达式都为 true 的时候,整个运算结果才为 true,否则为 false。 && 的短路功能,当第一个表达式的值为 false 的时候,则不再计算第二个表达式;& 则两个表达式都执行。

持续更新ing

-------------本文结束感谢您的阅读-------------