• 学习java的第二十四天。。。(泛型、Collections、枚举、包装类)


    今天学习了泛型,collections类、枚举、包装类


    泛型

    将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性,本质是参数化类型

    泛型集合可以约束集合内的元素类型

    典型泛型集合ArrayList、HashMap

        表示该泛型集合中的元素类型
        泛型集合中的数据不再转换为Object

    泛型修改昨天的代码

    1. public static void main(String[] args) {
    2. NewsTitle nt1 = new NewsTitle(1001,"佩罗西死了","张氏新闻");
    3. NewsTitle nt2 = new NewsTitle(1002,"中国成功发射一箭十六星","中国航天");
    4. NewsTitle nt3 = new NewsTitle(1003,"男子救落水5人后遇难同伴讲述经过","民间观察");
    5. NewsTitle nt4 = new NewsTitle(1004,"苏氏祖祠。苏炳添是苏东坡第29代孙","生活观察");
    6. NewsTitle nt5 = new NewsTitle(1005,"家长花200万给娃集奥特曼卡没集齐","四川观察");
    7. //准备容器:创建集合对象,创建ArrayList对象
    8. ArrayList al = new ArrayList();
    9. //将数据存储到集合中,向集合中添加元素不是通过元素下标来赋值,而是通过集合对象调用方法实现
    10. al.add(nt1);
    11. al.add(nt2);
    12. al.add(nt3);
    13. al.add(nt4);
    14. al.add(nt2);
    15. //可以通过集合对象调用方法实现对集合中元素的操作
    16. //获取集合中的元素个数
    17. int size =al.size();
    18. System.out.println(size);
    19. //获取集合中指定位置的元素
    20. // Object obj1 = al.get(0);
    21. // NewsTitle tit=(NewsTitle)obj1;
    22. // System.out.println(tit);
    23. for (int i = 0; i
    24. NewsTitle tit = al.get(i);
    25. System.out.println(tit);
    26. }
    27. System.out.println("---------");
    28. for (NewsTitle ntw : al) {
    29. System.out.println(ntw);
    30. }
    31. System.out.println("--------------------");
    32. //使用迭代器遍历集合
    33. /*
    34. * 集合对象调用iterator()方法将集合中的所有元素按照顺序取出来放入到迭代器容器里面
    35. * 然后通过迭代器对象调用hasnext()方法判断迭代器中是否有元素,有元素就通过next()方法取出这个元素
    36. * 判断一个就取出一个,判断一个就取出一个,所以可以使用循环来取出里面所有的元素
    37. */
    38. Iterator it=al.iterator();
    39. while(it.hasNext()){
    40. NewsTitle tit=it.next();
    41. System.out.println(tit);
    42. }
    43. System.out.println("---------------------");
    44. //将数据存贮到集合中的指定位置
    45. al.add(1,nt5);
    46. Iterator it1=al.iterator();
    47. while(it1.hasNext()){
    48. NewsTitle tit=it1.next();
    49. System.out.println(tit);
    50. }
    51. //删除集合中的元素
    52. System.out.println("------------");
    53. Object ob=al.remove(1);
    54. System.out.println(ob);
    55. al.remove(nt3);
    56. for (int i = 0; i
    57. NewsTitle tit = al.get(i);
    58. System.out.println(tit);
    59. }
    60. System.out.println("---------");
    61. //判断集合中是否含有指定元素
    62. boolean result = al.contains(nt5);
    63. System.out.println(result);
    64. //判断集合是不是空的
    65. System.out.println("集合是空的:"+al.isEmpty());
    66. //将集合转换成数组
    67. System.out.println("*************");
    68. Object[] objects=al.toArray();
    69. for (int i = 0; i < objects.length; i++) {
    70. System.out.println(objects[i]);
    71. }
    72. System.out.println("*************");
    73. //清空集合
    74. al.clear();
    75. System.out.println("集合是空的:"+al.isEmpty());
    76. System.out.println(al.size());
    77. }

    泛型的好处

    类型安全
    消除强制类型转换
    潜在的性能收益

    Collections类

    Java集合框架将针对不同数据结构算法的实现都保存在工具类中

    Collections和Collection不同,前者是集合的操作类,后者是集合接口

    Collections类常用方法

    Collections提供的常用静态方法

        sort():排序

    1. ArrayList al = new ArrayList();
    2. al.add("qwe");
    3. al.add("abf");
    4. al.add("abc");
    5. al.add("wer");
    6. al.add("hgd");
    7. al.add("acb");
    8. al.add("ahj");
    9. al.add("lok");
    10. for (String string : al) {
    11. System.out.println(string);
    12. }
    13. //集合元素升序排序
    14. System.out.println("--------");
    15. System.out.println("排序后");
    16. Collections.sort(al);
    17. for (String string : al) {
    18. System.out.println(string);
    19. }


        binarySearch():查找

    1. //查找元素,注意:查找之前要升序排序,否则不能保证结果的正确性
    2. int index=Collections.binarySearch(al, "acb");
    3. System.out.println(index);


        max()\min():查找最大\最小值

    1. System.out.println(Collections.max(al));
    2. System.out.println(Collections.min(al));

    枚举

    再给性别赋值的时候,正常情况下只能赋予男或女,其他值都是非法的

    所以有两个方法

    方法一:条件判断  方法二:使用枚举

    方法一:

    1. public String name;
    2. public String gender;
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. Student stu = new Student();
    6. stu.name="张三";
    7. stu.gender="你好";
    8. //再给性别赋值的时候,正常情况下只能赋予男或女,其他值都是非法的
    9. while(!(stu.gender.equals("男")||stu.gender.equals("女"))){
    10. System.out.println("性别只能为男或者女");
    11. stu.gender = sc.next();
    12. }
    13. System.out.println(stu.gender);
    14. sc.close();
    15. }

    方法二:使用枚举    枚举类是由一组固定的常量组成的类型

    1. public enum Genders {
    2. //枚举类是由一组固定的常量组成的类型
    3. 男,女;
    4. }
    1. public class Student {
    2. public String name;
    3. public Genders gender;
    4. public static void main(String[] args){
    5. Student stu = new Student();
    6. stu.name="张三";
    7. stu.gender=Genders.男;
    8. }
    9. }

    枚举的优点

    类型安全
    易于输入
    代码清晰

    包装类

    包装类把基本类型数据转换为对象   每个基本类型在java.lang包中都有一个相应的包装类

    包装类的作用

    提供了一系列实用的方法
    集合不允许存放基本数据类型数据,存放数字时,要用包装类型

     

    包装类的构造方法

    所有包装类都可以将与之对应的基本数据类型作为参数,来构造他们的实例
    除Character类外,其他包装类可将一个字符串作为参数构造它们的实例Number类型包装类使用字符串作为参数构造实力的时候,字符串需要能够转化成数字的字符串,否则就会报错(NumberFormatException)数据格式化异常
    Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false
    当Number包装类构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常

    1. byte num1=100;
    2. Byte byte1 = new Byte(num1);
    3. //输出方式和输出结果没有区别
    4. System.out.println(num1);
    5. System.out.println(byte1);
    6. short num2=100;
    7. Short short1 = new Short(num2);
    8. int num3=100;
    9. Integer int1= new Integer(num3);
    10. boolean num4 = true;
    11. Boolean bool1 = new Boolean(num4);
    12. System.out.println("---------------");
    13. Byte byte2 = new Byte("123");
    14. byte b1 = new Byte(byte2);
    15. System.out.println(b1);//字符串123
    16. System.out.println(byte2);//数字123
    17. Boolean boolean2 = new Boolean("qwe");
    18. System.out.println(boolean2);
    1. public static void main(String[] args) {
    2. //输出byte类型的最大值和最小值
    3. System.out.println(Byte.MIN_VALUE);
    4. System.out.println(Byte.MAX_VALUE);
    5. System.out.println(Short.MIN_VALUE);
    6. System.out.println(Integer.MAX_VALUE);
    7. }

  • 相关阅读:
    MATLAB源码-GRABIT从图像文件中提取数据点。
    Redis如何实现多可用区?
    阿里云日志上报乱码问题记录
    视频怎么添加水印?快来收好这些方法
    Compiere的应用字典介绍
    自底向上语法分析(bottom-up parsing)
    文档在线预览(三)将word、txt、ppt、excel、图片转成pdf来实现在线预览
    个人论坛系统的测试用例
    一文介绍使用 JIT 认证后实时同步用户更加优雅
    C++语法——map与set的封装原理
  • 原文地址:https://blog.csdn.net/qihaojinqiuma/article/details/126303423