Java類集框架:Collection , List , Set 和 Map 用法和區別

一、常見集合

首先看一下他們之間的關係

Collection          接口的接口   對象的集合
├ List                   子接口      按進入先後有序保存   可重複
│├ LinkedList                接口實現類   鏈表   插入刪除   沒有同步   線程不安全
│├ ArrayList                  接口實現類   數組   隨機訪問   沒有同步   線程不安全
│└ Vector                      接口實現類   數組                  同步        線程安全
│   └ Stack
└ Set                   子接口       僅接收一次,並做內部排序

├ HashSet

│   └ LinkedHashSet
└ TreeSet

Map                接口      鍵值對的集合
├ Hashtable                  接口實現類                  同步           線程安全
├ HashMap                   接口實現類                  沒有同步    線程不安全

│├ LinkedHashMap

│└ WeakHashMap

├ TreeMap
└ IdentifyHashMap

更爲精煉的總結:

Collection 是對象集合, Collection 有兩個子接口 List 和 Set

List 可以通過下標 (1,2..) 來取得值,值可以重複

而 Set 只能通過遊標來取值,並且值是不能重複的

ArrayList , Vector , LinkedList 是 List 的實現類

ArrayList 是線程不安全的, Vector 是線程安全的,這兩個類底層都是由數組實現的

LinkedList 是線程不安全的,底層是由鏈表實現的  


Map 是鍵值對集合

HashTable 和 HashMap 是 Map 的實現類  
HashTable 是線程安全的,不能存儲 null 值  
HashMap 不是線程安全的,可以存儲 null 值  

 

  1.ArrayList

  • ArrayList類中常用方法:

  • ArrayList簡單使用:
public class ArrayListDemo01 {
       public static void main(String[] args) {
      List<String> allList=null;
      Collection<String> allCollection=null;
      allList=new ArrayList<String>();
      allCollection=new ArrayList<String>();
      allList.add("Hello");
      allList.add(0,"World");
      System.out.println(allList);
      allCollection.add("I");
      allCollection.add("am");
      allCollection.add("Groot");
      allList.addAll(allCollection);
      System.out.println(allList);
      String str[]=allList.toArray(new String[] {});
      System.out.print("指定數組類型:");
      for(int i=0;i<str.length;i++) {
         System.out.print(str[i]+"、");
      }
      System.out.print("\n返回對象數組:");
      Object obj[]=allList.toArray();
      for(int i=0;i<obj.length;i++) {
         String temp=(String)obj[i];
         System.out.print(temp+"、");
      }
      System.out.println();
      System.out.println(allList.contains("Groot")?"\"Groot\"字符串存在":"\"Groot\"不存在");
      List<String> sub=allList.subList(0, 1);   //左閉右開
      System.out.print("集合截取:");
      for(int i=0;i<sub.size();i++) {
         System.out.print(allList.get(i)+"、");
      }
     System.out.println("");
     System.out.println("Groot的位置:"+allList.indexOf("Groot"));
       }
}

 運行結果:

  • LinkedList的簡單使用
import java.util.LinkedList;

public class LinkedListDemo {
  
	public static void main(String[] args) {
		// TODO Auto-generated method stub
     LinkedList<String> link=new LinkedList<String>();
     link.add("a");
     link.add("b");
     link.add("c");
     System.out.println("初始化鏈表:"+link);
     link.addFirst("x");
     link.addLast("Y");
     System.out.println("增加頭和尾之後的鏈表:"+link);
     System.out.println(link.size());
     for(int i=0;i<link.size();i++){   
    	 System.out.println("循環次數:"+i);
    	 System.out.println("鏈表大小: "+link.size());
    	 System.out.println(link.poll()+"、");   //poll()檢索並刪除此列表的頭(第一個元素)。
     }

	}

}

   運行結果:

  2.Set

  • Set類常用方法

  • Set類簡單使用
import java.util.SortedSet;
import java.util.TreeSet;
public class TreeSetDemo01 {
       public static void main(String[] args) {
      SortedSet<String> allSet=new TreeSet<String>();
      allSet.add("A");
      allSet.add("B");
      allSet.add("C");
      allSet.add("C");   //Set不重
      allSet.add("D");
      allSet.add("E");
      allSet.add("F");
      System.out.println(allSet);
      System.out.println("第一個元素:"+allSet.first());
      System.out.println("最後一個元素:"+allSet.last());
      System.out.println("headSet元素:"+allSet.headSet("C"));
      System.out.println("tailSet元素:"+allSet.tailSet("C"));      //左閉右開
      System.out.println("subSet元素:"+allSet.subSet("B", "D"));   //左閉右開
       }
}

  運行結果:

  3.Map

  • Map類常用方法:

  • Map類簡單使用:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo01 {
       public static void main(String[] args) {
    Map<String,String> map=null;
    map=new HashMap<String,String>();
    map.put("key", "value");
    map.put("father", "digen");
    map.put("mother", "jimei");
    String val=map.get("father");
    System.out.println("father對應的內容:"+val);
    Set<String> keys=map.keySet();
    Iterator<String> iter=keys.iterator();
    System.out.print("全部的key:");
     while(iter.hasNext()){
       String str=iter.next();
       System.out.print(str+"、");
    }
     System.out.println();
     Collection<String> values=map.values();
     System.out.println(values.contains("digen")?"包括digen":"不包括digen");
     Iterator<String> iter2=values.iterator();
     System.out.print("\n全部的value: ");
     while(iter2.hasNext()) {
        String str=iter2.next();
        System.out.print(str+"、");
     }
       }
}

運行結果

二.項目實戰

見下篇

相關鏈接:https://blog.csdn.net/zccst/article/details/5056920?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章