1. 程式人生 > >Java(十二)--List的新增,修改,刪除

Java(十二)--List的新增,修改,刪除

首先我們先建立課程類

/*
 * 課程類
 */
public class Course {
    public String id;
    public String name;

    Course(){
    }

    Course(String newID,String newName){
        id=newID;
        name=newName;
    }
}

接著建立ListTest類(含main方法)用來測試。
List相當於C++中的容器List,ListTest(以下簡稱LT)類中的屬性與建構函式

/*
 *ArrayList是 動態陣列,List的子介面,需要引入java.util.ArrayList
 */
public List coursesToSelect; ListTest(){ coursesToSelect=new ArrayList(); }

ArrayList的一個方法是add(Object obj),將物件新增都尾部
add的另一個過載的方法是add(int index,Object obj),將物件新增到index位置,如果超出了陣列的範圍,會丟擲異常。如果index位置已經有了,那麼按順序將原有的依次擠下去。程式碼如下

public void testAdd(){
        //建立一個課程物件,並通過add方法新增List中
        Course cr1=new Course("1"
,"資料結構"); coursesToSelect.add(cr1); Course temp=(Course)coursesToSelect.get(0); System.out.println("添加了課程:"+temp.id+":"+temp.name); Course cr2=new Course("2","C"); coursesToSelect.add(0,cr2);//資料結構移到1位置 Course temp1=(Course)coursesToSelect.get(0); System.out
.println("添加了課程:"+temp1.id+":"+temp1.name); }

程式碼中用到了ArrayList中的另一個方法get(int index),該方法可以取出index位置的元素,但是返回的是Object型別的,所以需要強制型別轉換

