day08list集合、set集合、正则表达式

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、正则表达式

  • 可用于做信息校验

    1. 预定义字符类

      //. 任何字符(与行结束符可能匹配也可能不匹配)
      //\d 数字:[0-9]
      //\D 非数字: [^0-9]
      //\s 空白字符:[ \t\n\x0B\f\r]
      //\S 非空白字符:[^\s]
      //\w 单词字符:[a-zA-Z_0-9]
      //\W 非单词字符:[^\w]
      
    2. 量词

      //X? X,一次或一次也没有
      //X* X,零次或多次
      //X+ X,一次或多次
      //X{n} X,恰好 n 次
      //X{n,} X,至少 n 次
      //X{n,m} X,至少 n 次,但是不超过 m 次
      
  • 可用于做网络爬虫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值