C++和JAVA的容器对照

说明:c++版本为c++ 11,java版本参考java se8,如果版本不同可能有差异;

c++ JAVA 解释
array [ ] 固定大小的数组
vector ArrayList 可变长度的数组
Vector 可变长度数组,支持同步操作,效率比ArrayList略低
list LinkedList 链表,便于增删
forward_list 单链表,注意不提供size()操作
deque ArrayDeque 双端队列
stack Stack
queue Queue 队列
priority_queue PriorityQueue 优先队列(大根堆、小根堆)
set
ps:java里如果希望Set集合去除自定义重复对象,要记得重写对象的hashCode和equals方法
TreeSet 集合,默认底层基于红黑树对数据按大小升序排序; 自定义类型排序要重写排序规则
multiset 集合,允许重复元素
unordered_set HashSet hash组织的set,数据无序;jdk8之前哈希表采用数组+链表组成,jdk8之后采用数组+链表+红黑树组成
unordered_multiset hash组织的multiset,支持重复数据
LinkedHashSet 按插入顺序排序,支持hash查找,相比HashSet,底层增加了双链表记录数据增添顺序
map TreeMap key-value映射,按照key排序
multimap 允许重复key的map
unordered_map HashMap hash组织的map
unordered_multimap hash组织的multimap
LinkedHashMap 按插入顺序排序,支持hash查找
HashTable 类似HashMap,支持同步操作
bitset BitSet 位操作

TreeSet 自定义类型排序要重写排序规则:
方法一:让自定义的类实现Comparable接口,这样直接调用TreeSet插入自定义对象即可自动排序:

public class Car implements Comparable{
    String name;
    double price;
	public double getPrice() {
        return price;
    }
    @Override
    public int compareTo(Car o) {
        return Double.compare(this.price,o.getPrice());
    }
    //注意这种情况下,当对象价格相同,TreeSet 会认为是重复对象,会只保留第一个对象。
    //要想价格相同也保留,可以在Double.compare(this.price,o.getPrice())的值是0的时候返回1或-1。

方法二:TreeSet带有参数构造器,可以自定义Comparator匿名类对象来定制比较规则

TreeSet myset = new TreeSet<>(new Comparator() {
	@Override
	public int compare(Car o1, Car o2) {
		return Double.compare(o1.getPrice(), o2.getPrice());
	}
});

//lambda简写格式:
TreeSet myset = new TreeSet<>((o1, o2) -> Double.compare(o1.getPrice(), o2.getPrice()));

注意当同时定义了类实现Comparable接口和自定义Comparator匿名类对象俩种方法时,java默认选择后者作为排序准则。

你可能感兴趣的:(java,C++,java,c++,开发语言)