TreeMap及TreeSet的总结(通俗易懂,轻松拿捏)

了解Treeset和TreeMap

TreeSet与TreeMap它们的底层是红黑树,而红黑树是一棵近似平衡的二叉搜索树,而HashSet和HashMap的底层是数组+链表实现的

具体继承关系如下图

Treeset和TreeMap的特点

因为TreeSet底层是用TreeMap实现的,所以两者的很多特点都相同,如下表:

底层数据结构

红黑树

是否有序

关于key有序

元素是否重复

不重复

线程安全

不安全

比较方式

实现Comparable接口或者提供比较器

TreeSet常用方法及测试

方法

说明

boolean add(E e)

如果元素不存在,添加元素到set集合中,返回true,

否则返回false

boolean remove(Object o)

如果元素存在,删除此元素,返回true,否则返回false

boolean contains(Object o )

如果set集合包含这个元素,返回true,否则返回false

boolean isEmpty()

如果set集合中没有元素,返回true,否则返回false

void clear()

删除set集合中的所有元素

Iterator iterator()

返回set集合的迭代器

int size()

返回set集合的元素个数

package lcoj;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
         Set<String> treeSet = new TreeSet<>();

        //添加元素 "张三" "李四" "王五"
        treeSet.add("张三");
        treeSet.add("李四");
        treeSet.add("王五");

        //删除元素 "张三"
        treeSet.remove("张三");

        //是否包含元素 "王五"
        boolean isContain = treeSet.contains("王五");
        System.out.println("是否包含元素王五: " + isContain);

        //集合是否为null
        boolean empty = treeSet.isEmpty();
        System.out.println("集合是否为空: " + empty);

        //得到元素个数
        int size = treeSet.size();
        System.out.println("元素个数: " + size);

        //迭代器遍历
        System.out.print("集合里面的元素:");
        Iterator<String> iterator = treeSet.iterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }

        //删除所有元素
        treeSet.clear();
    }
}

运行结果

是否包含元素王五: true
集合是否为空: false
元素个数: 2
集合里面的元素:李四 王五

使用TreeSet去重:

在这个例子中,数据为:{1, 2, 2, 2, 95, 11, 55}

创建一个TreeSet集合,把每个元素添加进去,就完成了去重操作。

set集合里面的数据为:{1, 2, 95, 11, 55}

package lcoj;

import java.util.Set;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 2, 2, 95, 11, 55};
        Set<Integer> treeSet = new TreeSet<>();

        //去重前, 打印
        System.out.println("去重前:");
        for (int val : arr) {
            System.out.print(val + " ");
        }
        System.out.println();


        //去重
        for (int val : arr) {
            treeSet.add(val);
        }

        //去重后, 打印
        System.out.println("去重后:");
        for (int val : treeSet) {
            System.out.print(val + " ");
        }
        System.out.println();
    }
}

运行结果

去重前:
1 2 2 2 95 11 55 
去重后:
1 2 11 55 95 

TreeMap常用方法及测试

方法

说明

V put(K key, V value)

将key和value作为键值对,添加到Map中

V get(Object key)

返回key对应的value

V getOrDefault(Object key, V defaultValue)

如果Map中有关于key对应的value

则返回Map中的value, 否则返回默认的value

boolean containsKey(Object key)

如果Map中有key则返回true

Set<Map.Entry<K,V>> entrySet()

返回一个set集合,里面的元素是Map.Entry<K, V>

Map.Entry<K, V>接口里获取key和value的方法

方法

说明

K getKey()

获取key

V getValue()

获取value

package lcoj;

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MapTest {
    public static void main(String[] args) {
        Map<String, Integer> map = new TreeMap<>();

        //使用put方法,把键值对放进map中
        //这里第一个参数是人名,第二个参数是年龄
        map.put("张三", 18);
        map.put("李四", 22);
        map.put("王五", 21);

        //获取"王五"对应的年龄
        Integer age = map.get("王五");
        System.out.println(age);

        //查看map里是否有"李四"
        boolean ret = map.containsKey("李四");
        System.out.println(ret);

        //得到Entry的set集合,遍历set集合
        //获取Entry对象,然后获取key和value
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.print("key = " + entry.getKey() + "\t");
            System.out.print("value = " + entry.getValue());
            System.out.println();
        }

    }
}

运行结果

21
true
key = 张三    value = 18
key = 李四    value = 22
key = 王五    value = 21

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马可波罗.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值