| 集合 | 底层实现 | 是否有序 | 数值是否可以重复 | 能否更改数值 | 查询效率 | 增删效率 |
|---|---|---|---|---|---|---|
| std::set | 红黑树 | 有序 | 否 | 否 | O(log n) | O(log n) |
| std::multiset | 红黑树 | 有序 | 是 | 否 | O(log n) | O(log n) |
| std::unordered_set | 哈希表 | 无序 | 否 | 否 | O(1) | O(1) |
| 集合 | 底层实现 | 是否有序 | key是否可以重复 | 能否更改key | 查询效率 | 增删效率 |
|---|---|---|---|---|---|---|
| std::map | 红黑树 | key有序 | 否 | 否 | O(log n) | O(log n) |
| std::multimap | 红黑树 | key有序 | 是 | 否 | O(log n) | O(log n) |
| std::unordered_map | 哈希表 | key无序 | 否 | 否 | O(1) | O(1) |
| 实现方式 | 底层实现 | 是否有序 | 数值是否可以重复 | 能否更改数值 | 查询效率 | 增删效率 |
|---|---|---|---|---|---|---|
| TreeSet | 红黑树 | 有序 | 否 | 否 | O(log n) | O(log n) |
| HashSet | 哈希表 | 无序 | 否 | 否 | O(1) | O(1) |
| 实现方式 | 底层实现 | 是否有序 | key是否可以重复 | 能否更改key | 查询效率 | 增删效率 |
|---|---|---|---|---|---|---|
| TreeMap | 红黑树 | key有序 | 否 | 否 | O(log n) | O(log n) |
| HashMap | 数组+链表+红黑树 | key无序 | 否 | 否 | O(1) | O(1) |
| IdentityHashMap | 哈希表 | key无序 | 是 | 否 | O(1) | O(1) |
无序不可重复
public void testHashSet(){
HashSet set = new HashSet<>();
set.add(10);
set.add(20);
set.add(6);
set.add(7);
System.out.println(set);
//输出: [20, 6, 7, 10]
}
TreeSet
有序不可重复
public void testTreeSet(){
TreeSet set = new TreeSet<>();
set.add(10);
set.add(20);
set.add(6);
set.add(new Integer(6));
set.add(7);
System.out.println(set);
//输出:[6, 7, 10, 20] ,原因:HashSet是用哈希表(散列表结构)实现的,排序按照hashcode的大小
}
HashMap
key无序不可重复
MapHashMapmap1 = new HashMap<>(); map1.put("aa",100); map1.put("aaa",200); map1.put("bb",60); map1.put("ba",60); map1.put("bc",600); map1.put("cc",60); System.out.println(map1); //{aa=100, aaa=200, bb=60, cc=60, bc=600, ba=60} ,结果:无序
key有序不可重复
public void TestTreeMap(){
Map map1 = new TreeMap<>();
map1.put("aa",1);
map1.put("aaa",2);
map1.put("bb",3);
map1.put("ba",4);
map1.put("bc",5);
map1.put("cc",6);
//按照key的字典序排
System.out.println(map1);
//输出结果:{aa=1, aaa=2, ba=4, bb=3, bc=5, cc=6}
}
IdentityHashMap
key无序可重复
Mapmap3 = new IdentityHashMap<>(); map3.put(1,"aa"); map3.put(2,"aaa"); map3.put(3,"bb"); map3.put(4,"ba"); map3.put(5,"bc"); map3.put(new Integer(2),"cc"); System.out.println(map3); //输出结果:{3=bb, 4=ba, 2=cc, 2=aaa, 1=aa, 5=bc}



