/**
* HashMap根据键的HashCode存储数据,根据键获取值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
* HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。
* 如果需线程同步,可以使用Collections的synchronizedMap方法或者使用ConcurrentHashMap。
*/
Map<String,Object> hashMap = new HashMap<>();
hashMap.put("bbb", "2");
hashMap.put("ccc", "3");
hashMap.put("aaa", "1");
/** LinkedHashMap(双向链表HashMap)保持插入的顺序 */
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("bbb", 2);
linkedHashMap.put("ccc", 3);
linkedHashMap.put("aaa", 1);
/**
* TreeMap 是Java集合框架中 SortedMap 接口的一个实现,它内部通过红黑树对键值对进行排序。由于 TreeMap 的[键]会自动按照自然顺序或者构造时提供的 Comparator 进行排序,
* 因此它通常用于需要按[键]排序的场景。使用 TreeMap 时,如果[键]已经实现了Comparable接口,那么TreeMap就可以使用[键]的自然顺序进行排序。如果[键]没有实现Comparable接口,必须在
* 构造 TreeMap 时提供一个Comparator<>对象,以保证键的排序规则,示例如下:
* TreeMap<Person, String> map = new TreeMap<>(
* /// 匿名内部类的比较器
* new Comparator<Person>() {
* @Override
* public int compare(Person p1, Person p2) {
* int nameCompare = ***pareTo(p1.name);
* return (nameCompare != 0) ? nameCompare : ***pare(p1.age, p2.age);
* }
* }
* );
* 顺带说明:Comparable和Comparator都是用于定义排序规则的接口,但它们的使用场景和目的有所不同。Comparable接口的 compareTo 方法要求实现类自身具有比较能力,
* 它允许一个类在进行自然排序时提供一个全局统一的排序规则。而Comparator接口允许定义单独的比较器,它不依赖于对象的类型,可以在任何对象上定义排序规则,
* 且一个类可以有多个Comparator实现,为不同的排序规则提供支持。
*/
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("bbb", 2);
treeMap.put("ccc", 3);
treeMap.put("aaa", 1);
System.out.println("LinkedHashMap: " + linkedHashMap); // HashMap: {1=1, 2=2, 3=3}
System.out.println("HashMap: " + hashMap); // LinkedHashMap: {bbb=2, ccc=3, aaa=1}
System.out.println("TreeMap: " + treeMap); // TreeMap: {aaa=1, bbb=2, ccc=3}
/// ArrayList(数组)、LinkList(双向链表)保持元素的插入顺序
List<Integer> arrayList = new ArrayList<>(linkedHashMap.values());
List<Integer> linkedList = new LinkedList<>(linkedHashMap.values());
System.out.println("ArrayList: " + arrayList); // LinkedList: [2, 3, 1]
System.out.println("LinkedList: " + linkedList); // ArrayList: [2, 3, 1]
Map类型的元素顺序问题
于 2024-12-11 14:26:57 首次发布