JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用


JAVA把完事万物都定义为对象,而我们想使用数据类型也是可以引用的

一.基本数据类型的对象包装类

左为基本数据类型,又为引用数据类型

  • byte Byte
  • int Integer
  • long Long
  • boolean Booleab
  • float Float
  • double Double
  • char Character

我们拿Integer来举例子

//整数类型的最大值/最小值
sop("最大值:"+Integer.MAX_VALUE);
sop("最小值:"+Integer.MIN_VALUE);

输出

基本数据类型对象包装类的最常见作用

  • 就是用于基本数据类型和字符串数据类型之间的转换

    • 基本数据类型转成字符串

      基本数据类型+“”

      Integer.toString(34)

    • 字符串转成基本数据类型

      // 将一个字符串转为整数
      int num = Integer.parseInt("123");
      sop("值:" + (num + 5));

      输出的结果

像其他的使用方法都是类似的,但是有特殊的,那就是boolean,一个是true一个是“true”,再比如你传的是abc转int类型,这就奇葩了,他会报数据格式异常的

当然,还有各种进制的转换,说白了就是几个方法,大家可以研究一下,这里就不多做赘述了

我们实际来一个小例子来突出他们的特性

package com.lgl.hellojava;

//公共的   类   类名
public class HelloJJAVA {

    public static void main(String[] args) {

        /**
         * 基本数据类型的对象包装类
         */
        Integer x = new Integer("123");
        Integer y = new Integer(123);
        // 问
        sop("x == y :" + (x == y));
        sop("x.equals(y) : " + (x.equals(y)));

    }

    /**
     * 输出
     */
    public static void sop(Object obj) {
        System.out.println(obj);
    }

}

这样得到的结果呢?

这里就好理解了

JDK1.5版本以后出现的新特性

  • 自动装箱
Integer x = new Integer(4);
Integer x = 4;  //自动装箱

x = x + 2; //进行了自动拆箱,变成了int类型,和2进行加法运算,再将和进行装箱,赋给x

再来一个有意思的例子


        Integer x = 128;
        Integer y = 128;

        Integer i = 127;
        Integer j = 127;

        sop("x == y :" + (x == y));
        sop("i == j : " + (i == j));

这里输出多少?

为什么会这样?

  • 因为i和j是同一个Integer对象,在byte范围内,对于新特性,如果该数值已经存在,则不会再开辟新的空间

二.集合框架

讲完杂七杂八的数据类型,我们接着讲数据类型存储,首先我们聊聊集合

  • 为什么出现集合类

    • 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行了存储,集合就是存储对象最常用的一种方式
  • 数组和集合类同时容器有何不同?

    • 数组虽然也可以存储对象,但是长度是固定的,集合长度是可变的,数组中可以存储数据类型,集合只能存储对象
  • 集合的特点

    • 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象

集合框架是不断的向上抽取的

为什么会出现这么多的容器呢?

  • 因为每一个容器对数据的存储方式都有不同,这个存储方式我们称之为:数据结构

我们会依次的学习这个数据结构

三.Collection

根接口,我们来学习他们的共性方法

package com.lgl.hellojava;

import java.util.ArrayList;

//公共的   类   类名
public class HelloJJAVA {

    public static void main(String[] args) {
        /**
         * Collection
         */
        // 创建一个集合容器,使用Collection接口的子类Arraylist
        ArrayList list = new ArrayList();
        // 添加元素
        list.add("Hello 0");
        list.add("Hello 1");
        list.add("Hello 2");
        list.add("Hello 3");
        list.add("Hello 4");

        // 获取集合的长度
        sop("长度:" + list.size());
    }

    /**
     * 输出
     */
    public static void sop(Object obj) {
        System.out.println(obj);
    }

}

写法是这样写的,这里有疑问,为什么add参数是Object?

  • 1.add方法的参数类型是Object,已便于接收任意类型的对象
  • 2.集合中存储的都是对象的引用和地址,

