欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > Java对应C++ STL的用法

Java对应C++ STL的用法

2024/10/24 17:25:14 来源:https://blog.csdn.net/qq_55788328/article/details/140071090  浏览:    关键词:Java对应C++ STL的用法

sort:

1:java.util.Arrays中的静态方法Arrays.sort()方法,针对基本数据类型和引用对象类型的数组元素排序

2:java.util.Collections中的静态方法的Collections.sort()方法,针对集合框架中的动态数组,链表,树,哈希表等( ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap )进行排序。下面分别介绍两种用法。

Collections.sort(list,new Comparator<Integer>(){//升序排序public int compare(Integer str1,Integer str2){String s1=str1+""+str2;String s2=str2+""+str1;return s1.compareTo(s2);//变成-s1.compareTo(s2)就是降序排序了}
});

reverse:

对于集合,使用Collections.reverse()

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Collections.reverse(list);

对于字符串,使用StringBuilder.reverse()

String str = "Hello, World!";
StringBuilder reversedStr = new StringBuilder(str).reverse();
ArrayList:

对应于C++的vector容器

#等价于vector<int>vec[maxn]
private final int maxn=(int)2e5+5
ArrayList<Integer>list=new ArrayList[maxn]将元素插入到指定位置的 arraylist 中
public boolean add(E e)从集合中获取元素,参数是索引编号,返回值就是对应位置的元素
public E get(int index)从集合中删除元素,参数是索引编号,返回值就是被删除的元素
public E remove(int index)获取集合的尺寸长度,返回值是集合中包含的元素个数
public int size()

Stack和Queue容器:

Stack:

import java.util.Stack;
public class StackExample {public static void main(String[] args) {Stack<Integer> stack = new Stack<>();// 添加元素stack.push(1);// 查看栈顶元素int top = stack.peek();// 移除栈顶元素int popped = stack.pop();}
}

Stack 的基本操作

  • push(E item):将元素压入栈顶。
  • pop():移除并返回栈顶元素。
  • peek():返回栈顶元素,但不移除。
  • isEmpty():检查栈是否为空。

Queue:Queue在Java中是一个接口,它的实现类有PriorityQueue和LinkedList,LinkedList即为C++种的Queue

import java.util.LinkedList;
import java.util.Queue;public class QueueExample {public static void main(String[] args) {Queue<Integer> queue = new LinkedList<>();// 添加元素queue.add(1);// 查看队首元素int front = queue.peek();// 移除队首元素int removed = queue.poll();// 检查队列是否为空boolean isEmpty = queue.isEmpty();}
}

Queue 的基本操作

  • add(E e):将元素添加到队列尾部。
  • poll():移除并返回队首元素,如果队列为空则返回 null
  • peek():返回队首元素,但不移除,如果队列为空则返回 null
  • isEmpty():检查队列是否为空。

TreeSet容器:

TreeSet即对应C++中的set:

Integer[]nums={1,2,3,4,5};
ArrayList<Integer>list=new ArrayList<>(List.of(nums));
Collections.addAll(list,4,5,6);
TreeSet<Integer> s = new TreeSet<>(list);
// 遍历集合中的所有元素
Iterator<Integer> it = s.iterator();
while (it.hasNext()) {Integer element = it.next();if (it.hasNext()) {System.out.print(element + " ");} else {System.out.print(element);}
}
  • contains(Object o):检查集合中是否包含指定元素。
  • first()last():获取集合中的第一个和最后一个元素。
  • ceiling(E e)floor(E e):分别返回大于或等于给定元素的最小元素和小于或等于给定元素的最大元素。
  • higher(E e)lower(E e):分别返回严格大于和严格小于给定元素的最小和最大元素。
  • boolean remove(Object o)从集合中删除指定的元素 o,如果删除成功则返回 true

Multiset容器:

Java中没有直接与C++的Multiset对应的容器,不过可以用TreeMap模拟实现,以leetcode该题为例 480. 滑动窗口中位数

class Solution {public double[] medianSlidingWindow(int[] nums, int k) {int n = nums.length;double[] ans = new double[n-k+1];Set<int[]> set = new TreeSet<>((a, b)->a[0]==b[0] ? Integer.compare(a[1], b[1]) : Integer.compare(a[0], b[0]));for(int i=0; i<k; i++) set.add(new int[]{nums[i], i});        for(int i=k, j=0; i<n; i++, j++){ans[j] = findMid(set);set.add(new int[]{nums[i], i});set.remove(new int[]{nums[i-k], i-k});}    ans[n-k] = findMid(set);return ans;}double findMid(Set<int[]> set){int mid = (set.size() - 1) / 2;var it = set.iterator();while(mid-->0) it.next();return set.size()%2 == 0 ? ((double)it.next()[0] + it.next()[0]) / 2 : it.next()[0];} 
}

TreeMap: 

等价于C++的map

HashMap:

等价于c++的unordered_map

pair和tuple:

lower_bound/upper_bound:

priority_queue:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com