<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 概念 **集合是一個容器** 之前學習過數組,也是一個容器 數組特點: ①只能存放相同類型的數據 ②固定長度 ③引用數據類型和基本數據類型都能存儲 **集合也能存放一組數據 ①專門存放引用數據類型 ②元素類型可以任意 ③長度不固定(動態擴容)** *** ### 簡介 Java當中,集合由兩大接口所代表 #### 1.Collection接口(線性集合) 1.1 **List接口**--有序有重復 **有序有重復:元素存入集合中的順序,與元素在集合中真正的位置是一致的;相同的對象可以多次存入集合**】 1.2 **Set接口**--無序無重復 **無序無重復:元素存入集合中的順序,與元素在集合中真正的位置是不一定一致的;相同的對象可以只保留一個** *** **面試題:List與Set的區別** List接口--有序有重復,Set接口--無序無重復 *** **List接口實現類** ①**ArrayList**--內部基于數組實現 其實就是創建了一個長度是10的Object類型數組,當元素個數超過10個時,自動擴容到原來長度的1.5倍;內部基于數組實現--所以擁有數組的一些特點:**隨機查詢速度快**(數組是一個靜態線性表,邏輯上和物理上地址都是連續的,通過首地址可以獲取到所有數據,通過下標可以獲取元素),**插入刪除速度慢**(因為地址連續,需要移動元素并更新下標) ②**LinkedList**--內部基于鏈表實現 鏈表是一種動態線性表(邏輯上連續,物理上不連續),鏈表包含兩個部分:①元素;②指向下一個元素的指針;特點:**隨機查詢速度慢**(無論查找第幾個元素,必須從第一個元素起始),**插入刪除速度快**(因為不涉及元素移動) *** **面試題:ArrayList,LinkedList,Vector的區別** ArrayList隨機查詢速度快,插入刪除速度慢 LinkedList隨機查詢速度慢,插入刪除速度快 Vector與ArrayList的區別是線程安全,而ArrayList線程不安全,效率更高 *** 練習代碼 ~~~ public class ArrayListDemo1 { public static void main(String[] args) { // Object ob[] = {1,false,"hello"}; // 1.能存入任意類型對象 // 2.長度可變 List list = new ArrayList(); ArrayListDemo1 ad = new ArrayListDemo1(); // 1.添加元素add list.add(1); list.add(false); list.add("hello"); list.add(ad); list.add(9.9); list.add(ad); // add也可以做插入操作 list.add(1, "123"); System.out.println(list); // 2.集合長度 System.out.println(list.size()); // 3.獲取--靠get(下標) System.out.println(list.get(1)); // 4.1普通遍歷 // for(int i = 0;i < list.size();i++) { // System.out.println("^^"+list.get(i)); // } // // 4.2增強for循環遍歷 // for(Object o:list) { // System.out.println("^^^^"+o); // } // 5.indexOf返回元素索引值,不存在返回-1 // System.out.println(list.indexOf("hello")); // 6.remove // list.remove("1"); // 7.set替換 // list.set(0, 123); // System.out.println(list); } } ~~~ ~~~ public class LinkedListDemo1 { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("hello"); // list.add(1); // list.add(0, 123); // System.out.println(list); // System.out.println(list.isEmpty()); // // if(list != null && !list.isEmpty()) { // System.out.println(123); // } // // System.out.println(list.get(2)); list.addFirst(123); System.out.println(list); } } ~~~ *** **Set接口實現類** ①**HashSet** ~~~ public class HashSetDemo1 { public static void main(String[] args) { Set set = new HashSet(); HashSetDemo1 hs = new HashSetDemo1(); set.add("hello"); set.add(123); set.add(false); set.add(hs); set.add(hs); // Set沒有get方法,也沒有下標 // System.out.println(set); // // 遍歷 // for(Object o:set) { // System.out.println(o); // } System.out.println(set.size()); System.out.println(set.isEmpty()); set.remove(123); System.out.println(set); // 1.set.contains("hello1") 集合中包含元素返回true,否則返回false System.out.println(set.contains("hello1")); } } ~~~ ②**TreeSet** #### 2.Map接口(非線性集合) Map是以鍵(key)值(value)對的形式存儲元素,key的功能類似于地址,key不允許重復,否則會覆蓋value,value隨意,null作為鍵值都是可以的 ①HashMap ②TreeMap ③HashTable *** **面試題:HashMap與HashTable的區別** Hashtable是線程安全的,而HashMap是線程序不安全的。 HashMap允許將null作為一個元素的key或者value,而Hashtable不允許。 *** ### 集合的遍歷 ~~~ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class BianLiDemo { public static void main(String[] args) { // 1.集合的遍歷--通用--迭代器遍歷 List list = new ArrayList(); list.add(4); list.add("hello"); Set<Comparable> set = new HashSet(); set.add("123"); set.add(false); // 1.迭代器遍歷List和Set // Iterator iter = set.iterator(); // while(iter.hasNext()) { // Object o = iter.next(); // System.out.println(o); // } // 2.for循環遍歷List和Set // for(Object o:set) { // System.out.println(o); // } Map map = new HashMap(); map.put(1, "A"); map.put(null, "Z"); // map.keySet()返回key的Set集合 // Set set1 = map.keySet(); // 1.迭代器遍歷Map // Iterator iter = set1.iterator(); // while(iter.hasNext()) { // Object key = iter.next(); // System.out.println(map.get(key)); // } // 2.for循環遍歷Map // for(Object key:set1) { // System.out.println(key+" "+map.get(key)); // } // 3.利用Entry遍歷Map--最常用的 // 返回entry集合 // Set set1 = map.entrySet(); // for(Object o:set1) { // Entry entry = (Entry)o; // System.out.println(entry.getKey()+" "+entry.getValue()); // } // for(Object o:map.entrySet()) { // Entry entry = (Entry)o; // System.out.println(entry.getKey()+" "+entry.getValue()); // } } } ~~~ *** ### Collections類 **面試題:Collections與Collection的區別?** Collections類是類似于Arrays類的公用工具類 ,它提供了一些static方法供集合類使用或操作集合類 。 Collection是線性集合的父接口 *** ### 泛型(類型參數化) 控制集合元素類型 ~~~ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class FanXingDemo1 { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("123"); list.add("456"); list.add("789"); list.add("10JQ"); // for(String str:list) { // System.out.println(str); // } Set<Person> set = new HashSet<Person>(); set.add(new Person(12,"zhagnsan1")); set.add(new Person(14,"zhagnsan2")); // set.add(new FanXingDemo1()); Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "hello1"); map.put(2, "hello2"); for(Entry<Integer, String> entry:map.entrySet()) { System.out.println(entry.getKey()+" "+entry.getValue()); } } } ~~~ *** ### Map與Collection接口特殊應用 Map當中有List(Set) ~~~ public class ListInMapDemo1 { public static void main(String[] args) { Map<String, List<String>> map = new HashMap<String, List<String>>(); List<String> list1 = new ArrayList<String>(); list1.add("張三1"); list1.add("李四2"); list1.add("王五3"); map.put("JAVA1班", list1); // System.out.println(map.get("JAVA1班")); List<String> list2 = new ArrayList<String>(); list2.add("張三4"); list2.add("李四5"); list2.add("王五6"); map.put("JAVA2班", list2); // System.out.println(map.get("JAVA2班")); List<String> list3 = new ArrayList<String>(); list3.add("張三7"); list3.add("李四8"); list3.add("王五9"); map.put("JAVA3班", list3); // System.out.println(map.get("JAVA3班")); // 遍歷 for(Entry<String, List<String>> entry:map.entrySet()) { System.out.println(entry.getKey()); List<String> list = entry.getValue(); for(String value:list) { System.out.print(value+" "); } System.out.println(); } } } ~~~ List當中有Map ~~~ public class MapInListDemo1 { public static void main(String[] args) { // List中存放Map List<Map<Integer,String>> list = new ArrayList<Map<Integer,String>>(); Map<Integer,String> map1 = new HashMap<Integer,String>(); map1.put(1,"hello1"); map1.put(2,"hello2"); Map<Integer,String> map2 = new HashMap<Integer,String>(); map2.put(1,"hello3"); map2.put(2,"hello4"); Map<Integer,String> map3 = new HashMap<Integer,String>(); map3.put(1,"hello5"); map3.put(2,"hello6"); list.add(map1); list.add(map2); list.add(map3); // System.out.println(list); // 遍歷 for(Map<Integer,String> map:list) { for(Entry<Integer,String> entry:map.entrySet()) { System.out.println(entry.getKey()+" "+entry.getValue()); } } } } ~~~ *** ### 泛型的其他應用 ~~~ public class Point<E,T> { E x; T y; public static void main(String[] args) { Point<Double,Integer> p = new Point<Double,Integer>(); } } ~~~ *** ### 集合練習題--世界杯 利用Map完成如下功能: 從命令行讀入一個字符串,表示一個年份,輸出該年的世界杯冠軍是哪支球隊。如果該年沒有舉辦世界杯,則輸出:沒有舉辦世界杯。 歷屆世界杯冠軍 屆數 舉辦年份 舉辦地點 冠軍 第一屆 1930年 烏拉圭 烏拉圭 第二屆 1934年 意大利 意大利 第三屆 1938年 法國 意大利 第四屆 1950年 巴西 烏拉圭 第五屆 1954年 瑞士 西德 第六屆 1958年 瑞典 巴西 第七屆 1962年 智利 巴西 第八屆 1966年 英格蘭 英格蘭 第九屆 1970年 墨西哥 巴西 第十屆 1974年 前西德 西德 第十一屆 1978年 阿根廷 阿根廷 第十二屆 1982年 西班牙 意大利 第十三屆 1986年 墨西哥 阿根廷 第十四屆 1990年 意大利 西德 第十五屆 1994年 美國 巴西 第十六屆 1998年 法國 法國 第十七屆 2002年 韓日 巴西 第十八屆 2006年 德國 意大利 第十九屆 2010年 南非 西班牙 第二十屆 2014年 巴西 德國 第二十一屆 2018年 俄羅斯 法國 (Map)在原有世界杯Map 的基礎上,增加如下功能: 讀入一支球隊的名字,輸出該球隊奪冠的年份列表。 例如,讀入“巴西”,應當輸出 1958 1962 1970 1994 2002 讀入“荷蘭”,應當輸出 沒有獲得過世界杯 ![](https://box.kancloud.cn/1cba2c96dd7ee24d2f57d48d4594277f_158x216.png) ![](https://box.kancloud.cn/22bfee403498f655313f45648e3ae089_163x128.png) *** ### 集合練習題--奧運會分組 已知有十六支男子足球隊參加2008 北京奧運會。寫一個程序,把這16 支球隊隨機分為4 個組。采用List集合和隨機數 2008 北京奧運會男足參賽國家: 科特迪瓦,阿根廷,澳大利亞,塞爾維亞,荷蘭,尼日利亞,日本,美國,中國,新西蘭,巴西,比利時,韓國,喀麥隆,洪都拉斯,意大利 提示:分配一個,刪除一個 ![](https://box.kancloud.cn/e8d0f4adfca206e029023f320674cf49_201x153.png) ~~~ package com.neuedu.daka; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class Olympic { public static void main(String[] args) { String str = "科特迪瓦,阿根廷,澳大利亞,塞爾維亞,荷蘭,尼日利亞,日本,美國,中國,新西蘭,巴西,比利時,韓國,喀麥隆,洪都拉斯,意大利"; String cStr[] = str.split(","); List<String> country = new ArrayList<>(); for(String s : cStr) { country.add(s); } Map<String, List<String>> map = new HashMap<>(); for(int i = 0;i < 4;i++) { List<String> gc = new ArrayList<>(); for(int j = 0;j < 4;j++) { int random = (int)(Math.random()*country.size()); gc.add(country.get(random)); country.remove(random); } map.put("第"+(i+1)+"組", gc); } for(Entry<String, List<String>> entry:map.entrySet()) { System.out.println(entry.getKey()); for(String con:entry.getValue()) { System.out.println(con); } System.out.println("---------------------"); } } } ~~~ *** ### 集合練習題--員工打卡 Employee.java ~~~ public class Employee { private int empno; private String name; public Employee() { } public Employee(int empno, String name) { super(); this.empno = empno; this.name = name; } public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ~~~ Company.java ~~~ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Company { // 打卡記錄名單 private Map<String,List<DaKaInfo>> map = new HashMap<String,List<DaKaInfo>>(); // 員工集合--名單 private List<Employee> list = new ArrayList<Employee>(); public List<Employee> getList(){ return list; } public Map<String,List<DaKaInfo>> getMap(){ return map; } /** * 添加員工 * @param e 員工對象 */ public void addEmployee(Employee e) { // 查詢員工工號是否被占用 for(Employee emp:list) { if(emp.getEmpno() == e.getEmpno()) { System.out.println("員工工號已經占用"); return; } } if(list != null) { list.add(e); System.out.println("員工添加成功"); } } /** * 根據empno查找員工 * @param empno 員工工號 * @return 找到的員工對象 */ public Employee findEmployee(int empno) { if(list != null && !list.isEmpty()) { for(Employee emp:list) { if(emp.getEmpno() == empno) { return emp; } } } return null; } /** * 根據empno刪除員工 * @param empno 員工工號 */ public void deleteEmployee(int empno) { if(list != null && !list.isEmpty()) { for(Employee emp:list) { if(emp.getEmpno() == empno) { list.remove(emp); System.out.println("員工刪除成功..."); return; } } System.out.println("查無此人"); } } /** * 顯示所有員工信息 */ public void showInfo() { if(list != null && !list.isEmpty()) { for(Employee emp:list) { System.out.println("員工工號:"+emp.getEmpno()+",員工姓名: "+emp.getName()); } } } } ~~~ DaKaInfo.java ~~~ public class DaKaInfo { private int empno;// 工號 private Date startTime;// 簽到時間 private Date endTime;// 簽退時間 public DaKaInfo() { } public DaKaInfo(int empno, Date startTime, Date endTime) { super(); this.empno = empno; this.startTime = startTime; this.endTime = endTime; } public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public Date getStartTime() { return startTime; } public void setStartTime(Date startTime) { this.startTime = startTime; } public Date getEndTime() { return endTime; } public void setEndTime(Date endTime) { this.endTime = endTime; } } ~~~ Main.java ~~~ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map.Entry; import java.util.Scanner; public class Main { public static Company company = new Company(); // 簽到 public static void start(int empno) { // 1.判斷是否有這個人,調用company的findEmployee Employee e = company.findEmployee(empno); if(e != null) { // 2.判斷是否打過卡 // 2.1判斷是不是第一個打卡的人--查看Map中是否有當天key值 Date date = new Date(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss"); String strDate = sdf1.format(date); // 判斷map中是否有strDate,從而判斷出是否是以一個打卡的人 if(company.getMap().containsKey(strDate)) { // 不是第一個打卡 List<DaKaInfo> list = company.getMap().get(strDate); // 查看是否打過卡 if(list != null && !list.isEmpty()) { for(DaKaInfo dk1:list) { if(dk1.getEmpno() == empno) { System.out.println("您今天 "+sdf2.format(dk1.getStartTime())+" 已經打過卡"); return; } } } // 沒有打過卡直接存打卡信息 DaKaInfo dk = new DaKaInfo(); dk.setEmpno(empno); dk.setStartTime(date); list.add(dk); }else { // 是第一個打卡 List<DaKaInfo> list = new ArrayList<DaKaInfo>(); // 存打卡信息 DaKaInfo dk = new DaKaInfo(); dk.setEmpno(empno); dk.setStartTime(date); // 將打卡記錄存入list list.add(dk); // 將key值和list存入map company.getMap().put(strDate, list); } System.out.println(empno+"號員工打卡成功"); }else { System.out.println("查無此人"); } } // 簽退 public static void end(int empno) { Employee e = company.findEmployee(empno); if(e != null) { Date date = new Date(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); String strDate = sdf1.format(date); if(company.getMap().containsKey(strDate)) { List<DaKaInfo> list = company.getMap().get(strDate); if(list != null && !list.isEmpty()) { for(DaKaInfo dk1:list) { if(dk1.getEmpno() == empno) { dk1.setEndTime(date); System.out.println("簽退成功"); return; } } System.out.println(empno+"工號員工今天還沒有簽到"); } }else { System.out.println(strDate+"暫無打卡記錄"); } }else { System.out.println("查無此人"); } } // 查詢 public static void showDaKaInfo() { System.out.println("打卡信息如下:"); SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss"); for(Entry<String, List<DaKaInfo>> entry:company.getMap().entrySet()) { System.out.println(entry.getKey()+"打卡記錄如下:"); for(DaKaInfo dk:entry.getValue()) { System.out.println("工號:"+dk.getEmpno()+",簽到時間:"+sdf2.format(dk.getStartTime())+",簽退" + "時間:"+(dk.getEndTime()==null?"暫未簽退":sdf2.format(dk.getEndTime()))); } } } public static void main(String[] args) { company.addEmployee(new Employee(1001, "小明")); company.addEmployee(new Employee(1002, "小紅")); company.addEmployee(new Employee(1003, "小虎")); company.addEmployee(new Employee(1004, "小蘭")); company.addEmployee(new Employee(1005, "小剛")); while(true) { System.out.println("歡迎使用Java5班打卡系統"); System.out.println("=================="); System.out.println("員工打卡-----------1"); System.out.println("員工簽退-----------2"); System.out.println("查詢所有打卡記錄-----3"); System.out.println("Exit-------------4"); Scanner scan = new Scanner(System.in); try { int option = scan.nextInt(); if(option < 1 || option > 4) { System.out.println("無效選項"); continue; }else { switch(option) { case 1: // 打卡 System.out.println("請輸入工號:"); int empno1 = scan.nextInt(); start(empno1); break; case 2: // 簽退 System.out.println("請輸入工號:"); int empno2 = scan.nextInt(); end(empno2); break; case 3: // 查詢 showDaKaInfo(); break; case 4: System.out.println("謝謝,再見!"); return; } } } catch (Exception e) { System.out.println("請輸入數字"); } } } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看