所以我们还可以

        // 获取集合的长度
        sop("长度:" + list.size());

        //打印集合
        sop(list);

        //删除元素
        list.remove("Hello 1");
        sop(list);

        //判断
        sop("Hello 3是否存在:"+list.contains("Hello 3"));

        //清空
        list.clear();

        //是否为空
        sop(list.isEmpty());

        sop(list);

得出结论

我们再来讲一个交集

public static void method_2() {
        ArrayList list = new ArrayList();
        // 添加元素
        list.add("Hello 0");
        list.add("Hello 1");
        list.add("Hello 2");
        list.add("Hello 3");
        list.add("Hello 4");

        ArrayList list1 = new ArrayList();
        // 添加元素
        list1.add("java 0");
        list1.add("Hello 1");
        list1.add("java 2");
        list1.add("Hello 3");
        list1.add("java 4");

        // 取交集 list只会保留和list1中相同的元素
        list.retainAll(list1);
        sop(list);
    }

list只会保留和list1中相同的元素

四.迭代器Iterator

我们再来说下迭代器,也就是怎么取出数据操作

/**
     * 迭代器
     */
    public static void method_get() {
        ArrayList list = new ArrayList();
        // 添加元素
        list.add("Hello 0");
        list.add("Hello 1");
        list.add("Hello 2");
        list.add("Hello 3");
        list.add("Hello 4");
        //获取迭代器,用于取出集合中的元素
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            sop(iterator.next());
        }
    }

这样就能全部打印出来了

那我们理解什么是迭代器?

  • 其实就是集合取出元素的方式

就把取出方式定义在集合的内部,这样取出的方式就直接访问集合内容的集合,那么取出方式就会定义成内部类,而每个容器的数据结构都不同,所以取出的动作细节也不同,但是都有共性内容,判断,取出,那么可以将写共性抽取,那么这些内部类都符合一个规则,该规则就是iterator,如何获取集合的取出对象呢?通过一个对外提供的方法interator();


大体的方向我们掌握了,这样我们就应该细分下去讲了,我们先说下List

六.List

Collection下有两个子接口,list和set,他们两个的区别就是

  • list:元素是有序的,元素可以重复,因为该集合体系有索引
  • set:元素是无序,元素不可以重复,不能索引

我们只要说的就是list,共性的就不讲了,我们、他独有的

List特有方法:凡是可以操纵交表的方法都是该体系的特有方法,也就是

    • add(index,element)
    • addAll(index Collection);

    • remove(index)

    • set(index)

    • get(index)
    • subList(from,to)
    • listIterator()

我们挨个说一遍就好了,这个本来就是老套路了,我们就算总结一下前面的知识

package com.lgl.hellojava;

import java.util.ArrayList;
import java.util.Iterator;

//公共的   类   类名
public class HelloJJAVA {

    public static void main(String[] args) {
        /**
         * List
         */
        ArrayList al = new ArrayList();
        // 添加元素
        al.add("java 0");
        al.add("java 1");
        al.add("java 2");

        sop("原集合 : " + al);

        // 在指定位置添加元素
        al.add(1, "java 3");
        sop("添加后 : " + al);

        // 删除指定位置的元素
        al.remove(2);
        sop("删除后: " + al);

        // 修改元素
        al.set(2, "java 4");
        sop("修改后: " + al);

        // 通过角标获取元素
        sop("查找 : " + al.get(1));

        sop("所有元素");
        // 获取所有元素
        for (int i = 0; i < al.size(); i++) {
            sop("元素" + i + " = " + al.get(i));
        }

        sop("迭代器");
        // 通过迭代器
        Iterator it = al.iterator();
        while (it.hasNext()) {
            sop("next:" + it.next());
        }

    }

    /**
     * 输出
     */
    public static void sop(Object obj) {
        System.out.println(obj);
    }

}

这里就涵盖了很多的list的知识点,不断向上抽取的一个过程了,我们输出的结果

好的,那这样的话,我们本节课也就到这里,OK了,感谢你看了这么久,累了就喝杯水吧!

