文章目錄
1.List 集合:
- List 集合: 存儲的元素,有序的,可重複的。
- ArrayList 內部的存儲原理是數組。 默認構建的容量是10.
- **List集合爲列表類型,列表的主要特徵是存放其中的對象以線性方式存儲,沒有特定的順序,只有一個開頭和結尾,當然,它與根本沒有順序的集類型時不同的。 **
下面展示一些 內聯代碼片
。
public class ArrayListDemo {
public static void main(String[] args) {
// 創建數組
ArrayList<String> list = new ArrayList<>();
// 向集合內部追加元素。
list.add("a");
list.add("c");
list.add("d");
list.add(null);
list.add("b");
list.add("f");
list.add("g");
list.add("g");
list.add(0, "[");
list.add(null);
list.add(null);
list.add(null);
list.add(null);
// add 方法有返回值,是否添加成功。
boolean add = list.add("]");
// list集合的淺表複製。 克隆副本。
ArrayList clone = (ArrayList) list.clone();
// remove 移除元素
String remove2 = list.remove(0);// 通過下標移除某個元素,返回值刪除的元素
boolean remove = list.remove("a");// 通過元素本身,刪除。 返回值是boolean.
// get 方法。
System.out.println(list.get(1));
// indexof
System.out.println(list.indexOf("b"));// 返回元素的下標位置。
// isEmpty
System.out.println(list.isEmpty());
// set 替換,更新。
list.set(0, "cc");
System.out.println(list.toString());
// size 集合長度
System.out.println(list.size());
// toArray
Object[] array = list.toArray();
System.out.println("**************************");
// 遍歷集合 1。
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
System.out.println("\n**************************");
// 遍歷集合 2
for (String str : list) {
System.out.print(str+" ");
}
// 遍歷集合 2
System.out.println("\n**************************");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){// 下一位是否還有值
System.out.print(iterator.next()+" ");
}
}
}
1.1 LinkedList 鏈表集合
- LinkedList 鏈表集合鏈表集合。 內部存儲是按照鏈表順序排列的。 雙向鏈表。
1.2 ArrayList linkedList 區別?
簡易的區分:
- ArrayList 內部存儲使用的是數組。 遍歷速度快。
- LinkedList 內部存儲使用的是鏈表。 遍歷速度慢。 插入刪除性能優越。
詳細:
- ArrayList是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
下面展示一些 內聯代碼片
。
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("hello");
list.add("java");
list.add("jack");
list.add("tom");
list.add("roice");
list.add("object");
// 鏈表提供了添加的方法。addFirse addLast
list.addFirst("{");
list.addLast("}");
list.removeFirst();
list.removeLast();
// 獲取元素
System.out.println(list.get(0));
System.out.println(list.element());
System.out.println(list.toString());
}
}
1.3 線程安全的集合 Vector
- 線程安全的集合 Vector
- Vector 保證線程同步。
public class VectorDemo {
public static void main(String[] args) {
Vector<String> vector = new Vector<>();
vector.add("hello");
vector.add("world");
vector.add("smish");
vector.add("fode");
vector.add("jack");
System.out.println(vector.toString());
}
}
2.Map
2.1 Map 集合
- Map集合:一個包含鍵值對映射的對象集合。
- Key:鍵。
- Value: 值。
- 一個鍵只能有一個值。 鍵不能重複,無序的。 值可以重複。
- HashMap
2.1.1 HashMap闡述
- HashMap 是基於哈希表的 Map 接口的非同步實現。此實現提供所有可選的映射操作, 並允許使用 null 值和 null 鍵。此類不保證映射的順序,特別是它不保證該順序恆久不變。
————————————————————————
2.1.2 HashMap的數據結構
1.Map 接口: 定義將鍵值映射到值的對象,Map規定不能包含重複的鍵值,每個鍵最多可以映射一個值,這個接口是用來替換Dictionary類。
2.AbstractMap 類: 提供了一個Map骨架的實現,儘量減少了實現Map接口所需要的工作量
3.Cloneable 接口: 實現了該接口的類可以顯示的調用Object.clone()方法,合法的對該類實例進行字段複製,如果沒有實現Cloneable接口的實例上調用Obejct.clone()方法,會拋出CloneNotSupportException異常。正常情況下,實現了Cloneable接口的類會以公共方法重寫Object.clone()
4.Serializable 接口: 實現了該接口標示了類可以被序列化和反序列化
————————————————————————
-
在 java 編程語言中,最基本的結構就是兩種,一個是數組,另外一個是模擬指針(引 用),所有的數據結構都可以用這兩個基本結構來構造的,HashMap 也不例外。HashMap 實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體
———————————————————————— -
ArrayList(查詢快)
-
數組實現
-
LinkedList(插入和刪除快)
-
鏈表
-
Hash函數計算得到一個理想的——插入位置
下面展示一些 內聯代碼片
。
public class HashMapDemo {
public static void main(String[] args) {
// key value
HashMap<String,Integer> map = new HashMap<>();
// map是鍵值對映射集合。 “a” 表示key 97 表示value。
map.put("a", 97); // put 表示向集合內部添加。
map.put("男", 3985);
map.put("張", 197);
map.put("b", 198);
map.put("c", 198);
// 獲取map集合中的值。
System.out.println(map.get("a"));// get 獲取集合中的值,通過鍵獲取值。
System.out.println(map.get("男"));
System.out.println(map.get("女"));
// containsKey 是否包含某個key
System.out.println(map.containsKey("a"));
System.out.println(map.containsValue(198));
// 遍歷HashMap集合。 遍歷所有的key.
Set<String> set = map.keySet();
for(String str : set){
// 遍歷所有的key
System.out.println("key: "+str+"\tvalue:"+map.get(str));
}
System.out.println("************************************");
// 遍歷HashMap集合。
Collection<Integer> values = map.values();
for(Integer integer : values){
System.out.println(integer);
}
System.out.println("************************************");
// 遍歷HashMap集合。
// 視圖,副本,克隆。
for (Entry<String, Integer> entry :map.entrySet()) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
System.out.println("************************************");
// 1.集合中要注意的地方。
map.put("a", 997);// 重複的key覆蓋原來的value
System.out.println(map.get("a"));
// 1.集合中要注意的地方。 put 方法將返回原來的舊值。 新值替換舊值。
System.out.println(map.put("a", 1000));
System.out.println(map.get("a"));
// 1.集合中要注意的地方。
System.out.println(map.put("hello", 885));
// Set add(object); 返回boolean類型。
// List add(object); 返回boolean類型。
// Map put(Key,value); 返回value舊值。
// Set remove(object); 返回boolean類型。
// List remove(object); 返回被刪除的元素。
// Map remove(Key); 返回value舊值。
//1.集合中要注意的地方。
Integer remove = map.remove("a");
System.out.println(remove);// 刪除的返回值是a的value.
System.out.println(map.toString());
}
}
注意:
// Set add(object); 返回boolean類型。
// List add(object); 返回boolean類型。
// Map put(Key,value); 返回value舊值。
// Set remove(object); 返回boolean類型。
// List remove(object); 返回被刪除的元素。
// Map remove(Key); 返回value舊值。
——————————————————————
2.2.1 key
一個key 只能對應一個值。
一個key,對應多個值,可以使用List集合。
舉個小例子:
- “河北省” 石家莊,保定,秦皇島,衡水,廊坊
- “河南省” 鄭州,南陽,新鄉,開封,平頂山,鶴壁。
- “山西省” 臨汾,太原,大同,陽泉,平遙,運城。
下面展示一些 內聯代碼片
。
public class HashMapDemo02 {
public static void main(String[] args) {
List<String> hb = new ArrayList<>();
hb.add("石家莊");
hb.add("保定");
hb.add("秦皇島");
hb.add("衡水");
List<String> hn = new ArrayList<>();
hn.add("鄭州");
hn.add("南陽");
hn.add("新鄉");
hn.add("開封");
List<String> sx = new ArrayList<>();
sx.add("臨汾");
sx.add("太原");
sx.add("大同");
sx.add("陽泉");
HashMap<String, List<String>> map = new HashMap<>();
map.put("河北省",hb );
map.put("河南省",hn );
map.put("山西省",sx);
// 如何遍歷
Set<String> keySet = map.keySet();
for(String province : keySet){
System.out.println("省份:"+province+"\n城市:");
List<String> list = map.get(province);
for(String city : list){
System.out.print(""+city+" ");
}
System.out.println();
}
}
}