java中treemap释放_81.Java集合之TreeMap
TreeMap
TreeMap的排序,TreeMap可以對集合中的鍵進行排序。如何實現鍵的排序?
方式一:元素自身具備比較性
和TreeSet一樣原理,需要讓存儲在鍵位置的對象實現Comparable接口,重寫compareTo方法,也就是讓元素自身具備比較性,這種方式叫做元素的自然排序也叫做默認排序。
方式二:容器具備比較性
當元素自身不具備比較性,或者自身具備的比較性不是所需要的。那么此時可以讓容器自身具備。需要定義一個類實現接口Comparator,重寫compare方法,并將該接口的子類實例對象作為參數傳遞給TreeMap集合的構造方法。
注意:當Comparable比較方式和Comparator比較方式同時存在時,以Comparator的比較方式為主;
注意:在重寫compareTo或者compare方法時,必須要明確比較的主要條件相等時要比較次要條件。(假設姓名和年齡一直的人為相同的人,如果想要對人按照年齡的大小來排序,如果年齡相同的人,需要如何處理?不能直接return 0,以為可能姓名不同(年齡相同姓名不同的人是不同的人)。此時就需要進行次要條件判斷(需要判斷姓名),只有姓名和年齡同時相等的才可以返回0.)
通過return 0來判斷唯一性。
importjava.util.TreeMap;public classDemo4 {public static voidmain(String[] args) {
TreeMap tree = new TreeMap();
tree.put("張三", 19);
tree.put("李四", 20);
tree.put("王五", 21);
tree.put("趙六", 22);
tree.put("周七", 23);
tree.put("張三", 24);
System.out.println(tree);
System.out.println("張三".compareTo("李四"));//-2094
}
}
自定義元素排序
importjava.util.Comparator;importjava.util.Iterator;importjava.util.Map.Entry;importjava.util.Set;importjava.util.TreeMap;public classDemo3 {public static voidmain(String[] args) {
TreeMap hm = new TreeMap(newMyComparator());
hm.put(new Person("jack", 20), "1001");
hm.put(new Person("rose", 18), "1002");
hm.put(new Person("lucy", 19), "1003");
hm.put(new Person("hmm", 17), "1004");
hm.put(new Person("ll", 25), "1005");
System.out.println(hm);
System.out.println(hm.put(new Person("rose", 18), "1006"));
Set> entrySet =hm.entrySet();
Iterator> it =entrySet.iterator();while(it.hasNext()) {
Entry next =it.next();
Person key=next.getKey();
String value=next.getValue();
System.out.println(key+ " = " +value);
}
}
}class MyComparator implements Comparator{
@Overridepublic intcompare(Person p1, Person p2) {if (p1.getAge() >p2.getAge()) {return -1;
}else if (p1.getAge()
}returnp1.getName().compareTo(p2.getName());
}
}class Person implements Comparable{privateString name;private intage;
Person() {
}public Person(String name, intage) {this.name =name;this.age =age;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}
@Overridepublic inthashCode() {return this.name.hashCode() + age * 37;
}
@Overridepublic booleanequals(Object obj) {if (obj instanceofPerson) {
Person p=(Person) obj;return this.name.equals(p.name) && this.age ==p.age;
}else{return false;
}
}
@OverridepublicString toString() {return "Person@name:" + this.name + " age:" + this.age;
}
@Overridepublic intcompareTo(Person p) {if (this.age >p.age) {return 1;
}else if (this.age
}return this.name.compareTo(p.name);
}
}
注意:Set的元素不可重復,Map的鍵不可重復,如果存入重復元素如何處理
Set元素重復元素不能存入add方法返回false
Map的重復健將覆蓋舊鍵,將舊值返回。
總結
以上是生活随笔為你收集整理的java中treemap释放_81.Java集合之TreeMap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java下拉框查询_[Java教程]jQ
- 下一篇: 全球变暖java_全球变暖 蓝桥杯