map接口下的 hashSet LinkedHashSet treeSet
HashSet 底层数据结构是哈希表. HashSet 不是线程安全的 集合元素可以是 null
-
哈希表:是一个元素为链表的数组,综合了数组和链表的优点 (像新华字典一样) (JDK1.7之前)
-
HashSet 保证元素唯一性是靠元素重写hashCode()和equals()方法来保证的,如果不重写则无法保证
TreeSet<Student> treeSet = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
//按照总分高低来排序学生对象
int num = s1.getTotalScore() - s2.getTotalScore();
//总分一样还得比较姓名
int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
return -num2;
}
});
LinkedHashSet
- LinkedHashSet 元素有序 , 并且唯一( 链表保证有序 哈希表保证元素唯一)
treeSet 元素有序且唯一
-
treeSet 若进行在自然排序则要实现comparaable接口来实现
-
treeSet 实现排序:二叉树的数据结构 先存入一个树根 分两个叉
存储元素时 跟树根比较 小的放在左边 大的放在右边
如果相等就不存储
取的时候按照 左中右的顺序来取 -
treeMap的遍历方式
-
根据健值遍历
public class** Demo6 {
**public static void** main(String[] args) {
TreeMap<String, Integer> treeMap = **new** TreeMap<>();
treeMap.put(**"****上海****"**,10000);
treeMap.put(**"****北京****"**,20000);
Set<String> set = treeMap.keySet();
**for** (String s : set) {
System.**out**.println(s+**"==="**+treeMap.get(s));
}
}
}
- 根据值遍历
**public class** Demo6 {
**public static void** main(String[] args) {
TreeMap<String, Integer> treeMap = **new** TreeMap<>();
treeMap.put(**"****上海****"**,10000);
treeMap.put(**"****北京****"**,20000);
Set<Map.Entry<String, Integer>> set = treeMap.entrySet();
**for** (Map.Entry<String, Integer> ss : set) {
String key = ss.getKey();
Integer value = ss.getValue();
System.**out**.println(key+**"===="**+value);
}
System.out.println(s+"==="+treeMap.get(s));
}
}