Leetcode Java的STL簡單總結

前言

只要刷題一定會用到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

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