集合練習——List部分

来源:http://www.cnblogs.com/letben/archive/2016/02/05/5182947.html
-Advertisement-
Play Games

利用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_


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java Magic. Part 1: java.net.URL @(Base)[JDK, url, magic, 黑魔法] " 英文原文 " 廢話不多說,首先我們看如下代碼: 代碼的第3行和第5行分別會輸出什麼呢? 當然不會是true, 如果是true的話,這篇文章也就不會有java黑魔法的尾碼了
  • 一.通配符上限和通配符下限接受的類型 通配符上限:<? extends T> 通配符下限:<? super T> 以下代碼是測試結果,註釋為解釋說明 1 package xayd.hjj; 2 3 import java.util.ArrayList; 4 import java.util.List
  • 我們知道list存儲的是有序不唯一的元素。 set存儲的是無序唯一的元素。 那麼下麵看一個例子吧: package CollectionPart; import java.util.HashSet; import java.util.Set; public class HashSet1 { publ
  • Python可以說是爬網的利器,本文主要介紹了一些python來模擬http請求的一些方法和技巧。 Python處理請求的類庫有兩個,urllib,urllib2。 這兩個類庫並不是一個類庫的兩個不同版本,urllib主要用來處理一些url相關的內容,發送請求的時候,請求對象只能是一個url。url
  • 說明:在閱讀本篇之前,需要知道怎麼判斷對象的存活與否,見《第三章 JVM記憶體回收區域+對象存活的判斷+引用類型+垃圾回收線程》 註意:本文主要參考自《分散式Java應用:基礎與實踐》,與《深入理解Java虛擬機(第二版)》中的一些說法有一些不同,但是原理一致 1、三種垃圾回收演算法 標記-清除(年老代
  • 在C++中的輸出的有關設置包含在頭文件“iomanip”中,首先看看裡面包含的一些函數: 為了實現保留小數點後N位,並以四捨五入的方式輸出,需要用到setprecision和fixed。 //eg:求半徑為r的圓的面積 ;輸出:保留小數點後七位,四捨五入輸出 #include"iostream" #
  • 註意:本文主要參考自《深入理解Java虛擬機(第二版)》 說明:查看本文之前,推薦先知道JVM記憶體結構,見《第一章 JVM記憶體結構》 1、記憶體回收的區域 堆:這是GC的主要區域 方法區:回收兩樣東西 無用的類 廢棄的常量 棧和PC寄存器是線程私有區域,不發生GC 2、怎樣判斷對象是否存活 垃圾回收:
  • 靜態方法是屬於類的,記憶體必須為它分配記憶體空間,這個空間一直由靜態方法占用,記憶體管理器不會由於靜態方法沒有被調用而將靜態方法的存儲空間收回,這樣如果將所有的方法都聲明為靜態方法,就會占用大量的記憶體空間,最後是系統變慢。而普通的成員方法是由對象調用的,記憶體並不會一直為起分配記憶體,只有調用的時候才為其分配
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...