栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第13章 集合(12)Properties/Stack/BitSet

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第13章 集合(12)Properties/Stack/BitSet

写在前面

Properties/Stack/BitSet 这几个集合非常巧妙,恰如其分的使用他们,可大大降低代码量,提高运行效率。

 13.5.3 Properties(配置属性)

是一种特殊的哈希表,可将哈希键值对保存到文件中,也可以从文件中取出键值对。具有以下特征:

 类似哈希映射,存放键值对

 键值都是String类型

 可以保存到文件中,也可以从文件中取出键值对

首先来看下继承结构:

Properties 是 Hashtable 的子类,所以它的键值对都不能为空值

主要方法如下:

❤李癩❤李癩❤李癩

import java.io.*;
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        //1.存储属性值
        Properties pr = new Properties();
        pr.setProperty("a","1");
        pr.setProperty("b","2");
        pr.setProperty("c","3");
 
        OutputStream output = null;
        InputStream input = null;
        try{
            output = new FileOutputStream("a.properties");
            //保存到文件
            pr.store(output,String.valueOf(new Date().getTime()));
 
            Properties pr2 = new Properties();
            input = new FileInputStream("a.properties");
            //从文件中加载
            pr2.load(input);
            //获取单一属性
            System.out.println(pr.getProperty("a"));
 
            //获取全部属性
            for(String name:pr2.stringPropertyNames()){
                System.out.println(name+"="+pr2.getProperty(name));
            }
 
        }catch (IOException e){
            e.printStackTrace();
        }
 
    }
 
}

❤李癩❤李癩❤李癩

运行结果:

尿寮

尿寮

实际使用时,这个类通常不会通过代码向它内部存储键值,而是作为配置文件,配置好之后,将键值对取出

 13.5.4 Stack(栈)

Stack 是栈,是一种受限的有序表,可进行数组、链表尾部的添加删除元素。

继承自 Vector(早期顺序表,同步表),内部是使用数组实现的。

它的方法非常少,只有5个,其中前4个比较常用:

❤李癩❤李癩❤李癩

import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        //1.存储属性值
       Stack stack = new Stack<>();
       stack.push(1);//1
       stack.push(2);//1 2
       stack.push(3);//1 2 3
       System.out.println(stack.pop());//1 2,弹出值为3
       System.out.println(stack.peek());//1 2, 栈顶2
        stack.push(4);// 1 2 4
        stack.push(5);// 1 2 4 5
       System.out.println(stack.search(2));//1 2 4 5, 距离栈顶(尾部)最近的2为倒数第三个,返回 3
 
    }
 
}

❤李癩❤李癩❤李癩

运行结果:

尿寮

尿寮

 13.5.5 BitSet(位集)

使用二进制,判断是否设置某个状态,常用于标签合并,判断存在性,属于位运算的包装类:

❤李癩❤李癩❤李癩

import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        BitSet friends1 = new BitSet();
        int[] f1s = new int[]{1,2,3,4,5};
        for(int item:f1s){
            friends1.set(item);
        }
 
        BitSet friends2 = new BitSet();
        int[] f1s2 = new int[]{2,3,5,6,7,8};
        for(int item:f1s2){
            friends2.set(item);
        }
 
        //拷贝一份
        BitSet copy = new BitSet();
        copy.or(friends1);
        copy.and(friends2);//求两者共同好友
        System.out.println(copy);
 
        copy.clear();
        copy.or(friends1);
        copy.or(friends2);//求两者至少一人好友
        System.out.println(copy);
 
        copy.clear();
        copy.or(friends1);
        copy.andNot(friends2);//求是1的好友不是2的好友
        System.out.println(copy);
    }
 
}

❤李癩❤李癩❤李癩

运行结果:

尿寮

尿寮

可能有小伙伴会有疑问,提出以下两个问题,在此进行解答。

 普通集合也可以进行交并补操作,为什么要使用位集?

时间空间代价不一样,使用位集速度要比普通集合要快的多,存储和交并补代价都是O(1),存储空间也要小的多(每种状态只需要使用一个bit位)

 有了位运算,为什么还要用位集呢?

对于最大处理状态在 64 以内的,直接使用位运算,写起来更简洁;

大于等于64的,建议使用位集,内部对于超过边界的状态进行了处理,保存在不同数字中。

总结:

 Properties 可用于公共配置文件,可将字符串键值对存储在文件中,也可从文件中取出键值对

 栈可以进行数组尾部的插入、删除、查看、查询某元素距离栈顶距离操作

 位集适合进行交并补操作,位集进行交并补等操作比普通集合要快

相关内容:选择 《Java核心技术 卷1》查找相关笔记

评论点赞收藏✨关注,是送给作者最好的礼物,愿我们共同学习,一起进步

如果对作者发布的内容感兴趣,可点击下方关注公众号 钰娘娘知识汇总 查看更多作者文章哦!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820504.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号