JAVA類集框架筆記(一)
一、基本概念 :
1、所謂類集就是一個動態的物件陣列,是對一些實現好的資料結構和演算法進行包裝,方便使用。而且類集框架本身不受物件陣列的長度限制。
2、為了實現類集容易擴充套件和修改的特性,類集框架被設計成包含了一組標準介面。常用的類集介面是 : Collection 、List 、Set 、Map 、Iterator 、ListIterator 、Enumeration 、SortedSet 、SortedMap 、Queue 、Map.Entry
3、Collection介面是集合框架的最大介面,但是如果直接使用Collection介面進行操作的話,則表示的操作意義不明確,因此,在實際開發中不提倡直接使用Collection介面進行開發,而基本上都是使用其子介面 。
二、List介面
如果要使用List介面進行操作,則必須依靠其子類實現物件的例項化,在實際開發中,List子介面有 ArrayList 、 LinkedList 等常用子類 。
(一) ArrayList :
1、使用 ArrayList 實現向集合中增加元素,程式碼如下 :
import java.util.ArrayList ; import java.util.Collection ; import java.util.List ; public class ArrayListDemo{ public static void main(String[] args){ List<String> allList = new ArrayList<String>() ; //定義並例項化List物件,指定String型別 Collection<String> allCollection = new ArrayList<String>() ; //定義並例項化Collection物件,指定String型別 allList.add("Hello") ; //從Collection介面中繼承的方法,向集合中增加資料 allList.add(0,"World") ; //List介面擴充的方法,向集合中指定位置增加資料 System.out.println(allList) ; //輸出集合中的內容 allCollection.add("abc"); //增加資料 allCollection.add("jkl"); //增加資料 allList.addAll(allCollection) ; //從Collection介面中繼承的方法,向集合中增加一組物件 allList.addAll(0,allCollection) ; //此方法List自定義,向集合中指定位置增加一組物件 System.out.println(allList) ; //增加物件,呼叫toString()方法 } }
程式執行結果 :
2、使用 ArrayList 刪除集合中的元素 ,程式碼如下 :
import java.util.ArrayList ; import java.util.List ; public class ArrayListDemo02{ public static void main(String[] args){ List<String> allList = new ArrayList<String>() ; //定義並例項化List物件,指定String型別 allList.add("Hello") ; //從Collection介面中繼承的方法,向集合中增加資料 allList.add(0,"World") ; //List介面擴充的方法,向集合中指定位置增加資料 allList.add("abc"); //增加資料 allList.add("jkl"); //增加資料 allList.remove(0) ; //刪除指定位置的元素 allList.remove("Hello") ; //刪除指定內容的元素 System.out.println(allList) ; //增加物件,呼叫toString()方法 } }
程式執行結果 :
3、使用 size()和get(int index)兩個方法輸出List 集合中的內容 ,程式碼如下 :
import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo03{
public static void main(String[] args){
List<String> allList = new ArrayList<String>() ; //定義並例項化List物件,指定String型別
allList.add("Hello") ; //從Collection介面中繼承的方法,向集合中增加資料
allList.add("Hello") ; //List介面可以存放重複的內容
allList.add(0,"World") ; //List介面擴充的方法,向集合中指定位置增加資料
allList.add("abc"); //增加資料
allList.add("jkl"); //增加資料
System.out.print("由前向後輸出:") ;
for(int i=0;i<allList.size();i++){
System.out.print(allList.get(i) + "、") ;
}
System.out.print("\n\n由後向前輸出:") ;
for(int i=allList.size()-1;i>=0;i--){
System.out.print(allList.get(i) + "、") ;
}
}
}
程式執行結果 :
4、使用toArray()方法將集合變為物件陣列 ,程式碼如下 :
import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo04{
public static void main(String[] args){
List<String> allList = new ArrayList<String>() ; //定義並例項化List物件,指定String型別
allList.add("Hello") ; //從Collection介面中繼承的方法,向集合中增加資料
allList.add("Hello") ; //List介面可以存放重複的內容
allList.add(0,"World") ; //List介面擴充的方法,向集合中指定位置增加資料
allList.add("abc"); //增加資料
allList.add("jkl"); //增加資料
String str[] = allList.toArray(new String[]{}); //指定泛型型別
System.out.print("指定陣列型別:") ;
for(int i=0;i<str.length;i++){
System.out.print(str[i] + "、") ;
}
System.out.print("\n\n返回物件陣列:") ;
Object obj[] = allList.toArray();
for(int i=0;i<obj.length;i++){
String temp = (String) obj[i];
System.out.print(temp + "、") ;
}
}
}
程式執行結果 :
5、集合的其它操作
isEmpty()方法判斷集合是否為空
contains()方法判斷集合中是否存在指定元素
subList()方法擷取部分集合內容
indexOf()方法查詢指定元素的位置
程式碼如下 :
import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo05{
public static void main(String[] args){
List<String> allList = new ArrayList<String>() ; //定義並例項化List物件,指定String型別
System.out.println("集合操作前是否為空?" + allList.isEmpty()) ;
allList.add("Hello") ; //增加資料
allList.add("World") ; //增加資料
allList.add("abc"); //增加資料
allList.add("jkl"); //增加資料
allList.add("uio");
System.out.println(allList.contains("Hello")?"\"Hello\"字串存在! ":"\"Hello\"字串不存在! ");
List<String> allSub = allList.subList(2,4); //從第二個元素開始擷取,到第四個元素之前停止,擷取第2,3兩個元素
System.out.print("集合擷取:") ;
for(int i=0;i<allSub.size();i++){
System.out.print(allSub.get(i) + "、") ;
}
System.out.println("") ; //換行
System.out.println("abc字串的位置:" + allList.indexOf("abc"));
}
}
程式執行結果 :
(二) 、LinkedList :
LinkedList表示一個連結串列的操作類,此類雖然實現了List介面,但也同時實現了Queue介面,Queue表示是的佇列操作介面,採用FIFO(First Input First Output)先進先出的方式操作。
1、在連結串列的開頭和結尾增加資料
程式碼如下 :
import java.util.LinkedList;
public class LinkedListDemo01{
public static void main(String[] args){
LinkedList<String> link = new LinkedList<String>();
link.add("A"); //向連結串列中增加資料
link.add("B"); //向連結串列中增加資料
link.add("C"); //向連結串列中增加資料
System.out.println("初始化連結串列 :" + link); //輸出連結串列內容,呼叫toString()方法
link.addFirst("X"); //在連結串列的表頭增加內容
link.addLast("Y"); //在連結串列的表尾增加內容
System.out.println("增加頭和尾之後的連結串列 :" + link); //輸出連結串列內容,呼叫toString()方法
}
}
程式執行結果 :
2、找到連結串列頭
找到表頭:element()
找到且不刪除表頭:peek()
找到並刪除表頭:poll()
程式碼如下 :
import java.util.LinkedList;
public class LinkedListDemo02{
public static void main(String[] args){
LinkedList<String> link = new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
System.out.println("1-1、element()方法找表頭:" + link.element());
System.out.println("1-2、找完之後的連結串列內容:" + link);
System.out.println("\n2-1、peek()方法找表頭:" + link.peek());
System.out.println("2-2、找完之後的連結串列內容:" + link);
System.out.println("\n3-1、poll()方法找表頭:" + link.poll());
System.out.println("3-2、找完之後的連結串列內容:" + link);
}
}
程式執行結果 :