|
哇,這一章真的是好混亂啊。 首先,要弄明白這些類的層次關(guān)系,層次關(guān)系錯綜復(fù)雜,只要知道主要的就好,去看jdk文檔趴。 這一章的目的主要熟悉各種接口,為后面的內(nèi)容做鋪墊。 一、Collection接口Collection接口是List、Queue、Set接口的基類。他們分別有不同的抽象類實現(xiàn),AbstracCollection類是AbstractList類、AbstractQueue類、AbstractSet類的基類。 一、List? ?共同特點:按照被插入的順序保存元素 1.ArrayList特點:①由數(shù)組實現(xiàn)擅長于隨機(jī)訪問,但是插入刪除元素較慢 ? (1)列表初始化方法: 每個Collection類型的類都有默認(rèn)構(gòu)造函數(shù)和參數(shù)為Collection的構(gòu)造函數(shù)兩種 ?
import java.util.*;
//初始化列表的三種方式
public class AddingGroups {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> l = new ArrayList<Integer>();
Integer[] moreInts = {6,7,8,9,10};
//第一種使用Collections類提供的靜態(tài)方法是首選的方式
Collections.addAll(l, 1,2,3,4,5);
Collections.addAll(l, moreInts);
System.out.println("第一種方式Collections.addAll():" l);
//第二種使用Arrays類的asList()方法,此方法由數(shù)組實現(xiàn)返回一個固定大小列表,不可增改
//因此常包裝在容器中使用
ArrayList<Integer> l1 = new ArrayList<Integer>(Arrays.<Integer>asList(11,12,13,14,15));
System.out.println("第二方式Arrays.asList():" l1);
//第三種方式容器自身的方法
l.addAll(l);
System.out.println("第三種方式:" l);
}
}
View Code
? 輸出: 第一種方式Collections.addAll():[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ? (2)ArrayList方法舉例 Pet類對象都被定義為唯一的,任何兩個Pet對象equals()的結(jié)果都是false,在equals()方法中可以定義判斷兩個對象相等的標(biāo)準(zhǔn)。 判斷一個元素是否屬于List,返回元素索引,刪除元素等操作都會用到equals()方法,所以這些隨著equals()方法實現(xiàn)的不同,便會有不同的效果。 ?
import java.util.*;
import typeinfo.pets.*;
//ArrayList方法應(yīng)用舉例
public class ArrayListMethod2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Pet> l = Pets.arrayList(10);
Rat r = new Rat();
System.out.println("[1]: " l);
//在數(shù)組列表末尾增加一個對象
l.add(r);
System.out.println("[2]: " l);
//在2位置插入一個對象
l.add(2, new Pug());
System.out.println("[3]: " l);
//刪除對象r
l.remove(r);
System.out.println("[4]: " l);
//刪除位置2處的元素
l.remove(2);
System.out.println("[5]: " l);
//清空列表
l.clear();
System.out.println("[6]: " l);
//將列表l1中元素加入到l中
ArrayList<Pet> l1 = Pets.arrayList(7);
l.addAll(l1);
System.out.println("[7]: " l);
//在l列表3位置插入l
l.addAll(3, l);
System.out.println("[8]: " l);
//打印列表大小
System.out.println("[9]: size " l.size());
//修改列表元素
l.clear();
l.addAll(l1);
l.set(0, new Manx());
System.out.println("[10]: " l);
//查看列表是否為空
System.out.println("[11]: isEmpty " l.isEmpty());
//根據(jù)索引返回元素
Pet p = l.get(2);
System.out.println("[12]: " p);
//獲得元素索引
System.out.println("[13]: indexOf " l.indexOf(p));
//判斷是否包含
System.out.println("[14]: " l.contains(p));
//返回一個含有列表所有元素的數(shù)組
Object[] o = l.toArray();
System.out.println("[15]: " o[3]);
}
}
View Code
? 2.LinkedList特點:①由鏈表實現(xiàn)善于增刪數(shù)據(jù) ②實現(xiàn)了棧、隊列、雙端隊列的方法,可直接作為棧、隊列、雙端隊列使用 ? 實例一:Stack的基本用法 ? import typeinfo.pets.*;
import java.util.*;
public class StackLinkedList {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList<Pet> stack = new LinkedList<Pet>(Pets.arrayList(6));
System.out.println("[1]: " stack);
Rat r = new Rat();
stack.push(r);
System.out.println("[2]: " stack);
stack.pop();
stack.pop();
System.out.println("[3]: " stack);
}
}
? 結(jié)果:
? 實例二:Queue的基本用法 ?
public class QueueLinkedList {
public static void printQ(Queue q) {
while(q.peek() != null) {
System.out.print(q.remove() " ");
}
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Random rand = new Random();
Queue<Integer> queue = new LinkedList<Integer>();
for(int i = 0; i < 8; i ) {
queue.offer(rand.nextInt(i 10));
}
printQ(queue);
Queue<Character> qc = new LinkedList<Character>();
for(Character c : "haohao".toCharArray()) {
qc.offer(c);
}
printQ(qc);
}
}
View Code
?輸出: ?2 9 6 6 11 13 12 11 ? 實例三:PriorityQueue的基本用法 ?按照Integer、Character、String的內(nèi)建自然順序排序
import java.util.*;
public class PriorityQueueList {
public static void main(String[] args) {
// TODO Auto-generated method stub
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
Random rand = new Random();
for(int i = 0; i < 10; i ) {
pq.offer(rand.nextInt(i 10));
}
QueueLinkedList.printQ(pq);
List<Integer> l = Arrays.asList(2,4,3,1,5,10);
pq = new PriorityQueue<Integer>(l);
QueueLinkedList.printQ(pq);
PriorityQueue<Integer> pq1 = new PriorityQueue<Integer>(10, Collections.reverseOrder());
pq1.addAll(l);
QueueLinkedList.printQ(pq1);
}
}
View Code
? 二、Set?共同特點:①不保存重復(fù)元素 ?、谏朴诓檎遥趯ο笾?/p> 1.HashSet?特點:①基于Hash表散列函數(shù)實現(xiàn),存儲元素?zé)o序 ?、趯iT對快速查找進(jìn)行了優(yōu)化 ? 2.LinkedHashSet?特點:①基于Hash表散列函數(shù)實現(xiàn),看起來卻像使用鏈表維護(hù) ?、谑荋ashSet的子類 3.TreeSet?特點:①基于紅黑樹實現(xiàn),會對存儲元素進(jìn)行排序 ?
import java.util.*;
public class SetMethod {
public static void main(String[] args) {
// TODO Auto-generated method stub
Set<Integer> s = new HashSet<Integer>(Arrays.asList(3,1,2,5,6,7,4));
System.out.println("[1]: " s);
s.add(8);
System.out.println("[2]: " s);
Set<Integer> s1 = new HashSet<Integer>(Arrays.asList(5,4,3,2,1));
System.out.println("[3]: " s1);
System.out.println("[4]: " s.containsAll(s1));
System.out.println("[5]: " Arrays.asList(3,1,2,5,6,7,4));
}
}
View Code
? ?結(jié)果:
? ?這個結(jié)果咋是有序的嘞,正所謂“懸之又懸,妙不可言”,有點復(fù)雜 哈哈 以后再說。 三、Map?Map和Set情況差不多,不過Map四基于鍵值對的 實例: ?
import java.util.*;
import typeinfo.pets.*;
public class MapBase {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, Pet> m = new HashMap<String, Pet>();
m.put("My Rat", new Rat("honghong"));
m.put("My ManX", new Manx());
m.put("My Pug", new Pug());
System.out.println(m);
Pet p = m.get("My Rat");
System.out.println(p);
System.out.println(m.containsKey("My Pug"));
System.out.println(m.containsValue(p));
}
}
View Code
? 結(jié)果:
|
|
|