当前位置: 首页 > news >正文

电子商务网站建设实验心得广告投放基础知识

电子商务网站建设实验心得,广告投放基础知识,seo外链增加,安全认证的机票网站成就怎么做文章目录前言ArrayList简介ArrayList使用构造方法ArrayList常见操作removesubList遍历ArrayListArrayList中的二维数组总结前言 在上一篇博文中,我们尝试自己实现了一下ArrayList类。不过,在实际应用中,ArrayList有着更灵活、更便捷的使用方…

文章目录

  • 前言
  • ArrayList简介
  • ArrayList使用
    • 构造方法
    • ArrayList常见操作
      • remove
      • subList
    • 遍历ArrayList
    • ArrayList中的二维数组
  • 总结


前言

在上一篇博文中,我们尝试自己实现了一下ArrayList类。不过,在实际应用中,ArrayList有着更灵活、更便捷的使用方法。在这一篇博文中,让我们更加深入的了解一下吧。


ArrayList简介

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:
在这里插入图片描述
【说明】

  1. ArrayList是以泛型方式实现的,使用时必须要先实例化

  2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问

  3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的

  4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的

  5. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList

  6. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

ArrayList使用

构造方法

public ArrayList(int initialCapacity) {if (initialCapacity > 0) {this.elementData = new Object[initialCapacity];} else if (initialCapacity == 0) {this.elementData = EMPTY_ELEMENTDATA;} else {throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);}}/*** Constructs an empty list with an initial capacity of ten.*/public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}/*** Constructs a list containing the elements of the specified* collection, in the order they are returned by the collection's* iterator.** @param c the collection whose elements are to be placed into this list* @throws NullPointerException if the specified collection is null*/public ArrayList(Collection<? extends E> c) {Object[] a = c.toArray();if ((size = a.length) != 0) {if (c.getClass() == ArrayList.class) {elementData = a;} else {elementData = Arrays.copyOf(a, size, Object[].class);}} else {// replace with empty array.elementData = EMPTY_ELEMENTDATA;}}

我们如果去看源码,会发现ArratList有三个构造方法。首先第一个不必多说,第二个其实是创建一个空表,详情请看下图:
在这里插入图片描述

我们主要来讲第三个:

public ArrayList(Collection<? extends E> c) {

首先Collection是这些表类的父类,“?”指的是通配符,参数的意思是:给参数时要保证首先类型是Collection或者它的子类,<>里面的得是E的子类。举例说明一下大家就很快明白了。

import java.util.ArrayList;//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);System.out.println(list);ArrayList<Integer> list1 = new ArrayList<>(list);System.out.println(list1);}}

在这里插入图片描述
首先List< Integer>肯定是Collection类的子类,而Integer与ArrayList list1 = new ArrayList<>(list);所代表的Integer包装类又是相同的,所以,可以这样定义一个新表。

但是!!!!!!!!!!!!!!!!!!到这里构造方法还没完。
上一个博文中我们实现add方法时会扩容。此时,在第一个和第二个构造方法中,我们可能会建立空表,如果是空表,照我们的代码来看,似乎没办法扩容以及插入数据啊?我们来看java具体是怎么实现的吧!

在这里插入图片描述
在这里插入图片描述
我们可以看到,其实是java先给原来的size + 1之后,才进行的扩容操作,并且扩容是按照1.5倍进行扩容的。

ArrayList常见操作

ArrayList虽然提供的方法比较多,但是常用方法如下所示

在这里插入图片描述
这些方法我们大多数都实现了,这里讲两个没提到的。

remove

我们能注意到,remove既可以传数据,又可以传下标。那么问题来了:我们传入一个“1”,那我指的是下标还是数据呢?

import java.util.ArrayList;//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println(list);
//        ArrayList<Integer> list1 = new ArrayList<>(list);
//        System.out.println(list1);list.remove(1);System.out.println(list);}}

在这里插入图片描述
是下标!
那怎么才能传数据呢?

list.remove(new Integer(1));System.out.println(list);

在这里插入图片描述
但是自从java9以来,这种写法变得过时了,编译器会报错。
在这里插入图片描述

subList

subList在截取过程中有一个有意思的现象:

import java.util.ArrayList;
import java.util.List;//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println(list);List<Integer> list1 = list.subList(1,3);list1.set(1,999);System.out.println(list);System.out.println(list1);}}

在这里插入图片描述
可以看到我们修改list1的内容时,list的内容也改变了,这是因为subList不是建立一个新对象,而是建立一个新索引,仍然指向原表。

遍历ArrayList

我们有四种方法来遍历ArrayList,其中有两种为使用迭代器遍历,这是一个新增的知识:

public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("for下标遍历");for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i) + " ");}System.out.println();System.out.println("foreach遍历");for (Integer x : list){System.out.print(x + " ");}System.out.println();System.out.println("使用迭代器Iterator输出");Iterator<Integer> it = list.iterator();while(it.hasNext()){System.out.print(it.next() + " ");}System.out.println();System.out.println("使用迭代器ListIterator输出");ListIterator<Integer> it2 = list.listIterator();while(it2.hasNext()){System.out.print(it2.next() + " ");}System.out.println();System.out.println("使用迭代器ListIterator输出====扩展(反向输出)");ListIterator<Integer> it3 = list.listIterator(list.size());while(it3.hasPrevious()){System.out.print(it3.previous() + " ");}System.out.println();}

