1. 程式人生 > 其它 >ElementUi form表單驗證一

ElementUi form表單驗證一

集合的概念

什麼是集合
  • 概念:物件的容器,實現了對物件常用的操作,類似陣列功能。
  • 和陣列的區別:
    * 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以前,連結串列採用頭插法,之後使用尾插法。