Java集合知識點總結——博客園:執、著

来源:http://www.cnblogs.com/xiaoshimei/archive/2016/12/29/6227603.html
-Advertisement-
Play Games

數組與集合的區別: Java中的數組是存放同一類型數據的集合。數組可以存放基本數據類型的數據,也可以存放引用數據類型的數據,但數組的長度是固定的。 集合只能存放引用數據類型的數據,不能存放基本數據類型的數據,但集合的數目是可變的。 所有的集合類都存放在java.util包中 List介面是元素有序, ...


數組與集合的區別:

Java中的數組是存放同一類型數據的集合。數組可以存放基本數據類型的數據,也可以存放引用數據類型的數據,但數組的長度是固定的。

集合只能存放引用數據類型的數據,不能存放基本數據類型的數據,但集合的數目是可變的。

 

所有的集合類都存放在java.util包中

 List介面是元素有序,可重覆的集合,添加自定義類時需要重寫equals()方法

ArrayList集合中,插入一個元素時,列表需要將插入點後面的所有元素向後移動,而在刪除(remove())一個元素時,需要將被刪除元素後面的所有元素向前移動

ArrayList集合允許所有的元素,包括null

例1:ArrayList的一些基本方法

public class ArrayListText{

  public static void main(String[] args){

    Collection<String> collection=new ArrayList<String>();

    List<String> list=new ArrayList<String>();

    collection.add("1");

    collection.add("2");

    collection.add("3");

    list.add("A");

    list.add("B");

    list.add("C");

    list.addAll(0,collection);//向指定位置添加一個集合的所有元素

    System.out.println("list集合:"+list);

    List<String> subList=list.subList(1,5);

    System.out.println("subList集合:"+subList);

    System.out.println("設置list集合元素前::"+list.get(3));

    list.set(3,"Set");

    System.out.println("設置list集合元素後::"+list.get(3));

    System.out.println("list集合中,元素3的位置:"+list.indexOf("3")+",元素D的位置:"+list.indexOf("D"));//獲取指定元素在集合中的索引位置,若不存在則返回-1

    String arrString[]=list.toArray(new String[]{});//將集合轉為字元串數組

    for(String str:arrString){

      System.out.print(str+" ");

    }

    System.out.println("\nlist集合是否為空:"+list.isEmpty());

    list.clear();

    System.out.println("\nlist集合是否為空:"+list.isEmpty());

  }

}

結果:

list集合:[1,2,3,A,B,C]

subList集合:[2,3,A,B]

設置list集合元素前::A

設置list集合元素後::Set

list集合中,元素3的位置:2,元素D的位置:-1

1  2  3  Set  B  C

list集合是否為空:false

list集合是否為空:true

將數組轉換為ArrayList集合

String[] str={"W","E","C","O","M","E"};

List<String> list=Arrays.asList(str);

ArrayList<String> arrList=new ArrayList<String>();

arrList.addAll(list);

LinkedList是鏈表類,鏈表結構的優點是便於向集合插入和刪除元素。因為在插入或刪除元素時,不需要移動任何元素,LinkedList也可以存在null元素

獲取表頭的方法:

getFirst():僅僅是獲取表頭     element():獲取但不移除此鏈表頭   peek():獲取但不移除此鏈表頭    poll():獲取並移除此鏈表頭  pop():獲取並移除此鏈表頭

例2:LinkedList獲取鏈表頭

public class LinkedListText{

  public static void main(String[] args){

    LinkedList<String> link=new LinkedList<String>();

    link.add("1");

    link.add("2");

    link.add("3");

    link.addFirst("F");

    link.addLast("L");

    LinkedList<String> newLink=new LinkedList<String>(link);

    System.out.println("添加元素後:\n\t"+link);

    System.out.println("get()方法獲取表頭:"+link.getFirst());

    System.out.println("使用get()方法後:\n\t"+link);

    System.out.println("element()方法獲取表頭:"+link.element());

    System.out.println("使用element()方法後:\n\t"+link);

    System.out.println("peek()方法獲取表頭:"+link.peek());

    System.out.println("使用peek()方法後:\n\t"+link);

    System.out.println("poll()方法獲取表頭:"+link.poll());

    System.out.println("使用poll()方法後:\n\t"+link);

    System.out.println("pop()方法獲取表頭:"+link.pop());

    System.out.println("使用pop()方法後:\n\t"+link);

    System.out.println("******使用鏈表的先進先出*******");

    int  len=newLink.size();

    for(int i=0;i<len;i++){

      System.out.print(newLink.poll()+" ");

    }

  }

}

結果:

添加元素後:

[F,1,2,3,L]

get()方法獲取表頭:F

使用get()方法後:

[F,1,2,3,L]

element()方法獲取表頭:F

使用element()方法後:

[F,1,2,3,L]

peek()方法獲取表頭:F

使用peek()方法後:

[F,1,2,3,L]

poll()方法獲取表頭:F

使用poll()方法後:

[1,2,3,L]

pop()方法獲取表頭:1

使用pop()方法後:

[2,3,L]

*****使用鏈表的先進先出*****

