黑马程序员-集合框架(二)

——- android培训java培训、期待与您交流! ———-

2.1 常用工具类

2.1.1 Collections

 是集合框架的工具类,里面的方法都是静态的。 
package com.test.blog7;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/*
 * 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。
 * 常用方法演示
 * */
public class CollectionsDemo {

    public static void main(String[] args) {
        List list = new ArrayList();
        List listNew = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println("-----------------------------------------------");
        // 将所有指定元素添加到指定 collection 中。
        System.out.println(Collections.addAll(listNew, "d", "e", "f"));
        System.out.println(listNew);
        System.out.println("-----------------------------------------------");
        // 使用指定元素替换指定列表中的所有元素
        Collections.fill(list, "fff");
        System.out.println(list);
        System.out.println("-----------------------------------------------");
        // 反转指定列表中元素的顺序。
        Collections.reverse(listNew);
        System.out.println(listNew);
        System.out.println("-----------------------------------------------");

        // 按照自然规则排序
        list.clear();
        list.add("abc13");
        list.add("abc12");
        list.add("abc17");
        list.add("abc51");
        list.add("abc21");
        Collections.sort(list);
        System.out.println("按自然顺序排序:" + list);
        Collections.sort(list, Collections.reverseOrder());
        System.out.println("按自然顺序的反序排序:" + list);
        System.out.println("-----------------------------------------------");
        // 获取最大值,最小值
        System.out.println("最大值" + Collections.max(list));
        System.out.println("最小值" + Collections.min(list));
        System.out.println("-----------------------------------------------");
        // 使用默认随机源对列表置换,是列表变得无序
        Collections.shuffle(list);
        System.out.println(list);
        System.out.println("-----------------------------------------------");
        //必须为list2初始化,否则会报IndexOutOfBoundsException异常
        List list2 = new ArrayList(Arrays.asList(new Object[list.size()]));
        Collections.copy(list2, list);
        System.out.println("list2>>" + list2);
    }

}

运行结果:
这里写图片描述

集合有一个共同的缺点,那就是线程不安全,被多线程操作时,容易出现问题.Collections提供获取同步安全的集合方法
  • synchronizedCollection(Collection c) 返回指定 collection 支持的同步(线程安全的)collection。
  • synchronizedList(List list) 返回指定列表支持的同步(线程安全的)列表。
  • synchronizedMap(Map

2.1.2 Arrays

package com.test.blog7;

import java.util.Arrays;
import java.util.List;

/*
 * 此类由 的静态方法组成。
 * 常用方法演示
 * */
public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr = { 3, 11, 5, 87, 66, 4, 7 };
        // 转换为字符串
        System.out.println(Arrays.toString(arr));
        System.out.println("------------------------------------");
        // 将数组转成集合
        String[] array = { "张三", "李四", "王五" };
        List<String> list = Arrays.asList(array);
        System.out.println("list集合:" + list);
        System.out.println("------------------------------------");
        // 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值
        System.out.println(Arrays.binarySearch(arr, 11));
        System.out.println("------------------------------------");
        // 对指定的数组按数字升序进行排序。
        Arrays.sort(arr);
        for (int string : arr) {
            System.out.print(string + " ");
        }
    }

}

运行结果:
这里写图片描述

2.1.3 System

描述系统信息的类,该类没有构造方法,该类的方法和属性都是静态的

常用方法说明:
static void exit(int status) 终止当前正在运行的 Java 虚拟机。
static void gc() 运行垃圾回收器。
static Properties getProperties() 确定当前的系统属性
static String getProperty(String key) 获取指定键指示的系统属性。
static String getProperty(String key, String def) 获取用指定键描述的系统属性。
static void setIn(InputStream in) 重新分配“标准”输入流。
static void setOut(PrintStream out) 重新分配“标准”输出流。
static void setProperties(Properties props) 将系统属性设置为 Properties 参数。
static String setProperty(String key, String value) 设置指定键指示的系统属性。

重要,获取当前系统属性

Properties pt = System.getProperties();
        Set<String> keyName = pt.stringPropertyNames();
        for (String key : keyName) {
            System.out.println(key + ": " + pt.getProperty(key));
        }

可以查看包括JVM版本,语言版本,系统编码等等信息

2.2 泛型

   泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉“类型”信息,使程序运行效率不受影响, 对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样。 由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,

泛型使用–<>
List list = new ArrayList();
声明一个类型为String的集合,那么该集合就只能添加String类型的元素,否则编译就不能通过

限定通配符的上边界:

 正确:Vector<? extends Number> x = new Vector<Integer>() ;
 错误:Vector<? extends Number> x = new Vector<String>();

限定通配符的下边界:

正确:Vector<? super Integer> x = new Vector<Number>();
错误:Vector<? super Integer> x = new Vector<Byte>();
限定通配符总是包括自己。?只能用作引用,不能用它去给其他变量赋值
Vector<? extends Number> y = new Vector<Integer>();
Vector<Number> x = y;
上面的代码错误,原理与Vector<Object > x11 = new Vector<String>();相似,只能通过强制类型转换方式来赋值。

好处:
1.泛型是一种强类型。其处理速度要比普通类快。
2.泛型用来解决创建和使用新的数据类型。泛型也使不同场合的代码重用更加方便。
3.与传统的类相比,泛型更加高效。
4.与传统类只能使用通用类型(如object)不同,泛型可以指定使用的类型,提供更好的类型保护。
5.性能和类型安全性大大提高。

2.3 总结

集合框架可以帮我们完成大部分常规的操作,所以有功能需求时候先看看Java的框架是否已经提供解决方法,如果有直接调用,如果没有再自己写方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值