在这里插入图片描述

注意

  1. ArrayList最长使用的遍历方式是:for循环+下标 以及 foreach
  2. 迭代器是设计模式的一种,后序容器接触多了再给大家铺垫

ArrayList中的二维数组

在这里插入图片描述
大家来看一道简单的杨辉三角的题目,看上去似乎很简单,但是请看这里:

public List<List<Integer>> generate(int numRows) {

List<List< Integer >>这啥玩意儿?????

在这之前确实没见过这种写法,但我们可以拆开理解一下。
先看里面:
List< Integer>
这个都认识,数据类型为Integer的List表。

那这个List<List< Integer>>是不是就是类型为List< Integer>的List表了呢?
或者我来这样说,这是不是就是一个二维数组呢??
没错,这样的写法代表的就是List的一个类似于二维数组的表示,即:List表中的每一个数据都是一个list表

这一题的代码也很简单:

 public static List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<>();List<Integer> list0 = new ArrayList<>();list0.add(1);ret.add(list0);//从第2行开始 进行求每个元素for (int i = 1; i < numRows; i++) {//处理第一个元素List<Integer> curRow = new ArrayList<>();curRow.add(1);//中间List<Integer> preRow = ret.get(i-1);for (int j = 1; j < i; j++) {int val1 = preRow.get(j);int val2 = preRow.get(j-1);curRow.add(val1+val2);}//尾巴curRow.add(1);ret.add(curRow);}return ret;}

总结

顺序表作为最基础的数据结构之一,是理解更复杂结构的基石。它通过连续的内存空间和索引机制,实现了高效的元素访问,但在插入删除操作上存在性能瓶颈。

掌握顺序表的设计思想,不仅能帮助我们更好地理解编程语言中的内置集合(如 Java 的 ArrayList),也能为后续学习链表、栈、队列等结构打下坚实基础。

在实际开发中,应根据具体场景选择合适的数据结构 —— 需要频繁访问时选顺序表,需要频繁插入删除时可考虑链表,平衡二者优缺点的结构(如跳表)则适用于更复杂的场景。

http://www.dtcms.com/a/454851.html

相关文章:

  • 网站移动窗口代码腾讯云wed服务器做网站
  • 网站建设经费计划内容传奇手游新开服网站
  • 自注意力机制(Self-Attention)的深度解析:从原理到应用
  • 020网站设计网站做弹窗广告吗
  • 上海网站建设有限公司邯郸市做网站建设
  • 院系网站建设具体要求网站建设管理工作自查报告
  • 康定网站建设小学网站建设工作小组
  • 晋江模板建站江门网站设计
  • 第十三篇:移动语义与右值引用:彻底理解std::move和std::forward
  • 电子商务网站开发的基本原则棋牌网站开发需要多少钱
  • 东营网站建设入门做百度推广送网站
  • 辛集手机网站建设阿里巴巴国际站怎么做网站模版
  • wordpress站群 会员国外做电商平台的网站有什么
  • 北京 网站建设大全凡客诚品倒闭了吗
  • 开源项目学习(7) ---- Google Gtest
  • 《投资-83》价值投资者的认知升级与交易规则重构 - 第二层:财务质量评估、财务指标(当下是否赚钱)详解
  • 微信、网站提成方案点做搜索推广账户优化
  • 公司内部网站的作用网站服务器重启
  • 站长百度互动平台网站建设
  • 常州公司网站建设多少钱中英文网站建设
  • 河南做网站联系电话wordpress安装语言设置
  • MySQL包安装 -- Debian系列(Apt资源库安装MySQL)
  • 同安网站建设网站开发用了哪些知识要点
  • 京东商品详情API深度技术解析与应用全景图
  • 【数值分析】09-非线性方程的求根方法-简单迭代法求根(2)
  • 彩票网站开发制作模版企业建设营销型网站步骤
  • 包头北京网站建设视觉设计主要学什么
  • 怎样把自己做的网站发到网上域名查询网站信息
  • 为什么 CompletableDeferred 不适合数据流---》数据流的正确解决方案
  • 大连模版网站网页紧急升级维护中升级