Java——包装类和List及ArrayList

news2024/11/18 10:57:13

目录

包装类(Wrapped Class)

包装类的使用---装箱和拆箱

自动装箱和自动拆箱 

Integer的易错题

javap反编译工具

List接口的使用

方法 

 

ArrayList

使用

打印

区别

扩容机制

ArrayList练习

字符集合

杨辉三角

​编辑 


 

 

包装类(Wrapped Class)

Object 引用可以指向任意类型的对象,但有例外出现了, 8 种基本数据类型不是对象,那岂不是刚才的 泛型机制要 失效了?
实际上也确实如此,为了解决这个问题,java 引入了一类特殊的类,即这 8 种基本数据类型的包装类,在使用过程 中,会将类似 int 这样的值包装到一个对象中去。
 

包装类的使用---装箱和拆箱

int i = 10;
//显式
// 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
Integer ii = Integer.valueOf(i);
Integer ij = new Integer(i);
 
// 拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中
int j = ii.intValue();
 

自动装箱和自动拆箱 

int i=10;

 

nteger ii = i; // 自动装箱
Integer ij = (Integer)i; // 自动装箱
 
int j = ii; // 自动拆箱
int k = (int)ii; // 自动拆箱

Integer的易错题

Integer a=127;
Integer b=127;
Sysyem.out.print(a==b);

 答案:true

Integer a=128;
Integer b=128;
Sysyem.out.print(a==b);

a13bc6319bae46e499018a08142ea824.png

 

javap反编译工具

javap-c(jdk 中一个反编译工具来查看下自动装箱和自动拆箱过程,并且看到这个过程是发生在编译期)

 

List接口的使用

2248ba7ec5434a2cb238c95a28840139.png

方法 

序列化:把一个对象转变为字符串
方法
boolean add(E e) 尾插 e
 
void add(int index, E element) 将 e 插入到 index 位置
 
boolean addAll(Collection<? extends E> c) 尾插 c 中的元素
 
E remove(int index) 删除 index 位置元素
 
boolean remove(Object o) 删除遇到的第一个 o
 
E get(int index) 获取下标 index 位置元素
 
E set(int index, E element) 将下标 index 位置元素设置为 element
 
void clear() 清空
 
boolean contains(Object o) 判断 o 是否在线性表中
 
int indexOf(Object o) 返回第一个 o 所在下标
 
int lastIndexOf(Object o) 返回最后一个 o 的下标
 
List<E> subList(int fromIndex, int toIndex) 截取部分 list
 
方法
ArrayList() 无参构造
 
ArrayList(Collection<? extends E> c) 利用其他 Collection 构建 ArrayList
 
ArrayList(int initialCapacity) 指定顺序表初始容量
 

 

ArrayList

使用

boolean add(E e) 尾插 e
 
void add(int index, E element) 将 e 插入到 index 位置
 
boolean addAll(Collection<? extends E> c) 尾插 c 中的元素
 
E remove(int index) 删除 index 位置元素
 
boolean remove(Object o) 删除遇到的第一个 o
 
E get(int index) 获取下标 index 位置元素
 
E set(int index, E element) 将下标 index 位置元素设置为 element
 
void clear() 清空
 
boolean contains(Object o) 判断 o 是否在线性表中
 
int indexOf(Object o) 返回第一个 o 所在下标
 
int lastIndexOf(Object o)

打印

五种方法

       List<Integer> list1=new ArrayList<>(10);
        List<String> list2=new ArrayList<>();
        ArrayList<String> list3=new ArrayList<>();
        list2.add("It");
        list2.add("was love ");
        list2.add("at first sight.");
        //关于打印
        System.out.println(list2);

        System.out.println("------------------");

        for (int i = 0; i < list2.size(); i++) {
            System.out.print(list2.get(i)+" ");
        }
        System.out.println();
        System.out.println("------------------");

        for(String s:list2){
            System.out.print(s+" ");
        }

        System.out.println("--使用迭代器打印--");
        Iterator<String> it=list2.iterator();
        while(it.hasNext()){//判断后面是否还有元素
            System.out.print(it.next()+" ");//
        }

        System.out.println("--迭代器List相关打印");
        ListIterator<String> it2=list2.listIterator();
        while(it2.hasNext()){
            System.out.print(it2.next()+" ");
        }
        /**
         * 使用迭代删除(Iterator.remove()),可能会因为没有it.next()抛出并发修改异常(,
         * 先迭代元素再删除,避免对同一个迭代器remove多次而异常
         * ArrayList不是线程安全的
         *  ***/

 22146fd53e77490db73394c78cb34fee.png

 