我的群:555974449,欢迎你的到来!

JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用的更多相关文章

  1. Java进阶(三十八)快速排序

    Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...

  2. JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例

    JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第 ...

  3. Java IO(十八) BufferedReader 和 BufferedWriter

    Java IO(十八) BufferedReader 和 BufferedWriter 一.介绍 BufferedReader 和 BufferedWriter 是字符缓冲流,分别继承自 Reader ...

  4. (十六)集合框架(Collection和Map)和比较器(Comparable和comparator)

    一.集合框架 1.1 为什么要使用集合框架? 当我们需要保持一组一样(类型相同)的元素的时候,我们应该使用一个容器来保存,数组就是这样一个容器. 那么,数组的缺点是什么呢? 数组一旦定义,长度将不能再 ...

  5. Java学习--java中的集合框架、Collection接口、list接口

    与数组相比:1.数组的长度固定,而集合的长度可变2.数组只能通过下表访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象 java集合框架:collection(list序列,queue ...

  6. 王颖奇 201771010129《面向对象程序设计Java》第十八周实验总结

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  7. Java笔记(二十八)……IO流下 IO包中其他常用类以及编码表问题

    PrintWriter打印流 Writer的子类,既可以接收字符流,也可以接收字节流,还可以接收文件名或者文件对象,非常方便 同时,还可以设置自动刷新以及保持原有格式写入各种文本类型的print方法 ...

  8. Java基础学习(四)-- 接口、集合框架、Collection、泛型详解

    接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写.   二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...

  9. Java集合----概述、Collection接口、Iterator接口

    Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中. Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java 集合可分为 Set.Li ...

随机推荐

  1. vue中的eventBus

    在vue2中,父子组件传递数据,父组件可以直接传递数据进子组件,而子组件通过调用父组件传递进来的方法,将自己的数据传递回去. 那兄弟组件之间,或者是兄弟组件的子组件之间如何传递呢? 当然vuex是一种 ...

  2. 在vue中操作DOM--this.$nextTick()

    虽然 Vue.js 通常鼓励开发人员沿着"数据驱动"的方式思考,避免直接接触 DOM,但是有时我们确实要这么做.比如一个新闻滚动的列表项.如果在这里需要操作dom, 应该是等待 V ...

  3. Java常用排序算法

    在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序. 一般来说外排序分为两个步骤:预处理和合并排序.首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长 ...

  4. 【python标准库模块五】Xml模块学习

    Xml模块 xml本身是一种格式规范,是一种包含了数据以及数据说明的文本格式规范.在json没有兴起之前各行各业进行数据交换的时候用的就是这个.目前在金融行业也在广泛在运用. 举个简单的例子,xml是 ...

  5. 0428css样式

    CSS样式表|-引入的三种方式|--内联样式|----标签内部(空格style)|--内嵌样式|----<head></head>标签内部(<style></ ...

  6. Go 语言接口

    Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface_name in ...

  7. PHP 高级过滤器

    PHP 高级过滤器 检测一个数字是否在一个范围内 以下实例使用了 filter_var() 函数来检测一个 INT 型的变量是否在  1 到 200 内: 实例 <?php$int = 122; ...

  8. OpenResty 自定义 access_log 格式

    定义access log的format是 Nginx已经提供的功能,有了 ngx_lua 之后就可以更灵活的记录请求相关的信息,而不仅仅拘泥于 Nginx的内置变量了,可以自定义一些格式和变量来存储结 ...

  9. 临时关闭Mac SIP系统完整性保护机制

    # 修正更新 [2016-12-27] 晚上给我笔记本安装的时候,使用user权限安装成功,mac最后是关闭sip才安装成功. $ pip install -r requirements.txt -- ...

  10. 阿里云服务器云数据库免费体验(Java Web详细实例)

    一.效果展示 博主部署了两个war包到阿里云服务器上,一个是没有连接数据库的,另外一个是连接了数据库的. (由于阿里云服务器免费使用15天,下面链接约2016年3月9日后无效) (1)无数据库版访问地 ...