欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java集合--集合扩展

程序员文章站 2022-05-22 12:33:15
...

内容学习于:edu.aliyun.com


1. Stack栈

  在浏览器上存在有“后退”按钮,在Android手机上存在有一个“返回”,在开发工具上存在有“撤销"功能,会发现所有的操作都是最晚操作的功能永远都是最先恢复,而越早的操作越晚恢复,实际上这就属于一种栈的结构。

  • public class Stack extends Vector

  Stack类是Vector 的子类,但是需要记住的是,Vector 类的内部是利用数组的形式实现的,而Stack的操作不能够使用Vector类中定义的方法,而应该使用本类自己扩充的方法。

  • 入栈:public E push(E item)
  • 出栈:public E pop()
  • 判断栈是否为空:public boolean empty()

  需要记住的是,如果要想通过栈弹出所需要的数据,那么必须保证栈中的内容不为空,如果为空则会产生如下异常:

  • Exception in thread “main” java.util.EmptyStackException

  而后观察Stack中的源代码可以发现,在进行栈数据压入、弹出等操作的时候全部都有同步的操作支持,即:栈的默认实现都需要考虑到多线程的同步处理。

2. Properties属性操作

  java.util.Properties是一个属性的操作类,实际上这个类的名字和之前讲解过的“*.properties"是相同的,Properties 类主要的功能是进行属性定义(属性的类型全部都是String), 同时也可以方便的通过输入流读取和写入输出流(“*.properties" 文件可以理解为一种文件的输入流和输出流),Properties 是Hashtable的子类,观察类的定义:

  • public class Properties extends Hashtable<Object,Object>

  在Properties继承Hashtable类的时候,所设置的泛型类型都是Object,因为Properties不需要考虑所设置的泛型,它所有的数据类型必须是字符串(String), Propertis 类中提供的常用方法有如下几个:

No. 方法名称 类型 描述
01 public Properties() 构造 创建properties实例,默认长度为8
02 public Object setProperty(String key, String value) 方法 设置属性内容
03 public String getProperty(String key) 方法 获取属性内容,如果不存在返回null
04 public String getProperty(String key, String defaultValue) 方法 获取属性内容,如果不存在返回默认值
05 public void list(PrintStream out) 方法 列出全部属性
06 public void list(PrintWriter out) 方法 列出全部属性
07 public void store(OutputStream out, String comments) throws IOException 方法 向输出流输出全部内容
08 public void load(InputStream inStream) throws IOException 方法 向输入流读取数据

  通过以上的方法可以发现,使用Properties实际上可以从任意的位置上进行属性内容的读取和输出。

Properties简单操作:

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();
        pro.setProperty("ZZ","郑州");
        System.out.println("【查询的数据存在】" + pro.getProperty("ZZ"));
        System.out.println("【查询的数据不存在】" + pro.getProperty("bj"));
        System.out.println("【查询的数据不存在,有默认数据】" + pro.getProperty("bj","查询的数据不存在!!"));
    }
}

结果:

【查询的数据存在】郑州
【查询的数据不存在】null
【查询的数据不存在,有默认数据】查询的数据不存在!!

  如果有需要(一定有此需要)可以利用输出和输入流进行属性内容的保存和加载。

文件的保存和加载:

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();
        pro.setProperty("zz", "郑州");
        pro.setProperty("bj", "北京");
        pro.setProperty("wh", "武汉");
        //保存properties文件
        pro.store(new FileOutputStream(
                        new File("d:" + File.separator + "area.properties")),
                "Area Info");
        //加载资源文件
        pro.load(new FileInputStream(
                new File("d:" + File.separator + "area.properties")));
        System.out.println(pro.getProperty("zz"));
    }
}

结果:

郑州

比较:关于Properties与ResourceBundle区别?

  • Properties实现的是一个属性操作,那么保存属性资源的可以是任意的文件后缀,并且在进行加载的时候,如果指定属性的key不存在,那么返回的是null;
  • ResourceBundle主要加载的是“*.properties’资源文件,如果现在要查询的key不存在,则会产生异常,但是特别需要注意的是,ResourceBundle 可以与Local结合实现不同语言资源文件的加载。

  在之前讲解JavaIO编程的时候写过一个代码:

  • System. getProperties(). list (System.out) ;

  实际上System类中的getPropertes(方法返回的就是一个Properties类的实例化对象,而list()方法里面只需要接收一个PrintStream或者是PrintWriter就可以实现指定位置的输出。

3. Collections工具类

  java.uilCollctions提供的是一个类集操作的工具类,它可以弥补原始类集设计之中的一些缺陷,提供更加丰富的操作方法。
  类结构如下图所示:Java集合--集合扩展

Collections操作:

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        List<String> all = new ArrayList<>();
        Collections.addAll(all,"Hello","MLDN","Everyone");
        Collections.sort(all);//排序
        System.out.println(Collections.binarySearch(all,"MLDN"));//二分查找
    }
}

结果:

2

  Java之中的Collections只是弥补了传统类集设计里面的一些功能的缺失,但是考虑到实际应用的场景下,这些缺失的功能未必都会经常性的使用到。