F 1 2 3 L

 Set集合是元素無序,不可重覆的集合,允許包含null元素,添加自定義類一定要重寫equals()和hashcode()方法

HashSet類可以快速地定位一個元素,但放到HashSet集合中的元素需要重寫equals()和hashcode()方法,而TreeSet集合將放進其中的元素按序存放

HashSet是按哈希演算法來存放集合中的元素的,使用哈希演算法可以提高存取的效率

HashSet集合的特點:1.不能保證元素的排列順序,集合中元素的順序隨時有可能發生改變  2.集合中最多允許存在一個null元素  3.HashSet集合不是線程同步的

LinkedHashSet插入性能略低於HashSet,但在迭代訪問Set里的全部元素時有很好的性能,LinkedHashSet()使用鏈表維護了一個添加進集合中的順序,導致當我們遍歷LinkedHashSet集合元素時是按添加進去的順序遍歷的,但不能說明它是有序的!

TreeSet類實現了java.util包中的Set介面和SortedSet介面,TreeSet集合中的元素在預設情況下是升序排序

TreeSet集合的特點:1.向TreeSet中添加的元素必須是同一個類的  2.從小到大遍歷   3.自定義類沒有實現Comparable介面時,當向TreeSet中添加此對象時,報錯

例2:自定義類實現Comparable介面

class Person implements Comparable{

  private String name;

  private String age;

  public Person(){

  }

  public Person(String name,int age){

    this.name=name;

    this.age=age;

  }

  public int compareTo(Person per){

    if(this.age>per.age){

      return 1;

    }else if(this.age<per.age){

      return -1;

    }else{

      return this.name.compareTo(per.name);

    }

  }

  public String toString(){

    return ("姓名:"+name+",年齡:"+age+"\n");

  }

}

public class TreeSetDemo{

  public static void main(String[] args){

    Set<Person> tset=new TreeSet<Person>();

    tset.add(new Person("小強",21));

    tset.add(new Person("小偉",23));

    tset.add(new Person("小強",21));

    tset.add(new Person("小強",21));

    tset.add(new Person("小琴",20));

    tset.add(new Person("小婷",20));

    System.out.println(tset);

  }

}

結果:

[姓名:小婷,年齡:20

,姓名:小琴,年齡:20

,姓名:小強,年齡:21

,姓名:小偉,年齡:23

]

集合的輸出:1.Iterator:迭代器輸出(提供遍歷各種集合類型的迭代器)   2.foreach:JDK1.5新增的輸出

迭代刪除:

Iterator<String> it=link.iterator();

while(it.hasNext){

  it.next();

  it.remove();

}

註釋:在調用remove()方法前需要使用next()方法指定要刪除的元素,否則運行時將產生IllegalStateException異常

 Map介面提供的是key-value的映射,其中key不允許重覆,每一個key只能映射一個value,常用String類作為Map的鍵

一個key-value對是一個Entry,所有的Entry是用Set存放的,不可重覆。key是用Set來存放的,不可重覆,value是用Collection存放的,可重覆

Map.Entry介面是靜態的,所以可以直接使用”外部類.內部類“的形式調用

HashMap類是實現Map集合,對於元素的添加和刪除有著較高的效率。HashMap類提供所有可選的映射操作,並允許使用null值和null鍵,但必須保證鍵是唯一的,HashMap是非同步的,也不保證映射順序

例3:獲取Map集合中的全部key和value

public class HashMapDemo{

  public static void main(String[] arg){

    Map<Integer,String> map=new HashMap<Integet,String>();

    map.put(1,"清華大學");

    map.put(2,"北京大學");

    map.put(3,"復旦大學");

    map.put(4,"武漢大學");

    map.put(5,"中國科技大學");

    map.put(6,"中國礦業大學");

    Set<Integer> set=map.keySet();

    Iterator<Integet> itKey=set.iterator();

    System.out.println("Map集合中全部的key:");

    while(itKey.hasNext()){

      System.out.print(itKey.next()+" ");

    }

    System.out.println();

    Collection<String> c=map.values();

    Iterator<String> itValue=c.iterator();

    System.out.println("Map集合中全部的value:");

    while(itValue.hasNext()){

      System.out.print(itValue.next()+" ");

    }

  }

}

結果:

Map集合中全部的key:

1 2 3 4 5 6

Map集合中全部的value:

清華大學 北京大學 復旦大學 武漢大學 中國科技大學 中國礦工大學

例4:使用Iterator輸出Map集合

public class hashMapDemo{

  public static void main(String[] args){

    Map<Integer,String> map=new HashMap<Integet,String>();

    map.put(1,"清華大學");

    map.put(2,"北京大學");

    map.put(3,"復旦大學");

    map.put(4,"武漢大學");

    map.put(5,"中國科技大學");

    map.put(6,"中國礦業大學");

    Set<Map.Entry<Integer,String>> set=map.entrySet();

    Iterator<Map.Entry<Integet,String>> it=set.iterator();

    System.out.println("Key--------Value");

    while(it.hasNext()){

      Map.Entry<Integer,String> mapEntry=it.next();

      System.out.println(""+mapEntry.getKey()+"-------"+mapEntry.getValue());

    }

  }

}

