Java的集合類是一些很是實用的工具類,主要用於存儲和裝載數據 (包括對象),所以,Java的集合類也被成爲容器。在Java中,全部的集合類都位於java.util包下,這些集合類主要是基於兩個根接口派生而來,它們就是 Collection和 Map。html
Collection派生出三個子接口,java
Set表明不可重複的無序集合、數組
List表明可重複的有序集合、安全
Queue是java提供的隊列實現,架構
經過它們不斷的擴展出不少的集合類,例如Vector、ArrayList、LinkedList、Deque等,其分佈圖以下:框架
Map接口是和Collection同等級的根接口,它表示一個鍵值對(key-value)的映射,每個key對應一個value,查找Map中的數據,老是根據key來獲取,因此key是不可重複的,它用於標識集合裏的每項數據。跟Collection同樣,Map接口派生了不少的集合子類,這是Map的體系架構圖:工具
http://www.javashuo.com/article/p-yvhybxhq-a.html性能
Vector、ArrayList、LinkedList這3者都是實現集合框架的List,也就是所謂的有序集合,所以具體功能也比較近似,好比均可以按照位置進行定位、添加或者刪除的操做,都提供迭代器遍歷其內容。但由於具體的設計區別,在行爲、性能、線程安全等方面。表現又有很大不一樣。spa
List
是一個接口,不能實例化
,須要一個具體類來實現實例化。List 集合中的對象按照必定的順序排放,裏面的內容能夠重複。 List
接口實現的類有:ArrayList
(實現動態數組),Vector
(實現動態數組),LinkedList
(實現鏈表),Stack
(實現堆棧)。.net
ArrayList是應用更加普遍的動態數組實現,它自己不是線程安全的,因此性能要好不少。與Vector近似,ArrayList也是能夠根據須要調整容量,不過二者的調整邏輯有區別,Vector在擴容時會提升一倍,而ArrayList會增長50% .
Vector是Java早期提供的線程安全的動態數組,若是不須要線程安全,並不建議選擇,畢竟同步是有額外開銷的。Vector內部是使用對象數組來保存數據,能夠根據須要來自動的增長容量,當數組已滿時,會建立新的數組,並copy原有數據。
是Java提供的雙向鏈表。它不須要象上面兩種那樣調整容量,它也不是線程安全的。
Vector和ArrayList做爲動態數組,其內部元素以數組形式順序存儲,因此很是適合隨機訪問的場合。除了尾部插入和刪除元素,每每性能會較差,好比咱們在中間位置插入一個元素,須要移動後面全部元素。
而LinkedList進行節點插入刪除要高效不少,可是隨機訪問性能則要比動態數組慢。
import java.util.Map;
import java.util.HashMap;
put(Object key,Object value) // 添加 putAll(Collection c) // 添加 get(Object key) //根據鍵來獲取對應的值 containsKey(Object key) // 是否包含key containsValue(Object value) // 是否包含value remove(Object key) //刪除key values() //獲取全部的values isEmpty() //判斷Map是否爲空 entrySet() // keySet() //獲取全部的key,返回的是Set
//建立HashMap HashMap<String,String> hm1 = new HashMap<String,String>(); HashMap<String,String> hm2 = new HashMap<String,String>(); String [] key = {"name","age","tender"}; String [] value = {"zhangsan","16","men"}; //添加元素 //hm2 hm2.put("id","012"); hm2.put("describe", "zhangdelaohaokanle"); //hm1一個一個添加 for(int i = 0;i<3;i++){ hm1.put(key[i], value[i]); } //hm1直接全添加 hm1.putAll(hm2); //根據key獲取值 String name = hm1.get("name"); //hm1是否包含value, key boolean flag = hm1.containsValue("013"); boolean flag = hm1.containsKey("age"); //hm1刪除並返回 String des = hm1.remove("describe") //獲取全部的values Collection<String> li = hm1.values(); //獲取全部的keys Set<String> set = hm1.keySet();
package test; import java.util.HashMap; import java.util.Iterator; import java.util.ArrayList; import java.util.Collection; import java.util.Map.Entry; import java.util.Set; public class test6 { public static void main(String[] args) { HashMap<String,Integer> map =new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); // Map map=new HashMap(); // map.put("a", "aaa"); // map.put("b", "bbb"); // map.put("c", "ccc"); // map.put("d", "ddd"); //hashMap遍歷方法1 Iterator<String> iterator = map.keySet().iterator(); while (iterator.hasNext()) { Object key = iterator.next(); System.out.println("map.get(key) is :"+map.get(key)); } //遍歷方法2 Set<Map.Entry<String, Integer>> set=map.entrySet(); Iterator<Map.Entry<String, Integer>> it=set.iterator(); while(it.hasNext()){ //System.out.println(list.get(0) ); Map.Entry<String, Integer> e=it.next(); System.out.println(e.getKey()+":"+e.getValue()); } System.out.println(map.containsValue(1) ); System.out.println(map.containsKey("a") ); System.out.println(map.size() ); System.out.println(map.remove("a") ); System.out.println(map.size() ); System.out.println(map.containsKey("a") ); System.out.println(map.containsValue(1) ); //ArrayList <Integer> list =(ArrayList<Integer>)map.values(); //上面會出現異常,由於map.values()返回的是一個Collection<Integer>對象,可用下面的方法解決 ArrayList <Integer> list =new ArrayList<Integer>(map.values()); Iterator <Integer>ite=list.iterator(); while(ite.hasNext()){ //System.out.println(list.get(0) ); System.out.println(ite.next() ); } map.clear(); System.out.println(map.isEmpty() ); } }
length是針對各類數組的屬性,好比int[], char[], byte[], string[];
length()是針對String的方法,通常用於 if(s == null || s.lenght() == 0){return ;}
size()是針對集合類的方法, 通常用於 Set( HashSet,TreeSet), List(ArrayList, LinkedList), Map(HashMap, SortedMap..等) 這些集合類獲取集合元素的數量。
https://blog.csdn.net/i000zheng/article/details/78850165
http://www.javashuo.com/article/p-okjvwrod-n.html
https://blog.csdn.net/weixin_41434306/article/details/88582800