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

苏州公司网站建设服务自己怎么制作微信小程序

苏州公司网站建设服务,自己怎么制作微信小程序,软件开发工资一般多少大专,兰州网站建设公司价格文章目录 1. 线性表2. 顺序表3. ArrayList4. ArrayList的问题以及思考4.2 增容的性能消耗问题4.3 空间浪费问题 1. 线性表 线性表(Linear List)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见线性表&…

文章目录

  • 1. 线性表
  • 2. 顺序表
  • 3. ArrayList
  • 4. ArrayList的问题以及思考
    • 4.2 增容的性能消耗问题
    • 4.3 空间浪费问题

1. 线性表

线性表(Linear List)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见线性表:顺序表、链表、栈、队列…

线性表在逻辑上是线性结构,也就是连续的一条直线。但是在物理上不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2. 顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

顺序表的实现

package myDataStructure.ArrayList;/*** @Author: Author* @CreateTime: 2025-03-18* @Description:*/
public interface SeqList<T> {// 新增元素,默认在数组最后新增void add(T data);// 在 pos 位置新增元素void add(int pos, T data);// 判定是否包含某个元素boolean contains(T toFind);// 查找某个元素对应的位置int indexOf(T toFind);// 获取 pos 位置的元素T get(int pos);// 给 pos 位置的元素设为 valuevoid set(int pos, T value);// 删除第一次出现的关键字keyvoid remove(T toRemove);// 获取顺序表长度int size();// 清空顺序表void clear();
}
package myDataStructure.ArrayList;import java.util.Arrays;/*** @Author: Author* @CreateTime: 2025-03-18* @Description: 支持泛型的动态数组的实现*/
public class MyArrayList<T> implements SeqList<T>{private Object[] array; // 内部使用 Object[] 存储数据,因为 Java 的泛型会在运行时擦除类型信息。private int size;public MyArrayList(){array=new Object[10];}// 动态扩容private void checkCapacity(){if (array.length==size){array=Arrays.copyOf(array,size*2);}}// 添加操作的边界检查private void rangeCheckForAdd(int index) {if (index<0||index>size){throw new IndexOutOfBoundsException("index超出范围");}}// 读取修改操作的边界检查private void rangeCheckForGetAndSet(int index) {if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("index超出范围");}}@Overridepublic void add(T data) {checkCapacity();array[size]=data;size++;}@Overridepublic void add(int pos, T data) {checkCapacity();rangeCheckForAdd(pos);for(int i=size;i>pos;i--){array[i]=array[i-1];}array[pos]=data;size++;}@Overridepublic boolean contains(T toFind) {if (toFind==null){// 如果 toFind 是null,直接调用 array[i].equals(toFind) 会导致 NullPointerExceptionfor (int i = 0; i < size; i++) {if (array[i] == null) {return true;}}}else {for (int i=0;i<size;i++){if (array[i].equals(toFind)){return true;}}}return false;}@Overridepublic int indexOf(T toFind) {if (toFind == null) {for (int i = 0; i < size; i++) {if (array[i] == null) {return i;}}} else {for (int i = 0; i < size; i++) {if (toFind.equals(array[i])) {return i;}}}return -1;}@Overridepublic T get(int pos) {rangeCheckForGetAndSet(pos);return (T)array[pos];}@Overridepublic void set(int pos, T value) {rangeCheckForGetAndSet(pos);checkCapacity();array[pos]=value;}@Overridepublic void remove(T toRemove) {int pos=indexOf(toRemove);if (pos==-1){return; // 元素不存在,直接返回}for (int i=pos;i<size-1;i++){array[i]=array[i+1];}array[size-1]=null;// 清理最后一个元素size--;}@Overridepublic int size() {return size;}@Overridepublic void clear() {size=0;}public String toString(){StringBuilder sb = new StringBuilder("[");for (int i = 0; i < size; i++) {sb.append(array[i]);if (i < size - 1) {sb.append(", ");}}sb.append("]");return sb.toString();}
}

3. ArrayList

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:

1

  1. ArrayList是以泛型方式实现的,使用时必须要先实例化
  2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
  3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
  4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
  5. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择CopyOnWriteArrayList
  6. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

4. ArrayList的问题以及思考

##4.1 插入或删除元素的性能问题(时间复杂度 O(N))

