Java集合04

TreeSet类

概述

使用元素的自然顺序对元素进行排序

或者根据创建set时提供的Comparator比较器进行排序

具体取决于使用的构造方法

排序:

1、自然排序(传入的数据类型具备实现了Comparable接口)

2、比较器排序

在创建集合的时候,调用带参数的构造方法,这个参数是实现了Comparator接口的子类对象

TreeSet保证元素的排序和唯一性

底层数据结构是红黑树(红黑树是一种自平衡的二叉树)

注意:若将自建类对象存储进TreeSet需要实现comparable接口,重写compareTo方法

因为add()方法中需要用到compareTo方法来判断大小来进行树排序

自己根据类的情况,来分析主要条件次要条件,来返回0还是正负值

//TreeSet构造方法时无参的解决方法(自然排序)
public class Student implements Comparable<Student> {
    private String name;
    private int age;
​
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
​
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
​
    @Override
    public int compareTo(Student o) {
        int i1=this.name.compareTo(o.name);     
        int i2=i1==0?this.age-o.age:i1;
        return i2;
    }
}
//比较器排序
class Student{
    ....
}
​
class Test{
    public static void main(String args[]){
        TreeSet<Student> students=new TreeSet<>(new Comparator<Student>(){
            @Override
            public int compare(Stduent o1,Student o2){
                int i1=o1.name.compareTo(o2.name);     
                int i2=i1==0?o1.age-o2.age:i1;
                return i2;
            }
        });
    }
}

Collection集合类总结

Collection(接口)

List(接口) 元素有序,不唯一

List相关集合有三种遍历方式

1、结合size()和get()方法有普通for循环

2、迭代器遍历方式

3、增强for循环

ArrayList

底层是数组,查询快,增删慢

线程不安全,效率高

Vector

底层是数组,查询快,增删慢

线程安全,效率低

LinkedList

底层是链表,查询慢,增删快

线程不安全,效率高

Set(接口) 元素唯一,无序

Set相关集合有三种遍历方式

1、迭代器方式遍历

2、增强for循环

HashSet

底层依赖哈希表,依赖hashCode()和equals()方法来保证元素唯一的

LinkedHashSet

底层依赖哈希表和链表,哈希表保证元素唯一,链表保证元素有序

TreeSet

底层是红黑树(自平衡二叉树)

排序依赖自然排序和比较器排序

Map接口

Map用于保存具有映射关系的数据,Map集合里保存着两组值,一组用于保存Map的ley,另一组保存着Map的value

Map和Set的关系比较密切,虽然Map中存放的是键值对,Set中存放的是单个对象,但如果把value看做key的附庸,key在哪里,value就在哪里,这样就可以像对待Set一样来对待Map。事实上,Map提供了一个Entry内部类来封装key-value对,在计算Entry存储时则只考虑Entry封装的key。

如果把Map集合里的所有value放在一起来看,他们又类似于一个List,元素可以重复,每个元素可以根据索引来找,只是Map中的索引不再是整数值,而是以另一个对象作为索引

概述

将键映射到值的对象

一个映射不能包含重复的键

每个键最多只能映射到一个值

异同点

Map是双列的,Collection是单列的

Map的键唯一,Collection的子体系Set是唯一的呃

Map集合的数据结构值针对键有效,跟值无关

Collection集合的数据结构是针对元素有效

内部类Entry

Map中包括一个内部类Entry,该类封装一个键值对,常用方法

Object getKey():返回该Entry里包含的key值

Object getValue():返回该Entry里包含的value值

Object setValue(V value):设置该Entry里包含的value值,并设置新的value值

接口成员方法

V put(K key,V value)

添加元素

如果键是第一次存储,就直接存储元素,返回null

如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

V remove(Object key)

根据键删除键值对元素,并把值返回

void clear()

移除所有的键值对元素

boolean containsKey(Object key)

判断集合是否包含指定的键

boolean containsValue(Object value)

判断集合是否包含指定的值

boolean isEmpty()

判断集合是否为空

int size()

返回集合中的键值对的对数

V get(Object key)

根据键获取值

Set<K> keySet()

获取集合中所有键的集合

Collection<V> values()

获取集合中所有值的集合

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

返回一个键值对的Set集合

Map集合遍历

方式1:根据键找值

获取所有键的集合

遍历键的集合,获取到每一个键

根据键找值

方式2:根据键值对对象找键和值

获取所有减值对对象Entry的集合

遍历键值对对象的集合,获取到每一个减值对对象

根据键值对对象找键和值

HashMap类

概述

键是哈希表结构,可以保证键的唯一性

注意:

当引用类型作为Key值的时候,要重写equals方法,理由与HashSet一致

LinkedHashMap类

概述

实现了Map接口,底层是依赖于哈希表和链表的,具有可预知的遍历顺序

哈希表保证唯一性,保证的是Key的唯一性

链表保证有序,保证的是键的有序(存储和取出顺序一致)

TreeMap类

概述

键是红黑树结构,可以保证键的排序和唯一

用法参考TreeSet

注意:若将自建类对象存储进TreeMap需要实现comparable接口,重写compareTo方法

因为add()方法中需要用到compareTo方法来判断大小来进行树排序

自己根据类的情况,来分析主要条件次要条件,来返回0还是正负值

1、自然排序

自建类需实现comparable接口,并重写compareTo方法

2、比较器排序

在TreeMap的构造方法里用匿名内部类实现comparator接口,并重写compareTo方法

HashMap和Hashtable的区别

1、相同点:他们存储的元素类型都是K-V格式的

2、不同点:

1.Hashtable是线程安全的;而HashMap不是线程安全的

2.Hashtable的key值和value的值都不允许为null;而HashMap可以

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值