ElementUi form表單驗證一
阿新 • • 發佈:2020-12-28
集合的概念
什麼是集合
- 概念:物件的容器,實現了對物件常用的操作,類似陣列功能。
- 和陣列的區別:
* 1.陣列長度固定,集合長度不固定。
* 陣列可以儲存基本型別和引用型別,集合只能儲存引用型別 - 位置:java.util.*
一、Collection介面
體系集合:
- 特點:代表一組任意型別的物件,無序、無下標、不能重複。
- 方法:
* boolean add(Object obj) //新增一個物件
* boolean addAll(Collection c) //將一個集合中的所有物件新增到此集合中
* void clear() //清空此集合中的所有物件
* boolean contains(Object o) //檢查此集合中是否包含o物件
* boolean equals(Object o) //比較此集合是否與指定物件相等
* boolean isEmpty() //判斷此集合是否為空
* boolean remove(Object o) //在此集合中移除o物件
* int size() //返回此集合中的元素個數
* Object[] toArray() //將此集合轉換成陣列 - 使用:
二、List介面與實現類
1-1 List介面
* 特點:有序、有下標、元素可以重複。 * 方法: * void add (int index,Object o) //在index位置插入物件 * boolean add(int index,Collection c) //將一個集合中的元素新增到此集合中的index位置 * Object get(int index) //返回集合中指定位置元素 * List subList(int fromIndex,int toIndex) //返回fromIndex和toIndex之間的集合元素- 使用 :
1-2 List實現類:
-
ArrayList
* 陣列結構實現 、查詢快,增刪慢
* 執行效率快,執行緒不安全 -
Vector
* 陣列結構實現,執行緒安全 -
LinkedList
* 連結串列結構實現,增刪快,查詢慢 -
ArrayList原始碼分析:
-
Vector中的方法:
-
使用:
-
LinkedList的使用:
三、泛型和工具類
泛型:
-
Java泛型的本質是引數化型別,把型別作為引數傳遞。
-
常見形式有:泛型類、泛型介面、泛型方法
-
語法:
* <T....>T被稱為型別佔位符,表示一種引用型別 -
好處:
* 提高程式碼重用性
* 防止型別轉換異常,提高程式碼安全性。 -
泛型類的建立與使用
-
泛型介面的建立與使用
-
泛型方法:
-
泛型集合:
四、Set介面與實現類
-
Set介面的使用
-
實現類
* HashSet集合的使用:
* 儲存結構:雜湊表【陣列+連結串列+紅黑樹】;
* 儲存過程:
1. 根據hashcode計算儲存的位置,若位置為空,則直接儲存;若不為空,進行第二步;
2. 再執行equals方法,若equals方法為true,則認為是重複;否則生成連結串列;
* 改進:
1. 重寫hashcode和equals方法改進寫入、刪除;
2. 快速重寫hashcode和equals方法:在開發工具中提供的<Generate hashCode() and equals()...>
* TreeSet集合的使用
* 儲存結構:紅黑樹;
* 要求:元素必須要實現Comparable介面,compareTo方法返回值為0,認為是重複元素;
由於紅黑樹的比較特性,需進行如下程式碼:
public int compareTo(Person o){ //先比較姓名再比較年齡
int n1 = this.getName().compareTo(o.getName());
int n2 = this.age.o.getAge();
return n1 == 0?n2:n1;
}
* Comparable介面:實現定製比較
//建立集合,並制定比較規則
TreeSet<Person> person = new TreeSet<>(
new Comparator<person>(){
public int compareTo(Person o1,Person o2){ //先比較年齡再比較姓名
int n1 = o1.getAge()-o2.getAge();
int n2 = o1.getName().compareTo(o2.getName());
return n1 == 0?n2:n1;
}
* 使用TreeSet集合實現字串按照長度進行排序
//建立集合,並制定比較規則
TreeSet<String> treeSet = new TreeSet<>(
new Comparator<String>(){
public int compareTo(String o1,String o2){ //先比較年齡再比較姓名
int n1 = o1.length()-o2.length();
int n2 = o1.compareTo(o2);
return n1 == 0?n2:n1;
}
});
//新增資料
TreeSet.add("hello");
TreeSet.add("bello");
TreeSet.add("zello");``
TreeSet.add("lello");
TreeSet.add("aello");
TreeSet.add("xello");
System.out.println(treeSet.toString());
五、Map介面與實現類
1-1 Map介面的特點:
1. 用於儲存任意鍵值對;
2. 鍵:無序、無下標、不允許重複;
3. 值:無序、無下標、允許重複;
1-2 Map介面的方法:
* V put(K key,V value) //將物件存入到集合中,關聯鍵值。key重複則覆蓋原值。
* Object get(Object key) //根據鍵獲取對應的值
* Set<K> //返回所有key
* Collection<V> values() //返回包含所有值的Collection集合
* Set<Map,Entry<K,V>> //鍵值匹配的Set集合
1-3 Map介面的使用:
public static void main(String[] args){
//建立Map集合
Map<String,String> map = new HashMap<>();
//1.新增元素
map.put("cn","中國");
map.put("uk","英國");
map.out("usa","美國");
//2.顯示
System.out.println("元素個數:"+map.size());
System.out.println(map.toString());
//3.遍歷:
//3.1 利用keySet()
System.out.println("---------keySet()------------");
for(String key : map.keySet()){
System.out.println(key.toString()+"----"+map.get(key));
}
//3.2 使用entrySet()
System.out.println("---------entrySet()------------");
for(Map.Entry<String,String> entry : map.entrySet()){
System.out.println(entry.getKey()+"----"+entry.getValue());
}
}
2 Map介面的實現類
2-1 HashMap集合
儲存結構:雜湊表【連結串列+紅黑樹+棧】
//新增學生類
public class Student{
private String name;
private int stuNo;
public Student(){
}
public Student(String name,int stuNo){
super();
this.name = name;
this.stuNo = stuNo;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getStuNo(){
return StuNo;
}
public void setStuNo(String stuNo){
this.stuNo = stuNo;
}
public String toString(){
return "Student [name="+name+",stuNo="+stuNo+"]";
}
}
//結合Student類使用HashMap集合
public static void main(String[] args){
//建立集合
HashMap<Student,String> students = new HashMap<Student,String>();
//1.新增元素
Student s1 = new Student("悟空",100);
Student s2 = new Student("悟能",101);
Student s3 = new Student("悟淨",102);
students.put(s1,"北京");
students.put(s2,"南京");
students.put(s3,"上海");
//2.顯示
System.out.println("元素個數:"+students.size());
System.out.println(students.toString());
//3.遍歷
//3.1 利用keySet()
System.out.println("---------keySet()------------");
for(Student key : students.keySet()){
System.out.println(key.toString()+"----"+students.get(key));
}
//3.2 使用entrySet()
System.out.println("---------entrySet()------------");
for(Map.Entry<Student,String> entry : students.entrySet()){
System.out.println(entry.getKey()+"----"+entry.getValue());
}
//4.判斷
System.out.println(students.containsKey(s1));
System.out.println(students.containsValue("上海"));
}
HashMap原始碼分析總結:
* HashMap剛建立時,table【初始建立的陣列】是null,為了節省空間,當新增第一個元素時,table容量調整為16。
* 當元素個數大於閾值【16*0.75=12】時,會進行擴容,每次擴充套件後為原來大小的2倍,目的是減少調整元素的個數。
* jdk1.8中當每個連結串列長度大於8並且陣列元素個數大於等於64時,會調整紅黑樹,目的是提高執行效率。
* jdk1.8中當連結串列長度小於6時調整成連結串列。
* jdk1.8以前,連結串列採用頭插法,之後使用尾插法。