区别

List<String> list1=new ArrayList<>();

ArrayList<String> list2=new ArrayList<>();

list1的方法比list2少,因为list1由父类List调用,就只能调用List接口的方法。除非子类重写了父类的方法。

扩容机制

ArrayList是一个动态的扩容机制,在插入元素过程中会自动扩容。

List<Integer> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add(i);
}
//既然没给初始值,就不会存在越界问题吗?
  1. 检测是否需要扩容,如果是调用grow准备扩容;
  2. 预估需要库容的大小
  • 初步预估按照1.5倍进行扩容;
  • 如果用户所需要的大小超过预估1.5倍左右,则按照用户所需大小进行扩容;
  • 真正扩容之前检测是否能扩容成功,防止太大导致扩容失败;
  • 使用copyOf进行扩容;

 如果ArrayList调用不带参数的构造方法,那麽顺序表的大小是0,第一次add的时候,整个顺序表才变成了10;当这个10放满了,以1.5倍扩容;

如果调用的是给定容量的构造方法,那麽顺序表的大小就是你给定的容量,放慢了就仍然以1.5倍进行扩容;

ArrayList练习

1. 学生对象放在List中,每个学生有一个姓名,班级,考试成绩属性(double)次考试结束后,每个学生都获得了一个考试成绩,遍历list集合,并把学生对象的属性打印出来;
2.有一个List中存放整形元素,要求使用Collections.sort对他们排序

 

class Student{
    private String name;
    private String classes;
    private double score;

    public Student(String name, String classes, double score) {
        this.name = name;
        this.classes = classes;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getClasses() {
        return classes;
    }

    public void setClasses(String classes) {
        this.classes = classes;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", classes='" + classes + '\'' +
                ", score=" + score +
                '}';
    }
}


public class TestDemo {
    public static void main2(String[] args) {
        ArrayList<Integer> integers=new ArrayList<>();
        integers.add(33);
        integers.add(11);
        integers.add(22);

        Collections.sort(integers);//Collections是一个类进行升序
        System.out.println(integers);


    }
    public static void main1(String[] args) {
        //<>中可以放自定义类型
        ArrayList<Student> students=new ArrayList<>();
        students.add(new Student("小明","102",99));
        students.add(new Student("小美","102",99.7));
        System.out.println(students);
    }
}

sum:


 * Collection是接口,继承他的接口的主要是List接口,Set接口,Queue接口
 * Collections是类,提供了集合相关操作的静态方法类,eg:Collections.reverse(list).
14f2cd1f8caa4e85b1c44793f531502d.png
 * ArrayList可以在<>中放自定义类型;
 * *

 

3.删除第一个字符串中出现的第二个字符串中的字符。使用ArrayList解决

eg:

String str1="welcome to";

String str2="come";

输出结果:wl t  
 public static void main(String[] args) {
        String str1 = "welcome to";
        String str2 = "come";
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < str1.length(); i++) {
            char ch = str1.charAt(i);
            if(!str2.contains(ch+"")){
                list.add(ch);
            }

        }
        //这样直接打印list的话打印的数组类型,so
        for(char ch:list){
            System.out.print(ch);
        }
    }

sum:

String中的contains方法(返回boolean类型,源码重写了equal方法):A.contains(B),判断A字符串中是否包含字符串B

public static void main(String[] args) {
        String str1="hello";
        String str2="eo";
        System.out.println(str1.contains(str2));
}
输出false

字符集合

d944219f9754499496f426894cff2291.png

7f00d6f790f84c9aae2ad0f686aeabf5.png

