天天看點

Java學習筆記(4)——JavaSE

一、HashMap

HashMap以鍵值對的形式存儲對象,關鍵字Key是唯一的,不重複的

1,key可以是任何對象,Value可以任何對象

2,重複的key算一個,重複添加是替換操作(會覆寫原來的元素)

3,根據key的散列值計算散清單,元素按照散列值排序

4,HashMap預設的容量是16,預設加載因子0.75

5,HashMap根據Key檢索查找value值

hashMap常用的方法:

clear()

containsKey(Object key)

containsValue(Object value)

get()

isEmpty()

keySet() 傳回所有的key(注意:傳回值都放入set集合中)

put(key , value) 向Map中加入元素

remove(Object o)

size()

二、集合架構(Collection和Map)

集合架構包括集合與映射(Collection and Map),以及它們的子類(容器類)

1,List元素有先後次序的集合,元素有index位置,元素可以重複,繼承自Collection接口

  實作類: ArrayList,Vector,LinckedList

2,Set元素無序,不能重複添加,是數學意義上的集合,繼承自Collection接口

  實作類: HashSet(是一個隻有Key的HashMap)

  TreeSet

3,Collection 集概念,沒有說明元素是否 重複和有序,使用集合的根接口,很少直接使用

  其他集合都是實作類:ArrayList, HashSet

4,Map描述了(Key:Value)成對放置的集合,Key不重複,Value可以重複(Key重複算一個)

  實作類:HashMap(散清單算法實作)

  TreeMap(二叉樹實作,利用Key排序)

  Map适合檢查查找

三、集合的疊代

集合的疊代,是一種周遊算法

1,java使用Iterator接口描述了疊代模式操作

  Iterator中的方法,專門為while循環設計

2,Iterator的執行個體可以從集合對象獲得,是這個集合的一個元素序列視圖,預設包含一個操作遊标

  (這個遊标在第一個元素之前)

  hasNext()方法,可以檢查遊标是否有下一個元素

  next()方法,移動遊标到下一個元素,并且傳回這個元素引用。

  使用while循環配合這兩個方法,可以疊代處理集合的所有元素

4,疊代時可以使用疊代器remove()方法删除剛剛疊代的元素在疊代過程中

  疊代時不能使用集合方法(add, remove,set)更改集合元素!

--------------------------------------------------------------------------

Iterator<String> ite = eggs.iterator();

while(ite.hasNext()){

String egg = ite.next();

System.out.println(egg);

}

四、集合工具類Collections

同數組的工具類Arrays相同,集合的工具類為Collections,其中提供了許多的方法,諸如排序,

二分查找,打亂,填充等操作。

Collections.sort()底層調用了str.compareTo()方法比較大小

五、Comparable和Comparator

Comparable表示可以比較的(用于類實作)

實作這個接口表示:這個類的執行個體可以比較大小,可以進行自然排序

compareTo()傳回正數表示大,傳回負數表示小,傳回0表示相等

Comparable的實作必須與equals()的結果一緻,就是相等的對象時候,比較結果一定是0!

Comparator 比較工具

用于臨時定義比較規則,不是預設比較規則

------------------------------------------------------------------------------------------

String[] strs = {"abcff", "abc", "abde", "a"};

Arrays.sort(strs, new Comparator(){

//回調函數

public int compare(Object o1, Object o2){

String s1 = (String) o1;

String s2 = (String) o2;

return s1.length() - s2.length();

});

System.out.println(Arrays.toString(strs));

-------------------------------------------------------------------------------------------

六、java中的包裝類

包裝類可以把基本類型包裝為對象類型。

1,共有8種包裝類

int   Integer

long  Long

byte  Byte

short Short

float Float

double Double

boolean Boolean

char Character

2,包裝類提供了對應資料類型的工具方法

Integer.toHexString()

Integer.toString(int)

Integer.toBinaryString()

Integer.parseInt(String)

Integer.parseInt(String, int)

Double.parseDouble(String str);

3,自動包裝(auto boxing/ unboxing)

java5以後可以

4,注意點

包裝類是final的類

包裝類對象是不變的,與字元串類似(不變模式)

Integer a = 1;

Integer b = 2;

a = a + b ;

a = new Integer(a.intValue() + b.intValue())

包裝類覆寫了 toString(), equals(), hashCode(), compareTo()方法

七、集合複制

java預設集合的複制規則是淺層複制

集合複制有2種方式

1,clone()方法

  clone()方法是Object定義的

2,使用"複制構造器"

Map map = new HashMap();

Map map2 = new HashMap(map);

List list1 = new ArrayList();

List list2 = new LinkedList(list1);

淺表複制clone()方法

-------------------------------------------------------------------------------------

package notebook;

import java.util.*;

public class CollectionClone {

public static void main(String[] args){

ArrayList<FOO> list = new ArrayList<FOO>();

list.add(new FOO());

ArrayList<FOO> list2 = (ArrayList<FOO>)list.clone();

ArrayList<FOO> list3 = list;

System.out.println(list3 == list);

System.out.println(list2 == list);   //複制第一層

System.out.println(list2.get(0) == list.get(0));  //第二層元素沒有被複制

class FOO{

int a = 1;

淺表複制”複制構造器“

1,所有集合都有”複制構造器“,是淺表複制

2,”複制構造器“的參數是多态,可以在不同種類的集合間複制

import java.util.ArrayList;

import java.util.HashSet;

import java.util.LinkedList;

public class CollectionClone{

LinkedList<FOO> list4 = new LinkedList<FOO>(list);

HashSet<FOO> set = new HashSet<FOO>(list);

System.out.println(list4.containsAll(list));

System.out.println(set.containsAll(list));

八、同步化(線程安全)

同步化解決方案

1,Collections.synchronizedList()方法可以将非線程安全的list包裝為線程安全的

List list = new ArrayList();

list = Collections.synchronizedList(list);  //轉換以後就相當于Vector

2,Collections.synchronizedMap()方法可以将非線程安全的map包裝為線程安全的

HashMap map = new HashMap();

map = Collections.synchronizedMap(map);

九、數組與集合的轉換

1,數組轉集合

---------------------------------------------------------------------------------------

import java.util.Arrays;

import java.util.List;

import java.util.Set;

public class Demo {

String[] names = {"zs", "ls", "wu"};

List list = Arrays.asList(names);

//list.add("hh"); 有異常

//複制為全功能的list

List list2 = new ArrayList(list);

list2.add("ww");

System.out.println(list2);

//或放入set集合

Set se = new HashSet(list);

se.add("hh");

System.out.println(se);

2,集合轉數組

public class Demo02 {

List<String> list = new ArrayList<String>();

list.add("ls");

list.add("wu");

list.add("zs");

//集合轉指定類型數組

String[] str = (String[])list.toArray(new String[]{});

for(String s:str){

System.out.println(s);

十、Collection與Collections

面試可能會遇到的題目,Collection和Collections的差別是什麼?

Collection  抽象的集合概念,實作它的有List和Set

Collections 集合靜态工具類,包含集合的工具方法,如sort()等