集合框架複習總結(一)
阿新 • • 發佈:2019-01-08
最近在複習集合框架,總結一下Java集合框架的一些方法,還只是複習了一部分,就先總結複習了的部分吧。
一、首先,什麼事集合框架?
集合框架是為表示和操作集合而規定的一種統一的標準的體系結構。任何集合框架都包含三大塊內容:對外的介面、介面的實現和對集合運算的演算法。
陣列和集合的區別是什麼? 答:①陣列既可以儲存基本資料型別,又可以儲存引用資料型別,基本資料型別儲存的是值,引用資料型別儲存的是地址值 ②集合只能儲存引用資料型別(物件)集合中也可以儲存基本資料型別,但是在儲存的時候會自動裝箱變成物件 ③陣列長度是固定的,不能自動增長 ④集合的長度的是可變的,可以根據元素的增加而增長 而框架的發展是怎樣的呢,現在的集合框架基本如下圖所示:
一、Collection的基本功能:
boolean add(E e)
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
例子如下:
先設定一個學生類:
public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }
然後例子1如下:
Collection c = new ArrayList(); //父類引用指向子類物件 boolean b1 = c.add("abc"); boolean b2 = c.add(true); //自動裝箱new Boolean(true); boolean b3 = c.add(100); boolean b4 = c.add(new Student("張三",23)); boolean b5 = c.add("abc"); System.out.println(b1); System.out.println(b2); System.out.println(b3); System.out.println(b4); System.out.println(b5); System.out.println(c.toString());
得出的結果如下:
例子2:
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
System.out.println(c);
System.out.println(c.size()); //獲取元素的個數
System.out.println(c.contains("b"));
c.remove("b"); //刪除指定元素
System.out.println(c);
System.out.println(c.contains("b")); //判斷是否包含
System.out.println(c.isEmpty());c.clear(); //清空集合
System.out.println(c);
System.out.println(c.isEmpty());
得出結果如下:
二、遍歷集合
Collection c = new ArrayList();
c.add("first");
c.add("second");
c.add("third");
c.add("forth");
Object[] arr = c.toArray(); //將集合轉換成陣列
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
若存入的是一個類物件,那麼怎樣遍歷集合呢?
Collection c = new ArrayList();
c.add(new Student("張三", 23)); //Object
obj = new Student("張三",23);
c.add(new Student("李四", 24));
c.add(new Student("王五", 25));
c.add(new Student("趙六", 26));
Object[] arr = c.toArray(); //將集合轉換成陣列
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
Student s = (Student)arr[i]; //向下轉型
System.out.println(s.getName() + "..." + s.getAge());
}
結果如下:
三、Collection的All用法:
帶All的功能
boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)
例子如下:
例子1:
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
c2.add("d");
System.out.println(c1);
c1.addAll(c2); //將c2中的每一個元素新增到c1中
System.out.println(c1);
c1.add(c2); //將c2看成一個物件新增到c1中
System.out.println(c1);
得出的結果:
例子2:
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("z");
boolean b = c1.removeAll(c2); //刪除的是交集
System.out.println(b);
System.out.println(c1);
結果如下:
例子3:containsAll()
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
boolean a = c1.containsAll(c2);
c2.add("z");
boolean b = c1.containsAll(c2); //判斷呼叫的集合是否包含傳入的集合
System.out.println(a);
System.out.println(b);
結果如下:
true
false
例子4:
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
c2.add("d");
c2.add("e");
c2.add("f"); //取交集,如果呼叫的集合改變就返回true,如果呼叫的集合不變就返回false
boolean b = c1.retainAll(c2); //取交集
System.out.println(b);
System.out.println(c1);
System.out.println(c2);
c2.retainAll(c1);
System.out.println(c2);
得出的結果是:
呼叫containsAll的集合會取交集,而導致c2集合會變化。
四、集合的遍歷——迭代器遍歷、
迭代器是什麼?
答:集合是用來儲存元素,儲存的元素需要檢視,那麼就需要迭代(遍歷)
迭代器的使用:
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
Iterator it = c.iterator(); //獲取迭代器的引用
while(it.hasNext()) { //集合中的迭代方法(遍歷)
System.out.println(it.next());
}
這裡有兩個方法:hasNext()和next(),分別表示是否還有下一個元素和指向下一個元素
那麼,如果要遍歷自定義物件的集合呢?
如下:
Collection c = new ArrayList();
c.add(new Student("張三",23));
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("趙六",26));
c.add(new Student("趙六",26));
for(Iterator it = c.iterator();it.hasNext();) {
Student s = (Student)it.next(); //向下轉型
System.out.println(s.getName() + "," + s.getAge()); //獲取物件中的姓名和年齡
}
System.out.println("------------------------------");
Iterator it = c.iterator(); //獲取迭代器
while(it.hasNext()) { //判斷集合中是否有元素
//System.out.println(((Student)(it.next())).getName() + "," + ((Student)(it.next())).getAge());
Student s = (Student)it.next(); //向下轉型
System.out.println(s.getName() + "," + s.getAge()); //獲取物件中的姓名和年齡
}
結果如下:
張三,23
李四,24
王五,25
趙六,26
-----------------------------------
張三,23
李四,24
王五,25
趙六,26
Collection的內容就差不多這樣了,還有List,Set和Map的內容就複習完了再總結