public class TestDemo {
    //a-97,A-65
    public static String func1(String str){
        StringBuilder sb=new StringBuilder();
        int[] array=new int[124];
        for (int i = 0; i < str.length(); i++) {
            char ch=str.charAt(i);
            if(array[ch]==0){
                sb.append(ch);
                array[ch]=0;
            }
        }
        return sb.toString();

    }
    public static String func(String str){
        StringBuilder sb=new StringBuilder();
        for(int i = 0;i< str.length();i++){
            char ch = str.charAt(i);
            if(!sb.toString().contains(ch+"")){
                sb.append(ch);
            }
        }
       return sb.toString();
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextLine()){
            String str=scanner.nextLine();
            String ret=func(str);
            System.out.println(ret);
        }

    }
}

杨辉三角

b48c5be5f62643f3a42a04eba2f7645b.png 

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret=new ArrayList<>();
        //第一行
        List<Integer> list1=new ArrayList<>();
        list1.add(1);
        ret.add(list1);//把第一行数据放在List中
        for(int i=1;i<numRows;i++){
            List<Integer> list=new ArrayList<>();
            list.add(1);//每一行开始都是1
            List<Integer> preRow=ret.get(i-1);//上一行
            for(int j=1;j<i;j++){
                int num1=preRow.get(j)+preRow.get(j-1);
                list.add(num1);
            }
            list.add(1);
            ret.add(list);

        }
        return ret;


    }
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS居中之 { left:50%; top:50%; transform:translate(-50%,-50%); }

CSS居中之 { left:50%; top:50%; transform:translate(-50%,-50%); } left:50%; top:50%; transform:translate(-50%,-50%); left:50%; top:50%; transform:translate(-50%,-50%);也可以写成: left:50%; top:50%; translate: -50% -50%; left:50%; top:50%; translate: -50%…

电子技术——CMOS反相器的动态响应

电子技术——CMOS反相器的动态响应 数字系统的速度&#xff08;例如计算机&#xff09;取决于其构成逻辑门的信号传播速度。因为反相器是数字逻辑门电路的基础&#xff0c;反相器的传播速度是一个很重要的特性。 传播延迟 传播延迟定义为反相器响应他的输入所需要的时间。特…

项目管理报告工具的功能

项目报告软件哪个好&#xff1f;Zoho Projects的项目管理报告工具为您提供整个组织的360可见性&#xff0c;获取所有项目的实时更新&#xff0c;使用强大的项目报告软件推动成功。Zoho Projects的项目报告软件允许团队整理和监控他们的资源和项目&#xff0c;以评估进度并避免对…

例1.10 几何概型题型一——(会面问题)

【例 1.10】&#xff08;会面问题&#xff09;甲乙两人约定在下午6 点到7点之间在某处会面,并约定先到者应等候另一人20 分钟,过时即可离去,求两人能会面的概率。我的答案&#xff1a;一、信息(1)对于甲乙会面约定事件是6~7点。(2)对于规则要求先到者等另一个人20分钟。(3)求两…

SAP会计科目打删除标记及如何物理删除

如果一个科目如果创建错误了&#xff0c;需要删除。如果在FS00上操作&#xff0c;点删除按钮&#xff0c;那么只是打删除标记而已&#xff08;相当于冻结&#xff09;。 删除和打删除标记是不一样的&#xff1a;打删除标记只是锁定该科目不再被用于记账业务&#xff0c;该科目仍…

进程概念~

进程概念 &#xff08;冯诺依曼体系结构&#xff0c;操作系统&#xff0c;进程概念&#xff0c;进程状态&#xff0c;环境变量&#xff0c;程序地址空间&#xff09; 冯诺依曼体系结构&#xff1a;&#xff08;计算机硬件体系结构&#xff09; 输入设备&#xff0c;输出设备&a…

【Java|基础篇】超详细讲解运算符

文章目录1. 什么是运算符2. 算术运算符隐式类型转换强制类型转换字符串的拼接字符相加自增和自减运算符3.赋值运算符4. 关系运算符5. 逻辑运算符短路与(&&)和短路或(||)6.三目运算符7. 位运算符8. 移位运算1. 什么是运算符 运算符用于执行程序代码运算&#xff0c;会针…

OpenCV-PyQT项目实战(11)项目案例07:摄像头操作与拍摄视频

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …

【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中)

