1、list系列集合
-
有索引,基于数组存储数据
-
查询快,增删慢
-
public class ListDemo01 { public static void main(String[] args) { // 一些api // 1.创建一个ArrayList集合对象 ArrayList<String> lists = new ArrayList<>(); lists.add("java1"); lists.add("java2"); lists.add("java3"); // a.给某个索引位置插入一个元素 lists.add(1 , "MySQL"); System.out.println(lists); //[java1, MySQL, java2, java3] // b.根据索引获取对应位置处的元素 System.out.println(lists.get(2)); //java2 // c.根据索引删除元素 // 删除成功后返回被删元素值! System.out.println(lists.remove(1)); //MySQL System.out.println(lists); //[java1, java2, java3] // d.修改某个索引位置处的元素,修改成功返回之前的元素值! System.out.println(lists.set(1 , "MyBatis")); //java2 System.out.println(lists); //[java1, MyBatis, java3] } }
-
list系列集合因为有索引,所以除了迭代器、foreach、lambda表达式可以直接用for循环遍历
-
LinkedList也是list的实现类,增删快,查询慢,基于链表
-
LinkedList支持双链表,定位前后元素快,所以一些操作首尾元素的功能
-
//一些api public class ListDemo03 { public static void main(String[] args) { // 做一个队列 LinkedList<String> queue = new LinkedList<>(); // addFirst();将指定元素插入列表首位 // addLast();将指定元素插入列表末位 queue.addLast("1号"); queue.addLast("2号"); queue.addLast("3号"); queue.addLast("4号"); queue.addLast("5号"); queue.addFirst("6号插队"); System.out.println(queue); // removeFirst();移除并返回此列表的第一个元素 // removeLast();移除并返回此列表的最后一个元素 System.out.println(queue.removeFirst()); //6号插队 System.out.println(queue.removeFirst()); //1号 System.out.println(queue); //[2号, 3号, 4号, 5号] // 做一个栈 LinkedList<String> stack = new LinkedList<>(); // 入栈 : addFirst stack.push("第1颗子弹"); stack.push("第2颗子弹"); stack.push("第3颗子弹"); stack.push("第4颗子弹"); System.out.println(stack); //[第4颗子弹, 第3颗子弹, 第2颗子弹, 第1颗子弹] // 出栈:removeFirst System.out.println(stack.pop()); //第4颗子弹 System.out.println(stack.pop()); //第3颗子弹 System.out.println(stack); //[第2颗子弹, 第1颗子弹] } }
2、set系列集合
-
HashSet:无序不重复无索引
Set<String> sets = new HashSet<>();
-
只要两个对象内容一样就属于重复对象,set集合只会保留一个对象(可以重写hashCode和equals规则)
-
元素无序的原因:因为set集合底层采用了哈希表存储元素,当链表长度超过阈值8时,将链表转为红黑树,减少查找时间
-
LinkedHashSet:有序不重复无索引
-
底层也是用哈希表存储元素,但是每个元素都额外带一个链来维护添加顺序
3、总结
如果希望元素可以重复,又有索引,查询要快用ArrayList集合
如果希望元素可以重复,又有索引,增删要快要用LinkedList集合(适合查询元素比较少的情况,经常要首尾操作元素的情况)
如果希望增删改查都很快,但是元素不重复以及无序无索引,那么用HashSet集合
如果希望增删改查都很快且有序,但是元素不重复以及无索引,那么用LinkedHashSet集合
4、正则表达式
-
可用于做信息校验
-
预定义字符类
//. 任何字符(与行结束符可能匹配也可能不匹配) //\d 数字:[0-9] //\D 非数字: [^0-9] //\s 空白字符:[ \t\n\x0B\f\r] //\S 非空白字符:[^\s] //\w 单词字符:[a-zA-Z_0-9] //\W 非单词字符:[^\w]
-
量词
//X? X,一次或一次也没有 //X* X,零次或多次 //X+ X,一次或多次 //X{n} X,恰好 n 次 //X{n,} X,至少 n 次 //X{n,m} X,至少 n 次,但是不超过 m 次
-
-
可用于做网络爬虫