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

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