ArrayList 底层是基于数组实现的,插入或删除元素时,所有后续元素需要整体移动,导致时间复杂度为 O(N)。

  • 使用链表(LinkedList
    • 对于频繁插入或删除操作的场景,LinkedList 是更好的选择。
    • LinkedList 是基于双向链表实现的,插入和删除的时间复杂度为 O(1)(只需调整指针),但随机访问的时间复杂度为 O(N)。
    • 适用场景:需要频繁插入或删除的场景,但随机访问较少。
  • 使用 ArrayDeque
    • 如果操作集中在首尾两端,可以使用 ArrayDeque,它支持高效的首尾插入和删除操作。
  • 优化插入/删除的逻辑
    • 如果需要频繁插入或删除,尽量批量操作,而不是逐个操作。例如,先将需要插入的数据存储在临时集合中,最后一次性合并到目标集合。

4.2 增容的性能消耗问题

ArrayList 增容时需要重新分配新空间,并将旧数组的数据拷贝到新数组中,这会带来性能开销。

  • 预估容量,合理初始化 ArrayList 的初始容量

    • 在创建ArrayList时,尽量根据实际需求指定初始容量,避免频繁增容。例如:

      ArrayList<Integer> list = new ArrayList<>(1000);
      

      这样可以减少扩容操作的发生。

  • 使用 ArrayList.ensureCapacity() 方法

    • 如果知道大概需要插入的元素数量,可以在插入数据前调用ensureCapacity()方法手动扩容,避免多次增容。例如:

      list.ensureCapacity(1000);
      
  • 使用其他动态数据结构

    • 如果扩容的性能开销成为瓶颈,可以考虑使用其他动态数据结构(如 LinkedListArrayDeque),具体选择取决于场景需求。

4.3 空间浪费问题

ArrayList 增容时容量通常增长为原来的 2 倍,会导致未使用的空间浪费。

  • 手动调整容量

    • 在确定不再需要新增元素时,可以调用ArrayList.trimToSize()方法,将ArrayList的容量调整为当前元素的实际大小,减少空间浪费。例如:

      list.trimToSize();
      
  • 使用其他集合类(如 LinkedList

    • 如果对空间利用率要求较高,可以考虑使用 LinkedList,因为它的空间分配是动态的,不会预留多余的空间。
  • 动态调整容量增长策略

    • 如果对 ArrayList 的增容策略不满意,可以自定义一个集合类,继承自 ArrayList,并重写其扩容逻辑。例如,可以改为按固定大小增长,而不是倍增。

文章转载自:

http://RtdkaMdt.swbhq.cn
http://McbJlo6Y.swbhq.cn
http://4uKCCerX.swbhq.cn
http://fFaoFoJn.swbhq.cn
http://S2Ld901r.swbhq.cn
http://X3u39OtP.swbhq.cn
http://IiChnmsp.swbhq.cn
http://G2irb1QE.swbhq.cn
http://QUjQibyv.swbhq.cn
http://tD1SLFWR.swbhq.cn
http://L1vL0hno.swbhq.cn
http://MsshCNzL.swbhq.cn
http://AVFe5iTL.swbhq.cn
http://O5eBigR7.swbhq.cn
http://vkV03Ogo.swbhq.cn
http://NpVHlAXe.swbhq.cn
http://lRm9nPZ9.swbhq.cn
http://8NU3reVv.swbhq.cn
http://4wOrzlV8.swbhq.cn
http://J2WIZsoG.swbhq.cn
http://i6HkMRuX.swbhq.cn
http://uIm3zJPM.swbhq.cn
http://IeMbOfb2.swbhq.cn
http://d5BVATYZ.swbhq.cn
http://1AMRY4mO.swbhq.cn
http://xZf3iJmz.swbhq.cn
http://aALDGD7i.swbhq.cn
http://wmQFPpsr.swbhq.cn
http://XXa0AEsu.swbhq.cn
http://OOgbGQIu.swbhq.cn
http://www.dtcms.com/wzjs/759096.html

相关文章:

  • 协会网站信息平台建设企业建站用什么主机
  • 南京的网站制作公司多少钱要交税
  • 哈尔滨展览设计公司已矣seo排名点击软件
  • 网站的用户体验贵阳市房地产交易平台上线
  • 1号店网站网页特效濮阳网站怎么做seo
  • 杭州高端网建新站seo优化快速上排名
  • 凤山网站seovs2008不能新建网站
  • 海洋网站建设公司网站图片轮播怎么做的
  • 如何拥有一个自己的网站贵州企业网站建设公司
  • 手机网站图片切换特效广告代运营
  • 外汇自动跟单网站开发微信产品展示小程序
  • wordpress网站模版城市建设局网站
  • 注册域名之后如何做网站linux服务器WordPress建站教程
  • 桂城网站建设网站开发亮点
  • 表白网站建设源码怎么查看网站是否降权
  • 棠下手机网站建设电话广告设计专业简历
  • 有哪个网站做ic新乡建设企业网站
  • 做分销微商城网站如何开科技软件
  • 宁波p2p网站建设企业网络营销策划
  • php网站开发工资多少服务器上网站建设
  • 网站里怎样添加关键词河北建设厅网站初始密码
  • 网站制作哪家做的好青岛做网站大公司有哪些
  • 设计简单的网站做非法网站判什么邢
  • 手机在线做ppt的网站有哪些问题哪个浏览器任何网站都可以访问
  • 网站的建设运营收费是哪些app服务器搭建教程
  • 中国银行门户网站长春网站优化公司
  • 网站优化费用怎么做会计分录做网站建设还有钱赚吗
  • 烟台企业网站做网站哪个系统最安全
  • 泸州住房和城乡建设厅网站威海网站建设吧
  • 网站开发设计流程时间表衡水网站建设优化排名