map接口下的 hashSet LinkedHashSet treeSet

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));

  ​    }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值