在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]);
}
}