結果:

key------value

1-----清華大學

2-----北京大學

3-----復旦大學

4-----武漢大學

5-----中國科技大學

6-----中國礦業大學

使用foreach輸出:

for(Map.Entry<Integet,String> mapEntry:map.entryKey()){

  System.out.println(""+mapEntry.getKey()+"-------"+mapEntry.getValue());

}

TreeMap類不但實現了Map介面,還實現了SortedMap介面,因此,TreeMap集合中的映射關係具有一定的順序性。與HashMap相比,TreeMap集合對元素的添加、刪除和定位映射性能較低

Collections類可以對集合的元素進行排序、反序、去極值、迴圈移位、查詢和修改等功能,還可以將集合對象設置不可變、對集合對象實現同步控制等方法。

Collections類所提供的方法均為靜態方法,可以直接通過“類名.方法()"的形式調用

Collections常用方法:addAll(Collection c,T...elements)--Collections.addAll(list,"1","2","3")  binarySearch(List list,T key)-使用此方法前必須先使用sort(List list,Comparator c)方法進行排序  copy(List dest,List src)//將src集合中的所有元素複製到dest集合中  fill(List list,T obj)//使用指定元素替換指定集合中的所有元素  max(Collection coll) max(Collection coll,Comparator c)  replaceAll(List list,T oldVal,T newVal)//使用另一個元素替代集合中指定的所有元素  reverse(List list) 

Stack-棧是一種特殊的線性表,它僅限於在表尾進行元素的添加與刪除操作。棧的表尾成為棧頂,表頭成為棧底。棧是採用“先進後出”的數據存儲方式,若棧中沒有任何元素,則成為空棧。棧是Vector的子類

empty()//判斷該棧是否為空,若為空返回true  peek()//獲取棧頂元素,但不刪除它  pop()//獲取棧頂元素,並刪除它  push()//將元素添加到棧頂中  search()、、查找指定元素在棧中位置,起始位置為1,不是0

Hashtable類是Map的子類,是JDK1.0是出現的,Hashtable類是同步的,線程安全的,不允許存放null鍵和null值,其他功能與HashMap類似


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

-Advertisement-
Play Games
更多相關文章
  • 一、方法函數 函數也稱為方法,就是定義在類中的具有特定功能的一段獨立代碼。用於定義功能,提高代碼的復用性。 函數的特點1> 定義函數可以將功能代碼進行封裝,便於對該功能進行復用;2> 函數只有被調用才會被執行;3> 對於函數沒有具體返回值的情況,返回值類型用關鍵字void表示,那麼該函數中的retu ...
  • 1、什麼是指針? 指針就是地址。 為了說清楚什麼是指針,必須先弄清楚數據在記憶體中是如何存儲的,又是如何讀取的。 如果在程式中定義了一個變數,在對程式進行編譯時,系統就會給這個變數分配記憶體單元。編譯系統根據程式中定義的變數的類型,分配一定長度的空間。 記憶體區的每一個位元組都會有一個編號,這就是“地址”, ...
  • 前提: 1.已安裝python版本(一般都是2.X) 2.已安裝easy_install python安裝,記得配置Python的環境變數,例如:我的直接在Path上加 G:\Python 驗證安裝Python成功:cmd 輸入python 或者python -V 這是下載easy_install的 ...
  • 關於volatile,找了一堆資料看,看完後想找一個方法去做測試,測了很久,感覺跟沒有一樣。 這本書《深入理解Java記憶體模型》,對volatile描述中有這樣一個比喻的說法,如下代碼所示,對a的讀寫相當於對b的同步讀寫。 也就是說,volatile只保證了讀與寫的同步,每次讀取都是得到最新值,每次 ...
  • 1. 前言 Java和C++之間顯著的一個區別就是對記憶體的管理。和C++把記憶體管理的權利賦予給開發人員的方式不同,Java擁有一套自動的記憶體回收系統(Garbage Collection,GC)簡稱GC,可以無需開發人員干預而對不再使用的記憶體進行回收管理。 垃圾回收技術(以下簡稱GC)是一套自動的內 ...
  • 為什麼要用抽象類: 子類萬一沒有重寫正確,也沒有提示。 假設父類的代碼如下 子類中的代碼如下:對父類中的方法的重寫 這樣的代碼,在Eclipse中是不會報錯的; 抽象類:不知道是具體什麼東西的類。 寫法:abstract class 類名 抽象方法:不知道是具體是做什麼的方法; 寫法:abstrac ...
  • feof是C語言標準庫函數函數,其原型在stdio.h中,其功能是檢測流上的文件結束符。 函數原型: 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(){ 4 FILE *pt,*pt1; 5 char ch; 6 pt=fopen("in.t ...
  • 新版六合彩投註網站系統源碼 (測試完整可商業運行) 帶新開獎結果》》》》》 網站系統可以支持代理開設,股東發展,普通會用等常用的功能。 玩法齊全》連碼自由對碰》各類玩法內附說明。資料庫文件 hs001 修改資料庫連接 文件夾 configs 文件config後臺管理 admin admin前臺會員目 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...