zoukankan      html  css  js  c++  java
  • 通过BitSet完成对单词使用字母的统计

    什么是BitSet

      BitSet类实现了一组位或标记(flag),这些位可被分别设置或清除。当需要跟踪一组布尔值时,这种类很有用。

      您只需让每一位对应一个值,并根据需要设置或清除即可。

      标记(flag)是一个布尔值,表示程序中的一组开/关状态之一。

    位组

      需要表示大量的二进制数据(即只可以为0或1的比特值)时,BitSet类很有用。这些值也被称为开/关值或布尔值。

      使用BitSet类,可以用位来存储布尔值,而无需通过按位运算来提取值。您只需使用索引来引用每一位。

      另一个优点是,它可以自动增大,以表示程序所需的位数。

          

                   位组数据结构的组织

    相关函数

    (借鉴他人博客整理:http://www.cnblogs.com/happyPawpaw/p/3823277.html)

    public void set(int pos): 位置pos的字位设置为true。 
    public void set(int bitIndex, boolean value) 将指定索引处的位设置为指定的值。 
    public void clear(int pos): 位置pos的字位设置为false。
    public void clear() : 将此 BitSet 中的所有位设置为 false。 
    public int cardinality() 返回此 BitSet 中设置为 true 的位数。 
    public boolean get(int pos): 返回位置是pos的字位值。 
    public void and(BitSet other): other同该字位集进行与操作,结果作为该字位集的新值。 
    public void or(BitSet other): other同该字位集进行或操作,结果作为该字位集的新值。 
    public void xor(BitSet other): other同该字位集进行异或操作,结果作为该字位集的新值。
    public void andNot(BitSet set) 清除此 BitSet 中所有的位,set - 用来屏蔽此 BitSet 的 BitSet
    public int size(): 返回此 BitSet 表示位值时实际使用空间的位数。
    public int length() 返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加 1。 
    public int hashCode(): 返回该集合Hash 码, 这个码同集合中的字位值有关。 
    public boolean equals(Object other): 如果other中的字位同集合中的字位相同,返回true。 
    public Object clone() 克隆此 BitSet,生成一个与之相等的新 BitSet。 
    public String toString() 返回此位 set 的字符串表示形式。

    BitSet实例尝试

      通过BitSet来记录26个字母的使用情况,通过后期索引即可轻松得到对应值为1(True)的索引号。

      前期字符串转ASCII,改变对应BitSet的值。

      最后再ASCII转字符串,将其输出。

      相见代码。

    package DataStructe;
    
    import java.util.BitSet;
    import java.util.Iterator;
    import java.util.Scanner;
    
    import javax.security.auth.x500.X500Principal;
    
    public class BitSet_Text {
        public static void main(String[] args) {
            /*创建一个大小没有被指定的位组*/
            /*新位组中的所有位都被初始化为false*/
            BitSet bitSet=new BitSet();
            
            
            /*检测一个单词用了几个字母*/
            Scanner scanner=new Scanner(System.in);
            String word=scanner.nextLine();
            char[] getchar=word.toCharArray();
            
            for(int i=0;i<word.length();i++){
                int index=getchar[i];
                if(index>=97&&index<=122)
                {
                    //小写
                    int newindex=index-96;
                    bitSet.set(newindex);
                }
                else {
                    if(index>=65&&index<=90)
                    {
                        //大写
                        int newindex=index-64;
                        bitSet.set(newindex);
                    }
                    else {
                        System.out.println("存在非法字符");
                    }
                    
                }
                
                
                
            }
            
            System.out.print("包含的字母有:");
            for(int j=0;j<bitSet.size();j++)
            {
                
                
                boolean cout=bitSet.get(j);
                if(cout==true)
                {
                    int y=96+j;
                    char x=(char)y;
                    System.out.print(x );
                    
                }
            }
            
            
            
            
            
        }
    
    }

    作者:Rekent
    出处:http://www.cnblogs.com/rekent/
    本文版权归作者和博客园共有,欢迎转载、点赞,但未经作者同意必须保留此段申明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    ASP.NET MVC 让@Html.DropDownList显示默认值
    ASP.NET MVC View向Controller提交数据
    ASP.NET MVC Controller向View传值的几种方式
    ASP.NET MVC3中Controller与View之间的数据传递总结
    net MVC中的模型绑定、验证以及ModelState
    30分钟LINQ教程
    使用Html.BeginForm来提交表单
    @Html.DropDownList
    uni-app页面导航栏透明背景
    nom install 报错
  • 原文地址:https://www.cnblogs.com/rekent/p/6816934.html
Copyright © 2011-2022 走看看