数组的进阶操作

Posted Full-Stack-python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的进阶操作相关的知识,希望对你有一定的参考价值。

title: 数组的进阶操作

删除数组的元素

现在有这样一个需求:遍历数组的同时,删除数组中的所有元素。

思路:我们可以想到的办法是使用数组的 splice() 方法,此外还有 JS 的 delete 关键字。

需要注意的是:使用数组的 splice() 方法删除数组元素之后,数组的长度会发生变化;使用 delete 删除数组中的元素之后,数组的长度不会发生变化

下面来看看具体写法。

使用数组的 splice() 方法

写法1:(错误)

let arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) 
    console.log(arr.length);
    arr.splice(i, 1);

console.log(arr);

打印结果及解释:

数组长度的打印结果:5、4、3
arr最终的值:[2, 4]

写法1的错误在于:没有意识到,splice方法会使 arr 的长度不断变化。

写法2:(错误)

let arr = [1, 2, 3, 4, 5];
const len = arr.length;
for (let i = 0; i < len; i++) 
    console.log(arr.length);
    arr.splice(i, 1);

console.log(arr);

打印结果:

数组长度的打印结果:5、4、3、2、2
arr最终的值:[2, 4]

上方代码,依然没有达到预期的结果。

写法3:(正确写法,从末尾开始删除元素)

let arr = [1, 2, 3, 4, 5];
for (let i = arr.length - 1; i >= 0; i--) 
    console.log(arr.length);
    arr.splice(i, 1);

console.log(arr);
console.log(arr.length);

打印结果及解释:

数组长度的打印结果:// 5、4、3、2、1
arr最终的值:[]
arr最终的长度:0

使用 delete 关键字

let arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) 
    console.log(arr.length);
    // 注意点: 通过 delete 删除数组中的元素, 数组的长度不会发生变化
    delete arr[i];

console.log(JSON.stringify(arr));

打印结果及解释:

数组长度的打印结果:5、5、5、5、5
最终的arr,是空数组,长度为5:[null, null, null, null ,null]

Java基础进阶类名整理

Java进阶基础类名整理


              类名综合

数学类:

Math:数学运算

BigDecimal:用于精确计算数据

数组工具类:

Arrays:数组工具类,用于对数组的操作

时间操作:

JDK8以前:

Date:表示一个时间,并面向对象操作时间

SimpleDateFormat:专门用于将时间对象与字符串进行相互转换的工具类


  • 常见方法:parse(字符串):将字符串转换为时间对象
  • format(Date对象):将时间对象转换为字符串

JDk8以后:

LocalDateTime:包含年月日时分秒的时间对象

常见方法:


  • 静态now():获取当前时间
  • 静态of(信息)获取指定时间对象
  • format(DateTimeFormatter):按照指定格式格式化时间
  • parse(字符串,DateTimeFormatter):按照指定格式解析该方法

LocalDate:表示年月日

LocalTime:表示时分秒

DateTimeFormatter:格式化时间类


  • 获取方式:利用静态ofPattern(string pattern)


Period:计算年月日

Duration:计算时分秒

集合类类名

单列:

Collection:是单列集合的顶级接口,有两个接口List和Set


  • 可重复List:

  • ArrayList:单列可重复有索引的集合,底层是数组
  • LinkedList:单列可重复有索引的集合,底层是链表

  • 不可重复Set:

  • TreeSet:不可重复,没有索引,可以对元素进行排序(自然排序Comparable/比较器排序Comparator),底层红黑树
  • HashSet:存取无序,不可重复,没有索引,底层哈希表(Jdk7以前:哈希表=数组+链表/Jdk8以后数组+红黑树),自定义类需重写hashCode


双列:


  • 特点:

  • 键不能重复
  • 键与值一一对应
  • 键和值组成键值对

  • HashMap:底层哈希表,存储对象,必须重写HashCode和equals方法
  • TreeMap:底层红黑树,可以排序,自然排序Comparable/比较器排序Comparator


  • Stream:对集合进行批量数据操作

文件


  • File:表示文件或者文件夹

  • 特点:只是表示路径名称,可以表示存在的,也可表示不存在的


Io流

字节流父类:


  • InputStream:字节输入流
  • OutPutStream:字节输出流

字节流子类:


  • FileInputStream:字节输入流
  • BufferedInputStream:字节缓冲输入流
  • FileOutputStream:字节输出流
  • BufferedOutputStream:字节缓冲输出流

字符流父类:


  • Writer:字符数出流
  • Read:字符输入流父类

字符流子类:


  • FileWiter:字符输入流
  • FileRead:字符输出流
  • BufferedWiter:字符缓冲输入流
  • BufferedRead:字符缓冲输出流
  • InputStreamReader:字节转字符流的桥梁,使用指定编码进行解码
  • OutputStreamWriter:字符流到字节流的桥梁,使用指定编码将写入的字符编码为字节
  • JDK11之后可以直接使用FileReader进行指定编码
  • ObjectOutputStream:对象输入流
  • ObjectInputStream:对象输出流
  • 想要序列化一个类必须实现Serializable接口

多线程


  • synchronized:自动锁
  • Lock:手动锁
  • ArrayBlockingQueue:阻塞队列,底层数组,有界
  • LinkedBlockingQueue:阻塞队列,底层链表,无界
  • Executors:默认线程池
  • ThreadPoolExecutor:自定义线程池
  • AtomicBoolean:原子更新布尔类型
  • AtomicInteger:原子更新整型
  • AtomicLong:原子更新长整型
  • Hashtable:采用悲观锁,效率低下
  • ConcurrentHashMap:采用Synchronized+CAS,效率比Hashtable高比HashMap低
  • CountDownLatch:一条线程等待其他线程执行完在执行
  • Semaphore:控制线程同时访问数量

网络编程

InetAddress:表示ip地址


  • 常用getHostName:获取主机名
  • getHostAddress:返回ip地址

UDP协议:


  • DatagramPacket:数据容器
  • DatagramSocket:用于发送和接收DatagramPacket

  • sen():发送数据报
  • close():关闭数据报
  • receive:接收数据报


TCP协议:


  • Socket:对象在客户端和服务器之间建立连接
  • ServerSocket:对象等待客户端建立连接

  • 常用方法accept()等待连接


反射


  • ClassLoader.getSystemClassLoader():获取系统类加载器
  • InputStream.getResourceAsStream():加载某一个资源文件
  • Class.forName(全类名):获取Class对象
  • getConstructors:返回公共构造方法数组对象
  • getFields():返回所有公共的成员变量数组
  • getMethods():返回所有公共方法,包含父类公共方法
  • 获取私有使用带Declared的get方法
  • 利用反射使用私有成员设置setAccessible(true)

关键字


  • transient:被标记的变量不可被实例化
  • this 表示当前
  • super 表父类
  • final 表示最终
  • static 表静态
  • volatile:内存可见性
  • enum:枚举
  • abstract:抽象



以上是关于数组的进阶操作的主要内容,如果未能解决你的问题,请参考以下文章

Android学习笔记进阶14之像素操作

Java基础进阶类名整理

JavaScript 进阶(未完待续)

JavaScript 精粹 基础 进阶数组

C语言进阶—— 动态内存开辟+柔性数组

gawk进阶