1.棧:先進後出,存入元素稱爲壓棧,取出元素稱爲彈棧。
隊列:先進先出。
數組:查詢快,增刪慢。
鏈表:增刪快,查詢滿。由一條鏈子連接多個元素組成,每個元素包括自身數據和下一個元素的地址。
雙向鏈表:每個元素由一個數據和前後兩個元素的地址值三部分組成。
循環鏈表:最後一個元素存儲的地址值指向第一個元素。
2.hash:把任意長度的輸入通過哈希算法變換成固定長度的輸出,該輸出稱爲該輸入的哈希值。同一輸入的哈希值一
定相同,而哈希值相同不一定是同一輸入。
3.集合:爲了方便對多個對象的操作,就要對多個對象進行存儲,java就提供了集合。
特點:A:長度可變。B:只能存儲引用類型。C:可以存儲多種類型。
4.根據需求不同,java也提供了許多不同的集合類:
5.Collection:該接口是集合的頂層結構,定義了集合的共性功能。可以向其中存儲對象,稱爲元素。
成員方法:A:添加功能:boolean add(Object obj):往集合中添加一個元素
boolean addAll(Collection c):往集合中添加多個元素
B:刪除功能:void clear():清空所有元素
boolean remove(Object o):從集合中刪除一個元素
boolean removeAll(Collection c):從集合中刪除另一個集合的元素
C:判斷功能:boolean contains(Object o):判斷集合中是否包含指定的元素
boolean containsAll(Collection c):判斷集合中是否包含另一個集合的元素
boolean isEmpty():判斷集合是否爲空。
D:交集功能:boolean retainAll(Collection c):求出交集並返回。
E:迭代器:集合特有遍歷方式。
F:長度功能:int size():返回集合中元素的個數
exp:向集合中添加學生對象並遍歷。
package collectionpractice;//創建標準java類。
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
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 + "]";
}
}
package collectionpractice;
import java.util.ArrayList;
import java.util.Collection;
public class StudentTest {
public static void main(String[] args) {
Student s1=new Student("a", 1);//創建學生類對象。
Student s2=new Student("b", 2);
Student s3=new Student("c", 3);
Collection<Student> c=new ArrayList<Student>();//collection爲接口,創建實現類對象
c.add(s1);//向集合中添加元素
c.add(s2);
c.add(s3);
for (Student s : c) {//增強for循環遍歷集合
System.out.println(s);//由於在student中重寫過方法tostring,因此可以直接打印。
}
/* Student [name=a, age=1]
Student [name=b, age=2]
Student [name=c, age=3]*/
}
}
在編程時,可以用alt+shift+s快速創建標準java類。
6.迭代器:Iterator,是依賴於集合的存在,因此和集合搭配使用。
迭代器遍歷集合步驟:A:通過集合對象獲取到迭代器對象。
B:通過迭代器對象hasNext方法判斷是否有元素。
C:通過迭代器對象next方法獲得元素。
exp:同爲上述學生類,在用迭代器遍歷:
Iterator<Student> i=c.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
7.List:該集合元素有序(先進先出)且可重複。
A:添加功能:void add(int index,Object obj):在指定的位置添加元素。
B:刪除功能:Object remove(int index):通過指定的索引刪除元素,並把刪除的元素返回。
C:get(int index) 返回列表中指定位置的元素。
D:Object set(int index,Object obj),替換指定索引初的元素。
E:List中元素順序可以被洗牌Collections.shuffle(list)
F:List中元素順序可以被倒序Collections.reverse(list)
G:Collections.sort(list)對List元素排序
exp:創建list集合,調用功能並遍歷:
package collectionpractice;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class StudentTest2 {
public static void main(String[] args) {
Student s1=new Student("a", 1);//創建學生類對象。
Student s2=new Student("b", 2);
Student s3=new Student("c", 3);
Student s4=new Student("a", 1);
List<Student> l=new ArrayList<Student>();
l.add(s1);
l.add(s2);
l.add(s3);
for (Student s : l) {
System.out.println(s);
}
System.out.println("-------------------------------");
l.add(1, s4);//在索引1處添加s4
Collections.shuffle(l);//洗牌功能。
for (Student s : l) {//增強for輸出,每次結果都不同。
System.out.println(s);
}
}
}
8.ArrayList:有順序,可以重複,底層數據結構時數組,查詢快,增刪慢,線程不安全,效率高。
9.LinkedList:有序可重複,底層結構是鏈表,查詢慢增刪快,線程不安全,效率高。
特有功能:A:public void addFirst/addLast(E e):添加第一個/最後一個元素。
B:public E getFirst/getLast():獲取第一個/最後一個元素。
C:public E removeFirst/removeLast():刪除第一個/最後一個元素。
10泛型入門:(1)是一種把明確數據類型的工作推遲到創建對象或者調用方法的時候纔去明確類型的特殊類型
(2)格式: <數據類型>:默認情況下,是Object類型。這裏數據類型只能是引用類型。如果你看到寫基
本類型也行,其實這裏使用了自動裝箱。
(3)好處:A:把運行時期問題提前到了編譯時期
B:避免了強制類型轉換
C:優化程序設計,解決了黃色警告線問題
(4)一般來說就是在集合中用的多。看API,如果類或者接口或者方法出現了<>說明這裏就有泛型。
11.集合的三種遍歷方式:1.for循環。2.迭代器。3.增強for。
package collectionpractice;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class StudentTest3 {
public static void main(String[] args) {
Student s1=new Student("a", 1);//創建學生類對象。
Student s2=new Student("b", 2);
Student s3=new Student("c", 3);
List<Student> l=new ArrayList<Student>();
l.add(s1);
l.add(s2);
l.add(s3);
Iterator<Student> i=l.iterator();//迭代器遍歷
while (i.hasNext()) {
System.out.println(i.next());
}
System.out.println("----------------------");
for (Student s : l) {//增強for循環遍歷
System.out.println(s);
}
System.out.println("----------------------");
for (int j = 0; j < l.size(); j++) {//for循環遍歷
System.out.println(l.get(j));
}
}
}