系列文章目录 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中) 文章目录系列文章目录前言安装OGG12C软件一、Linux本地GUI…

配置本地 python GEE、geemap环境

1.安装anconda 百度搜索anconda清华镜像&#xff0c;从清华镜像中选择最新的anconda安装包&#xff0c;国内镜像网站下载速度较快&#xff0c;如果从国外官网下载速度相当慢&#xff0c;详细安装教程请参考&#xff1a; anconda安装教程https://blog.csdn.net/lwbCUMT/article…

这些Python计算机视觉工具,帮你coding事半功倍

作为开发人员喜爱的语言之一&#xff0c;Python以其丰富的社区可用工具和库而闻名。我们列出了开发人员可以用于计算机视觉10个流行流行的Python库或平台&#xff0c;以帮助开发人员自动化开发任务&#xff0c;其中包括检测和可视化。1 | fastaifastai是一个深度学习库&#xf…

HBase读取流程详解

读流程从头到尾可以分为如下4个步骤&#xff1a;Client-Server读取交互逻辑&#xff0c;Server端Scan框架体系&#xff0c;过滤淘汰不符合查询条件的HFile&#xff0c;从HFile中读取待查找Key。其中Client-Server交互逻辑主要介绍HBase客户端在整个scan请求的过程中是如何与服务…

重构·改善既有代码的设计.01

前言近期在看Martin Fowler著作的《重构.改善既有代码的设计》这本书&#xff0c;这是一本经典著作。书本封面誉为软件开发的不朽经典。书中从一个简单的案例揭示了重构的过程以及最佳实践。同时给出了重构原则&#xff0c;何时重构&#xff0c;以及重构的手法。用来改善既有代…

Vue2.0开发之——购物车案例-Goods组件封装-商品名称和图片(46)

一 概述 循环渲染Goods组件为Goods组件封装title属性为Goods组件封装pic属性 二 循环渲染Goods组件 2.1 App.vue中导入Goods组件 import Goods from /components/Goods/Goods.vue2.2 App.vue中注册Goods组件 components: {Header,Goods}2.3 循环渲染每一个商品的信息 <…

记录--在Vue3这样子写页面更快更高效

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 在开发管理后台过程中&#xff0c;一定会遇到不少了增删改查页面&#xff0c;而这些页面的逻辑大多都是相同的&#xff0c;如获取列表数据&#xff0c;分页&#xff0c;筛选功能这些基本功能。而…

windows下neo4j安装及配置,并绘制人物关系图谱

neo4j安装及配置&#xff0c;绘制人物关系图谱 先升级pip&#xff0c;安装py2neo pip install py2neo2021.0.1依赖 jdk1.8&#xff0c; neo4j 3.xx&#xff1b; 或者jdk18&#xff0c;neo4j 4.x&#xff0c;5.x&#xff1b; 官网下载了neo4j4.x,5.x 因为jdk版本原因都不行&am…

段错误排查方法与防御性措施~

什么是段错误 首先我们需要知道什么是段错误&#xff0c;才能对症下药。 段错误是一种在程序运行时发生的错误&#xff0c;通常是由于程序试图访问不在其地址空间范围内的内存引起的。 例如&#xff0c;当一个程序访问空指针或者已经被释放的内存时&#xff0c;就有可能触发…

Mybatis框架的搭建与使用

Mybatis框架的搭建 一.创建新模块 二、在pom.xml导入依赖 <dependencies><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependenc…

软件研发管理经验总结 - 技术管理

软件研发管理经验总结 - 技术管理 技术管理主要负责有技术团队建设、管理团队成员技术相关事务、帮助团队成员成长、负责团队成员交付的代码质量、以及负责产品技术方向、以及产品相关前沿技术调研&#xff1b;管理团队成员技术相关事务有代码Review、故障率跟踪、分析及根据分…

算法系列之数值积分的目的

PLC算法里的数字积分器详细介绍请参看下面的文章链接: PLC算法系列之数值积分器(Integrator)_RXXW_Dor的博客-CSDN博客数值积分和微分在工程上的重要意义不用多说,闭环控制的PID控制器就是积分和微分信号的应用。流量累加也会用到。有关积分运算在流量累加上的应用,请参看下…