`

java基础(二)

    博客分类:
  • java
阅读更多

Java 基础(二)

toString () :使用 System.out.println() 方法时,调用对象的 toString() 。可以重写 toString()

== equals hashcode 只有当两个引用都引用相同的对象时, == 才计算为 true equals 默认使用 == 运算符比较。可以重写 equals 方法,比较两个对象内容是否相同。如果使类对象作为散列表中的键,必须重写 equals ,重写函数签名必须为: public boolean equals(Object o) equals 的约定:自反性,对称性,可传递性,一致性。 x.equals(null) 返回 false

Object 类中的默认散列码总是为每个对象产生一个唯一号。

equals hashcode 的约定:如果两个对象 equals ,他们必须具有相同的 hashcode hashcode 相同,对象不一定 equals ;对象不 equals hashcode 不一定不同。搜索比较时首先使用 hashcode() ,然后使用 equals 检索正确的元素 , 只有当 hashcode 相同, equals 返回 true ,两个对象才能看成完全相同。 transient 标识的属性最好不要用来确定对象的散列码或相等性。

集合


两种顺序: Sorted 顺序,类实现 Compareable 接口定义的顺序或 Comparator 定义的顺序。

Ordered 顺序:可以按照特定顺序遍历集合。通过索引或者插入顺序访问。

List 提供与索引相关的方法。按照索引位置排序,没有 Sorted 顺序。

ArrayList :提供快速遍历和快速随机访问。适用:要快速遍历但是不做大量的插入和删除时。非线程同步。

Vector :基本上和 ArrayList 同,线程同步。

LinkedList :元素之间是双链接,容易被选择设计栈和队列。元素遍历比较慢,可以快速插入和删除。实现 Queue 接口,支持 peek() poll() offer() 方法。

Set 不允许重复

HashSet :非 Sorted ,非 Ordered

LinkedHashSet :非 Sorted Ordered 。可以按照元素的插入顺序遍历它们。

TreeSet Sorted ,非 Ordered ;将元素按照自然顺序升序排序;可以选择一个带构造函数的 TreeSet ,通过 Comparable 或者 Comparator 为集合提供自己的规则。

Map 键值对,键惟一。

HashMap :非 Sorted ,非 Ordered 。允许一个集合中有一个 null 键和多个 null 值。非线程安全

Hashtable HashMap 的同步版本。线程安全,不允许任何内容为 null

LinkedHashMap :非 Sorted Ordered

TreeMap Sorted ,非 Ordered

Queue:

PriorityQueue: 按照自然顺序或 Comparator 进行排序的。

排序集合和数组

使用 Collections.sort Arrays.sort 对集合和数组进行排序。排序的对象需要 implement Comparable 接口中的 compareTo 方法,方法返回负数, 0 ,正数。

[Collections/Arrays].sort 的重载版本:接受 Comparator 的实现类,自定义排序方法。

对于基本类型, Arrays 始终使用自然顺序进行排序。

搜索集合和数组

binarySerach 返回值:成功返回值的 int 索引,不成功返回 int 索引标识插入点 = - 插入点) -1 )。

搜索的集合或者数组必须在搜索之前进行排序,否则返回结果不可预测。排序顺序和搜索的顺序必须是同一个顺序。

Arrays Lists 之间进行转换

Arrays.asList :返回数组支持的固定大小的 list 。对 list 的操作更新到数组中。

泛型:

(1) 泛型使编译器强加类型安全,只在编译时保护,在运行时不会存在。

(2) 非泛型集合可以容纳任何非基本类型的任何对象,获取对象时只返回 Object 。混合泛型和非泛型集合会产生编译警告。

(3) 泛型集合元素赋值:集合元素可以是泛型类型的子类。

(4) 泛型集合赋值:多态适用于“基本”类型,不适用于泛型类型。泛型类型必须严格相同。通配符 <?extends Parents> <? super Child> 可以实现多态赋值。 .<?> 完全等同于 <? extends Ojbect> 。集合参数类型为 <? extends Parents> <?> 时,不能对集合 add 。通配符只针对声明使用。

(5) 使用泛型声明来创建泛型类和泛型方法。

内部类:

四种类型:静态内部类,实例内部类,方法内部类,匿名类。

实例内部类:

(1)       类内部没有 static 声明 , 可以访问外部类内部任何成员

(2)       在外部类外部,通过外部类的实例实例化内部类;在外部类里面,可以直接使用内部类类名实例化。

(3)       内部类内部使用 this 指内部类的实例,使用 Outer.this 引用外部类实例。

(4)       内部类修饰符:访问修饰符 public protected private final abstract strictfp

方法本地内部类:

(1)       方法里面声明的类。只能在方法内部使用

(2)       只能引用方法内部 final 声明的变量。

(3)       不能标识方法内部类用访问修饰符, static 。只可以使用 abstract final

匿名内部类:

一般用来产生一个类或接口的匿名类对象。可以在任何使用对象的地方使用匿名内部类来赋值。

静态内部类:

(1)       类内部声明为 static 的内部类。

(2)       不需要外部类的实例即可创建静态内部类实例。

(3)       不能访问外部类的非静态成员。因为没有外部实例的隐含引用。

线程

(1) 定义线程:两种方法, extends Thread implements Runnable

(2) 实例化线程: new MyThread(); new Thread(new MyRunnable()); new Thread(new MyThread());

(3) 启动线程: t.start(); 线程启动后,同一个实例不能再次 start

(4) 线程状态:新,死,运行,就绪,阻塞。

(5)sleep 后只能回到就绪状态,等待调度。它是一个 static 方法。

(6) 线程优先级:数字越大优先级越高。 yield 方法让线程从运行状态到就绪状态。

(7)join t.join() 让当前调用线程加到 t 线程的尾部,等待 t 线程结束后才可以运行。

线程离开运行状态的方法: yield join sleep run 完成, wait synchronized 阻塞,被线程调度程度转换成就绪状态。

(8)synchronized :线程在执行 synchrnoized 时需要获取对象的锁,执行完 synchrnoized 之后会自动释放锁,在释放锁之前任何别的线程不获取该对象的锁定。 Sleep 不释放锁。

Public synchronized void doStuff(){System.out.println(“test”);} 等价于:

Public void doStuff(){synchronized(this){ System.out.println(“test”);}}

Public static synchronized int getCount(){return count} 等价于

Public static int getCount(){synchronized(MyClass.class){return count;}}

(9) 线程死锁:获取两个或者以上的资源,获取资源的顺序不定,两个以上的线程。可以通过使用按照一定的顺序获取资源来避免死锁。

(10)wait notify notifyAll ,必须在 synchronized context 中,否则抛出 RuntimeException 。每个对象都有一个等待列表,等待来自该对象的信号。线程执行 wait 的时候,线程从运行状态进入阻塞状态,在对象的等待队列中加上该线程,在对象上执行 notify 的时候,从对象的阻塞队列中唤醒一个线程进入就绪状态, notifyAll 唤醒对象阻塞队列上的所有线程。

  • 大小: 86.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics