javase-day12-字符串、List、Map集合、IO流

本文详细介绍了Java中的字符串、List与Map集合以及IO流的相关知识。在字符串部分,探讨了equals()方法与==的区别。在集合部分,讲解了List的常用方法,对比了ArrayList与LinkedList的特点。在Map部分,提到了HashMap的基本使用。IO流部分,阐述了文件读写、字节流与字符流的区别,并在实际应用中推荐使用字节流。
摘要由CSDN通过智能技术生成

字符串

  • Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。
  • 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
  • 堆内存用于存放由new创建的对象和数组。
  • 声明指的是创建类的对象的过程;实例化指的是用关键词new来开辟内存空间。

equals()方法与 == 的区别

  • equals():检查组成字符串内容的字符是否完全一致
  • ==:判断两个字符串在内存中的地址,即判断是否是同一个字符串对象。

实例代码:

public class StringDemo {
	public static void main(String args[]) {
    	String str1 = "Hello";
        String str2 = new String("Hello");
        String str3 = str2; // 引用传递
        System.out.println(str1 == str2); // false
        System.out.println(str1 == str3); // false
        System.out.println(str2 == str3); // true
        System.out.println(str1.equals(str2)); // true
        System.out.println(str1.equals(str3)); // true
        System.out.println(str2.equals(str3)); // true
    }
}

原理:

  • 当使用初始化的方式创建对象时,JVM会首先检查字符串池中是否存在值相等的字符串,如果存在,则不进行创建,而是直接返回字符串池中该字符串的引用地址。如果不存在,则创建该对象,并放入字符串池中,返回新创建的字符串的引用地址。
  • 当使用new关键字创建对象时,JVM仍然首先检查字符串池中是否存在要创建的字符串,如果不存在,则在字符串池中创建一个字符串对象,然后在堆内存中继续创建一个字符串对象,返回该对象的引用地址。如果存在,则只在堆内存中创建一个字符串对象,返回该对象的引用地址。

LIst与Map 集合

List

  • List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。
  • ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
  • LinkedList采用链表存储方式。插入、删除元素时效率比较高。

List常用方法

方法名说明
boolean add(Object o)在列表的末尾顺序添加元素,起始索引位置从0开始
void add(int index,Object o)在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
int size()返回列表中的元素个数
Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
boolean contains(Object o)判断列表中是否存在指定元素
boolean remove(Object o)从列表中删除元素
Object remove(int index)从列表中删除指定位置元素,起始索引位置从0开始

Map

  • Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作,最常用的实现类是HashMap。

常用方法

方法名说明
Object put(Object key, Object val)以“键-值对”的方式进行存储
Object get (Object key)根据键返回相关联的值,如果不存在指定的键,返回null
Object remove (Object key)删除由指定的键映射的“键-值对”
int size()返回元素个数
Set keySet ()返回键的集合
Collection values ()返回值的集合
boolean containsKey (Object key)如果存在由指定的键映射的“键-值对”,返回true

IO流

文件读写

Java中通过流来读写文件,流是指一连串流动的字符,是以先进先出方式发送信息的通道。

字节流与字符流的区别

  • 字符流的底层就是字节流。而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容,而字节流读取单位为byte。byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等。基于B/S和C/S的文件传输都可以采用字节流的形式。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。
  • 字节流就是按照字节来进行传输,字符流是按照字符来传输.最基本的是字节流,字符流可以说是对字节流的一个包装流,比如你知道了一个字符是8个字节,那么你让字节流一次传输8个字节,那不就相当于一次传输一个字符,也就是字符流了。

范例

通过字节流写文件:

 public static void ByteWrite() {
        File file = new File("d:\\test\\test.txt");
        try {
            OutputStream outputStream = new FileOutputStream(file);
            String textString = "Hello World!!!";
            byte[] data = textString.getBytes();
            outputStream.write(data);
            //outputStream.close();
        } catch (IOException e) {
            System.out.println("字节流写入文件出错。");
            e.printStackTrace();
        }
    }

结果:
在这里插入图片描述

通过字符流写文件:

public static void StringWrite() {
        File file = new File("d:\\test\\test.txt");
        try {
            FileWriter writer = new FileWriter(file);
            String textString = "Hello World!!!";
            writer.write(textString);
            // writer.flush();
            // writer.close();
        } catch (IOException e) {
            System.out.println("字符流写入文件出错.");
            e.printStackTrace();
        }
    }

结果:
在这里插入图片描述

在开发中是使用字节流好还是字符流好呢?

  • 使用字节流更好。所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。
  • 如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值