2021-07-20

Collection

Set

Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类.Set接口定义的常用方法如下:

序号变量和类型 方法描述
1int size()返回此集合中的元素数
2boolean add(E e)如果指定集合中的所加元素尚未存在,则将其添加到此集合中
3boolean remove(Objecto)如果存在,则从该集合中移除指定的元素
4boolean contains(Object o)如果此set包含指定的元素,则返回 true
5Iterator<E> iterator()返回此set中元素的迭代器

1.新增功能:static Set of(E… elements) 返回包含任意数量元素的不可修改集,

​ 其他方法从Collection继承

2.遍历方式:

​ foeach

//遍历及打印
for(String str:set){
    System.out.println(str);
}

​ iterator

Iterator<String> it =  set.iterator();
while(it.hasNext()){
	System.out.println(it.next());
}

3.注:其存放数据的顺序与内部真实存储的顺序可能不一致

HashSet

​ 无序的,不可重复–>是由HashMap维护的

  1. 底层结构:哈希表:数组+链表+红黑树

    1).hashCode():来自Object类

    ​ 默认根据对象的地址通过指定的哈希算法得到的整数值 ,整数的hashCode()方法的返回值就是原数本身。重写hashCode根据对象的内容计算而非根据地址计算,相等就在一个位桶里,再在一个柆桶中用equals实现去重。

    2).equals():比较对象是否相等,重写equals,比较对象的值而不是地址。

    a.对要存储的数据调用hashCode()方法得到一个整数值,用来表示这个数据:int num=数据对象,hashCode();

    b.对第一步得到的整数值 num进行某种hash算法,得到一个索引值,对应数组的位桶。

    c.找到对应的位桶,拿当前要存储的数据与桶中已有的数据比较是否相等。

    ​ 比较规则:对象1.equals(对象2)

    ​ 相等去重不添加,与桶中的数据不相等,添加

    d.桶中的数据由单向链表结构存储

    ​ 哈希表中的数据结构是一个节点数组Node[],每一个索引位置都是单向链表的首节点(链表头节点)

    哈希表中当链表的长度>8,数组的长度>64,会把链表变为红黑树(jdk1.8之后)

  2. 特点:查询、增删效率高,无序,去重

  3. 应用场景:存储数据由单个值决定的情况下,想要去重的情况下,适合使用Hashset

  4. 无新增方法

TreeSet

​ 无序,去重–>是由Treemap维护的

  1. ​ 底层结构:红黑树

  2. 特点:默认升序排序

  3. 新增方法:数据大小比较的相关方法,因为红黑树中的数据已经比较过大小,默认升序。

    1.不能存储不同类型的数据,不然会出现ClassLastException(类型转换异常).解决方法:

    ​ 指定自定义引用类型数据的比较规则

    ​ a.内部比较器,自然排序(定义在类的内部,是一种默认的比较规则 )

    ​ b.外部比较器,定制排序(定义在javabean类的外部,单独指定也可以在其初始化的时候重写其 comparator)

Map

​ 存储键值对数据(元素的集合,键值对的集合)K-V键值对

​ key,value可以为任意引用数据类型的数据;

​ key --> 唯一的,无序的 -->set集合

​ value --> 无序的,可重复的 -->Collection

​ 键值对为一个映射关系

​ key --> 映射 -->value

键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样

Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。(都继承了AbstractMap)

​ 其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。

​ 相同点:HashMap非线程安全,TreeMap非线程安全

方法名称说明
V get(Object key)返回 Map 集合中指定键对象所对应的值。V 表示值的数据类型
V put(K key, V value)向 Map 集合中添加键-值对,返回 key 以前对应的 value,如果没有, 则返回 null
V remove(Object key)从 Map 集合中删除 key 对应的键-值对,返回 key 对应的 value,如果没有,则返回null
Set entrySet()返回 Map 集合中所有键-值对的 Set 集合,此 Set 集合中元素的数据类型为 Map.Entry
Set keySet()返回 Map 集合中所有键对象的 Set 集合

其遍历方式:

  1. keySet()获取集合中的所有的key

  2. values() 获取集合中所有value

  3. entrySet()返回多个Map.Entry类型的键值对对象,一个Set集合

    Set<Map.Entry<K,V>> 引用=对象.entrySet()

HashMap

底层:哈希表(数组、链表、红黑树)

特点:查询、增删效率高

新增方法:无

遍历方式:与Map相同

通话null键与null值

TreeMap

底层结构:红黑树

特点:根据key对数据做升序排序

新增功能:1. 根据key做去重,根据key做排序

​ 要求:key指定比较规则(内部比较器,外部比较器)

Properties

​ 存储的键值对都是字符串

​ Properties可以保存到流中或从流中加载

配置文件properties格式,符合Properties的特点

public static void main(String[] args) throws IOException {
        Properties pro=new Properties();
        pro.setProperty("zhangsan","18");
        pro.setProperty("lisi","19");

        //void load(InputStream inStream) 从输入字节流中读取属性列表(键和元素对)。
        pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));

        //void store(OutputStream out, String comments) 将此 Properties表中的此属性列表(键和元素对)以适合使用 load(InputStream)方法加载到 Properties表的格式写入输出流。
        pro.store(new FileOutputStream(new File("D:\\training\\src\\db.properties")),"peizhi");
        System.out.println(pro);
    }

Collections工具类

类 java.util.Collections 提供了对Set、List、Map操作的工具方法。

例:sort(),shuffle(),reverse(),fill(),binarySearch()

    public static void main(String[] args) {
        /*
            void sort(List)  //对List容器内的元素排序,排序的规则是按照升序进行排序。
            void shuffle(List) //对List容器内的元素进行随机排列
            void reverse(List) //对List容器内的元素进行逆续排列
            void fill(List, Object)  //用一个特定的对象重写整个List容器
            int binarySearch(List, Object)//对于顺序的List容器,采用折半查找的方法查找特定对象
         */
        List<Integer> list = new ArrayList<>();

        list.add(3);
        list.add(1);
        list.add(2);
        list.add(5);
        list.add(4);

        System.out.println(list);

        //sort 升序排序徐
        Collections.sort(list);
        System.out.println(list);

        //sort(List<T> list, Comparator<? super T> c)

        //shuffle 随机排序
        //Collections.shuffle(list);
        System.out.println(list);

        //void reverse(List)翻转
        //Collections.reverse(list);
        System.out.println(list);

        //binarySearch  如果找到返回索引,找不到返回-插入点-1
        System.out.println(Collections.binarySearch(list,12));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值