欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java ArrayList與Vector和LinkedList的使用及源碼分析

 更新時(shí)間:2022年11月25日 08:50:51   作者:芝麻干  
ArrayList、Vector、LinkedList類均在java.util包中,均為可伸縮數(shù)組,即可以動(dòng)態(tài)改變長(zhǎng)度的數(shù)組。ArrayList 和 Vector都是基于存儲(chǔ)元素的Object[] array來(lái)實(shí)現(xiàn)的,它們會(huì)在內(nèi)存中開(kāi)辟一塊連續(xù)的內(nèi)存來(lái)存儲(chǔ)

ArrayList是List接口實(shí)現(xiàn)類中的其中一個(gè)(重點(diǎn)):

  • 數(shù)組結(jié)構(gòu)實(shí)現(xiàn),查詢快,增刪慢
  • jdk1.2版本,運(yùn)行效率快、線程不安全。

ArrayList的使用:和之前使用的類似。

直接看代碼:

主類:

package com.collections.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
public class Demo02 {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        Student s1 = new Student("aaa",18);
        Student s2 = new Student("bbb",19);
        Student s3 = new Student("ccc",20);
//        添加
        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        System.out.println("元素個(gè)數(shù):"+arrayList.size());
        System.out.println(arrayList.toString());
//        刪除
//        arrayList.remove(s1);
//        重寫equal方法,使equal方法比較的是屬性后,可以進(jìn)行如下刪除
        arrayList.remove(new Student("aaa",18));
        System.out.println("刪除后:"+arrayList.size());
        System.out.println(arrayList.toString());
//        遍歷
//        使用迭代器
        System.out.println("----------使用迭代器--------------");
        Iterator it = arrayList.iterator();
        while (it.hasNext()){
            Student s = (Student) it.next();
            System.out.println(s);
        }
        System.out.println("----------列表迭代器正序--------------");
//        列表迭代器
        ListIterator listIterator = arrayList.listIterator();
        while (listIterator.hasNext()){
            Student s = (Student) listIterator.next();
            System.out.println(s);
        }
        System.out.println("----------列表迭代器逆序--------------");
        while (listIterator.hasPrevious()){
            Student s = (Student) listIterator.previous();
            System.out.println(s);
        }
    }
}

Student類:重寫了equal方法,使比較方法變?yōu)閷傩灾g的比較。

package com.collections.test;
import java.util.Objects;
public class Student {
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    @Override
    public boolean equals(Object obj) {
//        1.判斷是不是同一類型
        if(this==obj){
            return true;
        }
        if(obj==null){
            return false;
        }
//        3.判斷是否是Student類型
        if(obj instanceof Student){
//            強(qiáng)制類型轉(zhuǎn)換
            Student s = (Student)obj;
            if(s.age == this.age && s.name == this.name){
                return true;
            }
        }
        return false;
    }
}

刪除和添加可以直接輸入屬性添加了。

運(yùn)行結(jié)果:

ArrayList源碼分析:

1.進(jìn)入ArrayList源碼中,先記住幾個(gè)變量。

往下還有個(gè)size,表示元素個(gè)數(shù)。

重點(diǎn)記住三個(gè):

默認(rèn)容量DEFAULT_CAPACITY = 10、存放元素的數(shù)組:elemtData 和 實(shí)際元素個(gè)數(shù)size()

往下翻:

因?yàn)槲覀円玫氖菬o(wú)參構(gòu)造方法,有參就跳過(guò),直接看無(wú)參的。

也就是說(shuō),當(dāng)沒(méi)有向集合中添加任何元素時(shí),集合容量為0

當(dāng)我們添加元素時(shí),也就是add()方法,會(huì)是什么情況?進(jìn)入到add源碼中查看。

我們?cè)龠M(jìn)入到這方法中來(lái)看:

也就是說(shuō),當(dāng)向集合中添加了1個(gè)元素時(shí),集合容量就變?yōu)?0。

如果添加了超過(guò)10個(gè)元素,會(huì)進(jìn)行擴(kuò)容,還是和上述方法一樣,一步一步看下來(lái),會(huì)發(fā)現(xiàn):

當(dāng)輸入第11個(gè)元素時(shí),容量最后會(huì)變成15,也就是說(shuō),每次擴(kuò)容會(huì)是原來(lái)的1.5倍。 其實(shí)就是上述第11步的右移一位,相當(dāng)于加上了原來(lái)值的二分之一,也就是1.5倍。

總結(jié)一下:

如果集合中沒(méi)有元素時(shí),容量為0,如果添加了一個(gè)元素,集合會(huì)是默認(rèn)容量10,如果超出容量大小,會(huì)進(jìn)行擴(kuò)容,每次容量時(shí)原來(lái)的1.5倍。

源碼查看:ctrl+鼠標(biāo)左鍵。

Vector的使用:

直接看代碼:

package com.collections;
import java.util.Enumeration;
import java.util.Vector;
//Vector集合的使用
//存儲(chǔ)方式:數(shù)組
public class Demo04 {
    public static void main(String[] args) {
        Vector vector = new Vector();
//        添加
        vector.add("蘋果");
        vector.add("梨子");
        vector.add("西瓜");
        System.out.println("元素個(gè)數(shù)為:"+vector.size());
//        枚舉器遍歷
        Enumeration elements = vector.elements();
        while (elements.hasMoreElements()){
            String s = (String) elements.nextElement();
            System.out.println(s);
        }
        System.out.println("-----------------------------------");
//        其他方法firstElement 第一個(gè)元素 lastElement最后一個(gè)元素 elementAt()位置遍歷
        System.out.println(vector.firstElement());
        System.out.println(vector.lastElement());
        System.out.println(vector.elementAt(2));
    }
}

