前言
只要刷题一定会用到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