力扣Java刷题整理笔记(Deque、LinkedList)

在Java集合框架中:Collection和Map是2个独立的主接口。

在Collection下有4个子接口:

1.List接口:有序集合,允许重复元素。

具体实现:ArrayList、LinkedList、Vector

2.Set接口:无序集合,不允许重复的元素。

具体实现:HashSet、LinkedHashSet、TreeSet

3.Queue接口:普通队列接口,先进先出。

具体实现:LinkedList、PriorityQueue

4.Deque接口:双端队列接口,队列两端均支持插入和删除元素。

具体实现:LinkedList、ArrayDeque

在Map下:

具体实现:HashMap、LinkedHashMap、TreeMap、Hashtable

一、Collection子接口介绍

1.Deque(双端队列 Double Ended Queue)

简介:

支持从两端添加或移除元素

它可以被用作普通队列和栈

特性:

允许元素的双端插入和删除。

可以作为栈(后进先出)或队列(先进先出)使用。

实现类如ArrayDeque(数组实现,无容量限制且高效)和LinkedList(链表实现,适合频繁的插入删除操作)。

适用场景:

当需要快速在两端添加或移除元素时。

在需要同时具备栈和队列性质的场景。

常用方法:

deque.addFirst(1); // 队列头部添加元素

deque.addLast(2); // 队列尾部添加元素

int first = deque.removeFirst(); // 移除并返回队列头部元素

int last = deque.removeLast(); // 移除并返回队列尾部元素

二、具体实现类介绍

1.HashMap(哈希表)

常用方法:

hashmap.getOrDefault(键,默认值);        //如有有键,返回键对应的值,否则返回0

hashmap.entrySet();        //返回哈希列表

hashmap.put(键,值);        //将值与键关联,如键已存在替换旧值

hashmap.get(键);        //返回键映射的值

hashmap.remove(键);        //删除键的映射关系

hashmap.containsKey(键);        //查看是否包含键的映射关系,包含返回true

hashmap.containsValue(值);        //查看是否值对应有键,对应返回true

小技巧:

1. for( Map.Entry<Integer,Integer> entry : hashmap.entrySet() ){ };        //遍历哈希表内所有的键值集合。

entry.getKey();        //获得键值对的键

entry.getValue();        //获得键值对的值

2.LinkedList(链表)

简介:

LinkedList是Deque接口的一个具体实现,它基于链表结构实现,因此每个元素都是链表的一个节点。

LinkedList除了实现Deque接口外,还实现了List接口,所以它既支持队列的操作,也支持列表的操作,如索引访问。

特性:

每个元素都是链表的一个节点。

支持双端队列的全部操作。

实现了List接口,支持随机访问(但访问速度比ArrayList慢)。

插入和删除操作高效,不需要移动其他元素。

适用场景:

当需要频繁插入和删除元素时(特别是在列表的头部或尾部)。

当需要使用列表和双端队列的功能时。

实现List【列表】接口常用方法:

list.add(元素);        //添加元素

list.get(下标);        //访问下标对应的元素

list.indexOf(元素);        //返回元素对应的下标

list.remove(下标);        //移除下标对应的元素

list.size();                //返回列表的长度

实现Queue【普通队列】接口常用方法:

list.offer();        //向队列头部添加元素

list.peek();        //获取队列头部元素

list.poll();        //删除队列头部元素并且返回

实现Deque【双端队列】常用方法:

deque.addFirst();         //向队列头部添加元素

deque.addLast();         //向队列尾部添加元素

deque.removeFirst();         //移除队列头部元素

deque.removeLast();         //移除队列尾部元素

deque.peekFirst();         //获取队列头部元素

deque.peekLast();         //获取队列尾部元素

实现Deque【栈】常用方法:

deque.push(元素)        //元素入栈

deque.pop()        //返回栈顶元素,栈顶元素出栈

deque.peek()        //返回栈顶元素

三、其它

1.String字符串

str.length();        //返回字符串的长度

str.substring(开始位置,结束位置);        //截取一个字符串的指定长度

str.charAt(下标);        //返回指定索引处的字符

str.indexOf(字符串);        //返回str中首次出现的字符串的索引下标

str.toLowerCase();        //将字符串转化为小写

str.toUpperCase();        //将字符串转化为大写

str.startsWith(前缀);        //判断字符串是否以指定前缀开始

str.endWith(后缀);        //判断字符串是否以指定后缀结束

str.trim(字符串);        //得到一个新字符串,删除原始字符串首尾的空白

str.split(分隔符);        //根据分隔符来拆分字符串

四、算法

1.快速排序

  public static void quickSort(int nums[], int start, int end) {
        if(start<end){
            int x = nums[start];
            int left = start,right=end;
            while(left<right){
                while(left<right && nums[left]<x) left++;
                while(left<right && nums[right]>x) right--;
                int temp = nums[left];
                nums[left]=nums[right];
                nums[right]=temp;
            }
            nums[left]=x;
            quickSort(nums,start,left-1);
            quickSort(nums,left+1,end);
        }
    }
    public static void main(String[] args) {
        int[] nums={19,29,4,22,55,11,9,34};
        quickSort(nums,0,nums.length-1);
        for(int i=0; i<nums.length; i++){
            System.out.println(nums[i]);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值