日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

List和Set集合使用

發布時間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 List和Set集合使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java提供的眾多集合類由兩大接口衍生而來:單列集合Collection和雙列集合Map

Collection接口

Collection接口是所有單列集合的父接口 ,每次儲存一個元素,接口的主要方法包括:

  • public boolean add(E e) : 把給定的對象添加到當前集合中 。
  • public? void clear() :清空集合中所有的元素。
  • public boolean remove(E e) : 把給定的對象在當前集合中刪除。
  • public boolean contains(E e) : 判斷當前集合中是否包含給定的對象。
  • public boolean isEmpty( ): 判斷當前集合是否為空。
  • public?int size() :返回集合中元素的個數。?
  • public Object[] toArray() : 把集合中的元素,存儲到數組中。

方法演示如下:

import java.util.ArrayList; import java.util.Collection;public class Demo1Collection {public static void main(String[] args) {// 創建集合對象 // 使用多態形式Collection<String> coll = new ArrayList<String>();// 使用方法// 添加功能 boolean add(String s)coll.add("小李廣");coll.add("掃地僧");coll.add("石破天");System.out.println(coll);// boolean contains(E e) 判斷o是否在集合中存在System.out.println("判斷 掃地僧 是否在集合中"+coll.contains("掃地僧"));//boolean remove(E e) 刪除在集合中的o元素System.out.println("刪除石破天:"+coll.remove("石破天"));System.out.println("操作之后集合中元素:"+coll);// size() 集合中有幾個元素System.out.println("集合中有"+coll.size()+"個元素");// Object[] toArray()轉換成一個Object數組Object[] objects = coll.toArray();// 遍歷數組for (int i = 0; i < objects.length; i++) {System.out.println(objects[i]);}// void clear() 清空集合coll.clear();System.out.println("集合中內容為:"+coll);// boolean isEmpty() 判斷是否為空System.out.println(coll.isEmpty()); } }

且collection有兩個重要的子接口,分別是Set和List。其中,List的特點是元素有序、元素可重復。Set的特點是元素無序,而且不可重復。List接口的主要實現類有java.util.Arraylist和java.util.Linkedlist,Set接口的主要實現類有java.util.HashSet、java.util.LinkedHashSet和java.util.TreeSet。

List集合

List作為Collection集合的子接口,用于定義以列表形式存儲的集合,List接口為集合中的每個對象分配了一個索引(index),標記該對象在List中的位置,并可以通過index定位到指定位置的對象。List在Collection基礎上增加的主要方法包括:

  • public void add(): 將指定的元素,添加到該集合中的指定位置上。
  • public E get(int index):返回集合中指定位置的元素。
  • public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
  • public E set(int index,E element):用指定元素替換集合中指定位置的元素,返回值是更新前的元素。

List接口的常用實現類:

ArrayList

ArrayList基于數組來實現集合的功能,其內部維護了一個可變長的對象數組,集合內所有對象存儲于這個數組中,并實現該數組長度的動態伸縮

ArrayList使用數組拷貝來實現指定位置的插入和刪除:

插入:

刪除:

LinkedList

LinkedList基于鏈表來實現集合的功能,其實現了靜態類Node,集合中的每個對象都由一個Node保存,每個Node都擁有到自己的前一個和后一個Node的引用

LinkedList追加元素的過程示例:

?

ArrayList 和 LinkedList區別:

  • ArrayList的隨機訪問更高,基于數組實現的ArrayList可直接定位到目標對象,而LinkedList需要從頭Node或尾Node開始向后/向前遍歷若干次才能定位到目標對象
  • LinkedList在頭/尾節點執行插入/刪除操作的效率比ArrayList要高
  • 由于ArrayList每次擴容的容量是當前的1.5倍,所以LinkedList所占的內存空間要更小一些
  • 二者的遍歷效率接近,但需要注意,遍歷LinkedList時應用iterator方式,不要用get(int)方式,否則效率會很低
  • Vector

    Vector和ArrayList很像,都是基于數組實現的集合,它和ArrayList的主要區別在于

    • Vector是線程安全的,而ArrayList不是
    • 由于Vector中的方法基本都是synchronized的,其性能低于ArrayList
    • Vector可以定義數組長度擴容的因子,ArrayList不能

    Set集合

    Set接口和List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進行功能上的擴充,只是比Collection接口更加嚴格了。與List接口不同的是,Set接口中元素無序,并且都會以某種規則保證存入的元素不出現重復。?

    Set接口的常用實現類:

    HashSet

    HashSet是Set接口的一個實現類,它所存儲的元素是不可重復的,并且元素都是無序的(即存取順序不一致) 。

    HashSet是根據對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。保證元素唯一性的方式依賴于:hashcode與equals方法。所以,給HashSet中存放自定義類型元素時,需要重寫對象中的hashCode和equals方法,建立自己的比較方式,才能保證HashSet集合中的對象唯一 。

    LinkedHashSet

    我們知道HashSet保證元素唯一,可是元素存放進去是沒有順序的,那么我們要保證有序,怎么辦呢?

    在HashSet下面有一個子類java.util.LinkedHashSet,它是鏈表和哈希表組合的一個數據存儲結構,能夠保證順序的有效輸出。

    演示代碼如下:

    public class LinkedHashSetDemo {public static void main(String[] args) {Set<String> set = new LinkedHashSet<String>();set.add("bbb");set.add("aaa");set.add("abc");set.add("bbc");Iterator<String> it = set.iterator();while (it.hasNext()) {System.out.println(it.next());}} }

    結果:
    ? bbb
    ? aaa
    ? abc
    ? bbc

    總結

    以上是生活随笔為你收集整理的List和Set集合使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。