利用ArrayList 1、存儲多個員工信息,包括工號,姓名,年齡,入職時間,逐條列印所有員工姓名,並輸出員工個數。 package CollectionPart; import java.util.ArrayList; import java.util.List; public class Arr
利用ArrayList
1、存儲多個員工信息,包括工號,姓名,年齡,入職時間,逐條列印所有員工姓名,並輸出員工個數。
package CollectionPart; import java.util.ArrayList; import java.util.List; public class ArrayListPractise_1 { public static void main(String[] args) { Employee_1 e1 = new Employee_1("dept1_001", "lifei", 24, "2016-03-28"); Employee_1 e2 = new Employee_1("dept1_002", "li2fe", 23, "2015-01-22"); Employee_1 e3 = new Employee_1("dept1_003", "lifei3", 28, "2016-02-05"); Employee_1 e4 = new Employee_1("dept2_001", "lif4i", 25, "2017-03-28"); List<Employee_1> myList1 = new ArrayList(); myList1.add(e1); myList1.add(e2); myList1.add(e3); myList1.add(e4); for (Employee_1 employee_1 : myList1) { System.out.println(employee_1.getEmployeeName()); } System.out.println("員工總個數為:"+myList1.size()); } }
package CollectionPart; public class Employee_1 { private String employeeId; private String employeeName; private int employeeAge; private String employeeHireDate; /* 這裡就存儲成String 類型,在 資料庫裡面設置成 date格式。 然後 利用Date today = new Date(); SimpleDateFormat fm = new SimpleDateFormat("YYYY-MM-dd"); 來做 */ public String getEmployeeId() { return employeeId; } public void setEmployeeId(String employeeId) { this.employeeId = employeeId; } public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName = employeeName; } public int getEmployeeAge() { return employeeAge; } public void setEmployeeAge(int employeeAge) { this.employeeAge = employeeAge; } public String getEmployeeHireDate() { return employeeHireDate; } public void setEmployeeHireDate(String employeeHireDate) { this.employeeHireDate = employeeHireDate; } @Override public String toString() { return "Employee_1 [employeeId=" + employeeId + ", employeeName=" + employeeName + ", employeeAge=" + employeeAge + ", employeeHireDate=" + employeeHireDate + "]"; } public Employee_1(String employeeId, String employeeName, int employeeAge, String employeeHireDate) { super(); this.employeeId = employeeId; this.employeeName = employeeName; this.employeeAge = employeeAge; this.employeeHireDate = employeeHireDate; } public Employee_1() { super(); } }
練習2:
當有員工入職時添加,員工信息,當有員工離職時,刪除該信息。
示例代碼:【有bug,在 輸入日期的時候,沒等到輸入日期,就直接詢問是否還有入職的同志】
下麵算是 為 解決 ConcurrentModificationException 提出了一個 方案。就是 得到 當前元素的 下標然後再刪除。下麵的代碼沒有怎麼寫註釋,如果有問題的話歡迎討論。
package CollectionPart; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class ArrayListPractise_2 { public static void main(String[] args) { ArrayListPractise_2 ap2 = new ArrayListPractise_2(); List<Employee_1> myList = new ArrayList(); System.out.println("是否有員工入職?"); Scanner in = new Scanner(System.in); String string = in.nextLine(); while(string.equals("是")){ System.out.println("請輸入員工的編號"); String id = in.nextLine(); System.out.println("請輸入員工的姓名"); String name = in.nextLine(); System.out.println("請輸入員工的年齡"); int age = in.nextInt(); System.out.println("請輸入員工的入職時間"); String hireDate = in.nextLine(); System.out.println("?"); Employee_1 e1 = new Employee_1(id, name, age, hireDate); myList.add(e1); System.out.println("是否還有新員工入職?"); string = in.nextLine(); } System.out.println("共有員工:"+myList.size()+"人"); List<Employee_1> newList =null; System.out.println("是否有員工離職?"); string = in.nextLine(); while(string.equals("是")){ System.out.println("該員工的姓名是"); String name = in.nextLine(); newList = ap2.deleteFromTheList(myList,name); System.out.println("是否還有員工離職?"); string = in.nextLine(); } for (Employee_1 employee_1 : newList) { System.out.println("員工人數為:"+newList.size()); } } private List<Employee_1> deleteFromTheList(List<Employee_1> myList, String name) { int index = 0; boolean hasTheElement = false; for(int i = 0; i<myList.size();i++){ if(myList.get(i).getEmployeeName().equals(name)){ index = i; hasTheElement = true; } } if(!hasTheElement){ System.out.println("不存在此元素"); }else{ myList.remove(index); } return myList; } }
ArrayList 和 LinkedList 分別在什麼時候使用?
ArrayList,在遍歷元素和隨機訪問元素時效率會比較高,在插入刪除操作情況下效率會比較低
LinkedList,在插入和刪除時效率會比較高,但是在 查找時效率會比較低
與一個 很相像的比較 Vector。
兩者 擁有的方法是一樣的。就是一個鏡像一樣的存在。唯一區別在於同非同步。
Vector是線程安全的,也就是說,在多線程操作的時候他仍然是可靠地,當A個線程對其進行操作的時候,其他任何線程不允許訪問,當A線程完成訪問以後,其他線程獲得訪問該集合的許可權。而對於ArrayList來說,他是線程不安全的,就是 線上程A在訪問ArrayList的時候,別的線程也可以訪問的,這樣就會不安全。
那麼為什麼不安全的反而應用更廣,因為多個線程可以訪問,那麼執行效率就高,訪問速度就快,所以 在效率上ArrayList扳回一城,在兩者的取捨過程中,大家傾向於效率,所以 ArrayList更加火爆。
同樣的 既然牽扯到了這個 問題 那就 連帶說一下 Stringbuffer 和 StringBuilder
兩者 也是鏡像般存在的。
StringBuffer 是線程安全的。StringBuilder 是不安全的。
但是 在使用上,我們利用StringBuffer更多一些。猜想,因為 非同步的關係,我們希望得到更加靠譜的字元串。如果考慮到正確性的問題還是需要為stringBuilder加上同步鎖。所以就乾脆直接使用StringBuffer了。
此處為引用:
這個 參考 百度知道的一個文獻吧:
1. 在執行速度方面的比較:StringBuilder > StringBuffer
2. StringBuffer與StringBuilder,他們是字元串變數,是可改變的對象,每當我們用它們對字元串做操作時,實際上是在一個對象上操作的,不像String一樣創建一些對象進行操作,所以速度就快了。
3. StringBuilder:線程非安全的
StringBuffer:線程安全的
當我們在字元串緩衝去被多個線程使用是,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當然大多數情況下就是我們是在單線程下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。
對於三者使用的總結:1.如果要操作少量的數據用 = String
2.單線程操作字元串緩衝區 下操作大量數據 = StringBuilder
3.多線程操作字元串緩衝區 下操作大量數據 = StringBuffer
引用結束。
附網址鏈接:http://zhidao.baidu.com/link?url=NdcmurUXZeD30zVPk5o---5Gj0WmSR-9whPpal4Ln_mWC6E1gIq41Ndk3N7QI3APLGOabr7QNNh_T6fGYypHM_