LinkedList的使用:

package com.collections.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
//LinkList的使用
public class Demo03 {
    public static void main(String[] args) {
        LinkedList linkedList = new LinkedList();
        Student s1 = new Student("aaa",18);
        Student s2 = new Student("bbb",19);
        Student s3 = new Student("ccc",20);
//        添加
        linkedList.add(s1);
        linkedList.add(s2);
        linkedList.add(s3);
        System.out.println("元素個(gè)數(shù):"+linkedList.size());
        System.out.println(linkedList.toString());
//        刪除
//        linkedList.remove(s1);
        System.out.println("刪除后:"+linkedList.size());
        System.out.println(linkedList.toString());
//        遍歷
//        for 循環(huán)
        System.out.println("----------for循環(huán)--------------");
        for (int i = 0; i <linkedList.size() ; i++) {
            System.out.println(linkedList.get(i));
        }
        System.out.println("----------增強(qiáng)for循環(huán)--------------");
        for (Object o:linkedList) {
            System.out.println(o);
        }
//        使用迭代器
        System.out.println("----------使用迭代器--------------");
        Iterator it = linkedList.iterator();
        while (it.hasNext()){
            Student s = (Student) it.next();
            System.out.println(s);
        }
        System.out.println("----------列表迭代器正序--------------");
//        列表迭代器
        ListIterator listIterator = linkedList.listIterator();
        while (listIterator.hasNext()){
            Student s = (Student) listIterator.next();
            System.out.println(s);
        }
        System.out.println("----------列表迭代器逆序--------------");
        while (listIterator.hasPrevious()){
            Student s = (Student) listIterator.previous();
            System.out.println(s);
        }
    }
}

到此這篇關(guān)于Java ArrayList與Vector和LinkedList的使用及源碼分析的文章就介紹到這了,更多相關(guān)Java ArrayList內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis分頁(yè)插件PageHelper手寫實(shí)現(xiàn)示例

    Mybatis分頁(yè)插件PageHelper手寫實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Mybatis分頁(yè)插件PageHelper手寫實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java Web項(xiàng)目部署在Tomcat運(yùn)行出錯(cuò)與解決方法示例

    Java Web項(xiàng)目部署在Tomcat運(yùn)行出錯(cuò)與解決方法示例

    這篇文章主要介紹了Java Web項(xiàng)目部署在Tomcat運(yùn)行出錯(cuò)與解決方法,結(jié)合具體實(shí)例形式分析了Java Web項(xiàng)目部署在Tomcat過(guò)程中由于xml配置文件導(dǎo)致的錯(cuò)誤問(wèn)題常見(jiàn)提示與解決方法,需要的朋友可以參考下
    2017-03-03
  • AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀

    AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀

    這篇文章主要為大家介紹了AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • springboot項(xiàng)目訪問(wèn)圖片的3種實(shí)現(xiàn)方法(親測(cè)可用)

    springboot項(xiàng)目訪問(wèn)圖片的3種實(shí)現(xiàn)方法(親測(cè)可用)

    本文主要介紹了springboot項(xiàng)目訪問(wèn)圖片的3種實(shí)現(xiàn)方法,通過(guò)springboot項(xiàng)目訪問(wèn)除項(xiàng)目根目錄之外的其它目錄的圖片,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容

    java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容

    這篇文章主要介紹了java 中如何獲取字節(jié)碼文件的相關(guān)內(nèi)容的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • SpringBoot數(shù)據(jù)校驗(yàn)功能的實(shí)現(xiàn)

    SpringBoot數(shù)據(jù)校驗(yàn)功能的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot數(shù)據(jù)校驗(yàn)功能的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java 詳解異常的處理機(jī)制

    Java 詳解異常的處理機(jī)制

    異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的。比如你的代碼少一個(gè)分號(hào),那運(yùn)行出來(lái)結(jié)果是提示是錯(cuò)誤 java.lang.Error;如果你用System.out.println(11/0),那你是因?yàn)橛?做了除數(shù),會(huì)拋出 java.lang.ArithmeticException 的異常
    2021-11-11
  • Java中的事件處理機(jī)制詳解

    Java中的事件處理機(jī)制詳解

    這篇文章主要介紹了Java中的事件處理機(jī)制詳解,Java事件處理是采取"委派事件模型",當(dāng)事件發(fā)生時(shí),產(chǎn)生事件的對(duì)象,會(huì)把此"信息"傳遞給"事件的監(jiān)聽(tīng)者"處理,這里所說(shuō)的"信息"實(shí)際上就是java.awt.event事件類庫(kù)里某個(gè)類創(chuàng)建對(duì)象,需要的朋友可以參考下
    2023-09-09
  • SpringValidation自定義注解及分組校驗(yàn)功能詳解

    SpringValidation自定義注解及分組校驗(yàn)功能詳解

    這篇文章主要介紹了SpringValidation自定義注解及分組校驗(yàn)功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Java項(xiàng)目Guava包?HashMultimap使用及注意事項(xiàng)

    Java項(xiàng)目Guava包?HashMultimap使用及注意事項(xiàng)

    guava基本上可以說(shuō)是java開(kāi)發(fā)項(xiàng)目中,大概率會(huì)引入的包,今天介紹的主角是一個(gè)特殊的容器HashMultmap,可以簡(jiǎn)單的將它的數(shù)據(jù)結(jié)構(gòu)理解為Map<K,?Set<V>>,今天主要介紹下基礎(chǔ)的知識(shí)點(diǎn)?HashMultmap級(jí)使用,感興趣的朋友一起看看吧
    2022-05-05

最新評(píng)論