前言
只要刷題一定會用到STL。今天就來簡單總結一下。
Vector
public static void main(String[] args) {
// TODO 自動生成的方法存根
Vector<Integer> vec=new Vector<> ();
vec.add(1);//添加元素
vec.add(2);
vec.add(4);
vec.add(4);
vec.add(5);
vec.add(0,6);//vec[index=0]=6 原index=0及以後的數組後延1
vec.set(2,7);//vec[index=2]=7
vec.remove(5);//刪除index爲5的元素
for(int i=0;i<vec.size();i++){ //size獲取長度
System.out.print(vec.get(i)+" "); //get獲取下表爲i的值的值
}
System.out.println();
System.out.println(vec.indexOf(7));//返回7的下標
System.out.println(vec.indexOf(100));//無則返回-1
System.out.println(vec.contains(7));//判斷是否含有
vec.clear();//清空
}
常用的Vector方法有add,set,remove,indexOf以及clear,和ArrayList幾乎一樣,屬於歷史遺留產物。基本可以用ArrayList完全替代。
ArrayList和LinkedList
public static void main(String[] args) {
// TODO 自動生成的方法存根
System.out.println("ArrayList:");
ArrayList<Integer> arr=new ArrayList<>();
arr.add(1);//添加
arr.add(3);
arr.add(4);
arr.add(1,2);
System.out.println(arr.size());//獲取長度4
arr.set(0, 100);//修改
arr.get(0);//獲取index=0數據
System.out.println(arr.indexOf(3));//獲取3的index2
System.out.println(arr.remove(0));//獲取本次刪除的數據100
System.out.println(arr);
System.out.println(arr.contains(2));//判斷是否含有
arr.clear();//清空
System.out.println("LinkedList:");
LinkedList<Integer> lin=new LinkedList<>();
lin.addFirst(1);//在首部加1
lin.addLast(100);//在尾加100
lin.removeFirst();//移除首元素
lin.removeLast();//移除尾
lin.push(20);//壓棧
lin.push(100);
System.out.println(lin.peek());//返回棧頂 不彈棧
lin.pop();//返回棧頂 彈棧
System.out.println(lin);
System.out.println(lin.contains(20));//判斷是否含有
}
由於是繼承List,add,remove,get, size自然是都有的。contains是遍歷,時間複雜度O(n)
HashSet
public static void main(String[] args) {
// TODO 自動生成的方法存根
HashSet<Integer> hashset=new HashSet<>();
hashset.add(1);//添加
hashset.add(2);
hashset.add(3);
hashset.add(4);
hashset.add(4);
hashset.add(4);
System.out.println(hashset.contains(3));
System.out.println(hashset);
hashset.remove(2); //找到值2刪除
System.out.println(hashset);
}
哈希表最大的特點是不重複存儲數字,可以利用這個特點去重。在HashSet中是沒有下標概念的,所以remove刪除的是值。contains的時間消耗爲O(1)。
HashMap
HashMap<Integer, String> map=new HashMap<>();//key爲int value爲string
map.put(1, "hi"); //添加元素
map.put(1, "hello"); //key必須唯一,value可以重複。替換
map.put(2, "world");
map.put(3, "how");
map.put(4, "are");
map.put(5, "you");
map.remove(4);//刪除4對應的String
System.out.println(map.get(1));//得到key=1的value
System.out.println(map.containsKey(3));//判斷包含key
System.out.println(map.containsValue("how"));//判斷包含value
System.out.println(map.size());//得到size
System.out.println(map);
map.clear();
}
超有用的HashMap。key必須唯一,value可以重複。containsKey和containsValue判斷的時間複雜度都是O(1)。可以構造關係表。
我在做Leetcode990題的時候寫過一個用HashMap的題解,有興趣可以看看:
https://leetcode-cn.com/problems/satisfiability-of-equality-equations/solution/yi-tiao-bi-jiao-ben-dan-shi-neng-xing-de-si-lu-by-/
引用
https://www.jianshu.com/p/63b01b6379fb
https://www.cnblogs.com/jing99/p/7057245.html