ArrayList還支援整個陣列插進去。通過方法boolean addAll(Collection

Course[] course={new Course("3","離散數學"),new Course("4","組合語言")};
        coursesToSelect.addAll(Arrays.asList(course));
        Course temp2=(Course)coursesToSelect.get(3);
        Course temp3=(Course)coursesToSelect.get(4);
        System.out.println("添加了課程:"+temp2.id+":"+temp2.name
                +":"+temp3.id+":"+temp3.name);

        Course[] course2={new Course("5","高等數學"),new Course("6","大學英語")};
        coursesToSelect.addAll(2,Arrays.asList(course2));
        Course temp4=(Course)coursesToSelect.get(2);
        Course temp5=(Course)coursesToSelect.get(3);
        System.out.println("添加了課程:"+temp4.id+":"+temp4.name
                +":"+temp5.id+":"+temp5.name);

當傳陣列給addAll時要先用Arrays中的asList方法,將陣列轉換成List。

List的修改
通過方法E set(int index, E element)來修改,新增方法

    /*
     * 修改list
     */
    public void testModify(){
        coursesToSelect.set(4, new Course("7","毛概"));

}

刪除
使用remove和removeAll方法

/*
 * 刪除list
 */
    public void testRemove(){
        //Course cr=(Course)coursesToSelect.get(4);
        //System.out.println("我是課程"+cr.name+"我即將被刪除");
        //coursesToSelect.remove(4);
        Course[] course={(Course)coursesToSelect.get(4),(Course)coursesToSelect.get(5),(Course)coursesToSelect.get(6)};
        coursesToSelect.removeAll(Arrays.asList(course));
        System.out.println("成功刪除");
    }

如果用往add方法中傳進奇怪的東西比如字串則會丟擲異常,但程式仍然可以執行,這時我們要使用泛型程式設計,使用帶泛型會在編譯期間就進行型別檢查,如果型別不對則無法通過編譯,報錯。新建一個類testGeneric,但要注意泛型不能使用基本型別,可以新增泛型子型別的物件的例項。比如我們新建Course的子類ChildCourse,無需任何東西。

import java.util.*;

public class testGeneric {

    /*
     * 帶有泛型的courses
     */
    public List<Course>courses;

    public testGeneric(){
        courses=new ArrayList<Course>();
    }

    /*
     * 測試新增
     */
    public void testAdd(){
        Course cr1=new Course("1","大學語文");
        courses.add(cr1);
        //帶泛型會在編譯期間進行型別檢查
        //courses.add("afnaf");
        Course cr2=new Course("2","Java基礎");
        courses.add(cr2);
    }

    public void testForEach(){
        for(Course obj: courses){//不需要型別轉換,因為泛型是Course
            Course cr=obj;
            System.out.println("課程"+cr.id+":"+cr.name);
        }
    }

    /*
     * 泛型結合可以新增泛型的子型別的物件例項
     */
    public void testChild(){
        ChildCourse ccr=new ChildCourse();
        ccr.id="3";
        ccr.name="我是子型別的例項";
        courses.add(ccr);
    }

    /*
     * 泛型不能使用基本型別
     */
    public void testPrimitive(){
        List<Integer> list=new ArrayList<Integer>();
        list.add(1);
        System.out.println("基本型別必須使用包裝類"+list.get(0));
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        testGeneric tg=new testGeneric();
        tg.testPrimitive();
        tg.testAdd();
        tg.testChild();
        tg.testForEach();
    }
}

相關推薦

Java--List新增修改刪除

首先我們先建立課程類 /* * 課程類 */ public class Course { public String id; public String name; Course(){ } Course(St

工作那些事談談碼農與農民工區別和發展之路 工作那些事如果哪一天沒有了電腦 工作那些事十三再次失業

工作那些事系列連結快速通道,不斷更新中: 工作那些事(一)今年工作不好找 工作那些事(二)應聘時填寫個人資訊ABCD 工作那些事(三)什麼樣的公司能吸引你,什麼樣的公司適合你? 工作那些事(四)大公司VS小公司 工作那些事(五)談談專案資料整理和積累 工作那些事(六)談談

Java--建立視窗新增按鈕接受事件

建立視窗的話需要引入javax.swing.*,使用了裡面的JFrame,如下 public static void main(String[] args){ JFrame frame=new JFrame("Hello World");//括號中為視

Java多線程和並發Java線程池

span 線程 狀態 線程池大小 使用 executor java多線 png 技術 目錄 1.利用Executors創建線程的五種不同方式 2.為什麽要使用線程池 3.Executor的框架 4.J.U.C的三個Executor接口 5.ThreadPoolExecuto

selenium測試Java--多表單切換

generate ati nqa void char support 編寫 generated key 采用下面的例子來編寫用例 <!DOCTYPE html> <html> <head> <meta http-equiv="co

Java數據結構和算法——2-3-4樹

oid 樹的高度 n+1 tno != val post 節點數據 isp   通過前面的介紹,我們知道在二叉樹中,每個節點只有一個數據項,最多有兩個子節點。如果允許每個節點可以有更多的數據項和更多的子節點,就是多叉樹。本篇博客我們將介紹的——2-3

Java學習

sre sub utl 子接口 字符 匹配條件 流操作 數組array collect /**************************************************************/ /*在線程中更新圖形化界面,需要調用SwingUtilt

深入理解java虛擬機 Java 語法糖背後的真相

它的 blog 需要 原來 ont 影響 else 階段 board 語法糖(Syntactic Sugar),也叫糖衣語法,是英國計算機科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語。指的是,在計算機語言中添加某種語法,這些語法糖雖然不會對語言的功

JAVA基礎學習之路鏈表

args 是否為空 鏈表 == lin 一個 ava int 數據類型 定義鏈表的基本結構: class Link {//外部類 //內部類,只為鏈表類服務 private class Node {//定義節點類 private

數據結構Java版之深度優先-圖

pac show 下標 增加 ava style AD amp mat 這裏用深度優先遍歷存在矩陣裏面的圖。   深度優先利用的是棧的FIFO特性。為此遍歷到底後,可以找到最相鄰的節點繼續遍歷。實現深度優先,還需要在節點加上一個訪問標識,來確定該節點是否已經被訪問過了。 源

java基礎學習總結:深入理解java內部類

內部類 內部類也是語法糖,是因為它僅僅是一個編譯時的概念,outer.java裡面定義了一個內部類inner,一旦編譯成功,就會生成兩個完全不同的.class檔案了,分別是outer.class和outer$inner.class。所以內部類的名字完全可以和它的外部類名字相同。 內部類分為四

Java開發筆記布林變數論道與或非

在程式語言的設計之初,它們除了可以進行數學計算,還常常用於邏輯推理和條件判斷。為了實現邏輯判斷的功能,Java引入了一種布林型別boolean,用來表示“真”和“假”。該型別的變數只允許兩個取值,即true和false,其中true對應真值,而false對應假值。 如同數值變數擁有加減乘

Java自學筆記

幾個關鍵字(final/static) final:可以用來修飾類,類的成員,以及區域性變數 注意:final修飾的類不能被繼承,但可以繼承其他類,俗稱“太監類”?           final修飾的方法不可

劍指offer系列最小的k個數 連續子陣列的最大和整數中1出現的個數

最小的k個數 題目描述 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。 解題思路: 思路1,這一題應用堆排序演算法複雜度只有O(nlog k),堆是完全二叉樹的一種,最大堆就是最上面的數是最大的,該方法基於二

python學習之網站的編寫HTMLCSSJS----------CSS邊框的編寫

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>逆水行舟不進則退</title> </head> <b

機器學習與深度學習系列連載: 第二部分 深度學習卷積神經網路 3 經典的模型LeNet-5AlexNet VGGNetGoogLeNetResNet

卷積神經網路 3 經典的模型 經典的卷積神經網路模型是我們學習CNN的利器,不光是學習原理、架構、而且經典模型的超引數、引數,都是我們做遷移學習最好的源材料之一。 1. LeNet-5 [LeCun et al., 1998] 我們還是從CNN之父,LeCun大神在98年提出的模

Java併發:CAS Unsafe Atomic 說一說Java的Unsafe類 說一說Java的Unsafe類 Java中Unsafe類詳解 Unsafe與CAS

一、Unsafe Java無法直接訪問底層作業系統,而是通過本地(native)方法來訪問。不過儘管如此,JVM還是開了一個後門,JDK中有一個類Unsafe,它提供了硬體級別的原子操作。 這個類儘管裡面的方法都是public的,但是並沒有辦法使用它們,JDK API文件也沒有提供任何關於這個類的方法的解

Java NIO系列教程 Java NIO 與 IO

Java NIO系列教程(十二) Java NIO 與 IO 當學習了 Java NIO 和 IO 的 API 後,一個問題馬上湧入腦海: 我應該何時使用 IO,何時使用 NIO 呢?在本文中,我會盡量清晰地解析 Java NIO 和 IO 的差異、它們的使用場景,以及它們如何影響您的程式碼設計。 下表

分支管理~Bug分支feature分支。git stash; 強刪git branch -D <name>

                                          &nb

java基礎抽象類(Abstract class)和介面(interface)

抽象類(Abstract class): 抽象類概述: 抽象類是對根源的抽象(即對本質的抽象與其他類的本質不同)。 抽象類表示的是這個東西是什麼。比如男人女人,,他們的抽象類就是人,所以繼承也只能繼承一個類(抽象類)(是人那就是人,不能是別的生物) 且如果有抽象的功能(吃,睡…),該