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

顺序表(ArrayList)

线性表

线性表:具有n个相同特性数据元素的有限序列

常见的线性表:顺序表、链表、栈、队列……

线性表逻辑结构是线性结构(一条直线),物理结构不一定连续,物理存储通常数组+链式结构

顺序表

顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构

public interface IList {void add(int data) ;void add(int pos, int data);boolean contains(int toFind);int indexOf(int toFind);int get(int pos);void set(int pos, int value);void remove(int toRemove) ;void clear();int size();void display();boolean isFull();boolean isEmpty();
}

import java.util.Arrays;
public class MyArrayList implements IList{public int[] array;public int size;//size表示当前列表中实际存储的元素个数public static final int DEFALUT_CAPACITY=3;public MyArrayList(){array=new int[DEFALUT_CAPACITY];}@Overridepublic void add(int data) {if(isFull()){grow(2);}array[size]=data;size++;}public boolean isFull(){return array.length==size;}private void grow(int growNumber){array= Arrays.copyOf(array,growNumber*array.length);}@Overridepublic void add(int pos, int data) {checkPos(pos);if(isFull()){grow(2);}for (int i = size-1; i>=pos  ; i--) {array[i+1]=array[i];}array[pos]=data;size++;}private void checkPos(int pos){if(pos<0||pos>size){throw new PosOutOfBoundsException("插入元素时位置异常"+pos);}}@Overridepublic boolean contains(int toFind) {for (int i = 0; i <size ; i++) {if(array[i]==toFind){return true;}}return false;}@Overridepublic int indexOf(int toFind) {for (int i = 0; i <size ; i++) {if(array[i]==toFind){return i;}}return -1;}@Overridepublic int get(int pos) {if (isEmpty()){throw new EmptyException("获取元素顺序表为空");}checkPosByGetOrSet(pos);return array[pos];}private void checkPosByGetOrSet(int pos){if(pos<0||pos>=size){throw new PosOutOfBoundsException("获取元素时位置异常"+pos);}}public boolean isEmpty(){return size==0;}@Overridepublic void set(int pos, int value) {checkPosByGetOrSet(pos);array[pos]=value;}@Overridepublic void remove(int toRemove) {int index=indexOf(toRemove);if(index==-1){System.out.println("顺序表中无要查找的数据");return;}for (int i = 0; i <size-1 ; i++) {array[i]=array[i+1];}size--;}public int size(){return size;}@Overridepublic void clear() {size=0;}@Overridepublic void display() {for (int i = 0; i <size ; i++) {System.out.print(array[i]+" ");}}
}

public class EmptyException extends RuntimeException{public EmptyException() {}public EmptyException(String message) {super(message);}
}

public class PosOutOfBoundsException extends RuntimeException{public PosOutOfBoundsException() {}public PosOutOfBoundsException(String message) {super(message);}
}

public class Test {public static void main(String[] args) {MyArrayList list=new MyArrayList();list.add(100);list.add(11);list.add(22);list.add(33);list.add(44);list.add(55);list.add(66);list.remove(100);list.display();}public static void main4(String[] args) {MyArrayList list=new MyArrayList();list.add(100);list.add(11);list.add(22);list.add(33);list.add(44);list.add(55);list.add(66);list.display();System.out.println();list.set(0,0);list.display();}public static void main3(String[] args) {MyArrayList list=new MyArrayList();list.add(11);list.add(22);list.add(33);list.add(44);list.add(55);list.add(66);System.out.println(list.indexOf(66));System.out.println(list.indexOf(5));System.out.println(list.contains(11));System.out.println(list.contains(1));}public static void main2(String[] args) {MyArrayList list=new MyArrayList();list.display();System.out.println(list.get(0));}public static void main1(String[] args) {MyArrayList list=new MyArrayList();list.add(1);list.add(2);list.add(3);list.add(4);try {list.add(7,5);}catch (PosOutOfBoundsException e){e.printStackTrace();list.add(3,5);}list.add(0,0);list.display();System.out.println();System.out.println("获取元素位置"+list.get(0));System.out.println("获取元素位置"+list.get(5));}
}


ArrayList

ArrayList简介

1. ArrayList 是泛型实现的,使用前需实例化

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

3. 实现了 Cloneable 接口,支持克隆

4. 实现了 Serializable 接口,支持序列化

5. 与 Vector 不同,ArrayList 非线程安全,单线程可用,多线程可选择 Vector 或 CopyOnWriteArrayList

6. 底层是连续空间,支持动态扩容,是动态顺序表

ArrayList使用
 创建 ArrayList 对象

 添加元素

import java.util.ArrayList;
public class MyArrayList {public static void main(String[] args) {ArrayList<String> fruits = new ArrayList<>();// 尾插元素fruits.add("Apple");fruits.add("Banana");// 将元素插入到指定位置(下标从0开始)fruits.add(1, "Cherry");for (int i = 0; i < fruits.size(); i++) {//获取元素System.out.println(fruits.get(i));}}
}

获取元素
import java.util.ArrayList;
public class MyArrayList {public static void main(String[] args) {ArrayList<Integer> numbers = new ArrayList<>();numbers.add(10);numbers.add(20);numbers.add(30);int num = numbers.get(1);System.out.println(num);// 获取下标为1的元素,结果是20}
}

删除元素
import java.util.ArrayList;
public class MyArrayList {public static void main(String[] args) {ArrayList<String> colors = new ArrayList<>();colors.add("Red");colors.add("Green");colors.add("Blue");// 删除指定元素,删除遇到的第一个匹配元素colors.remove("Green");// 删除指定下标的元素colors.remove(0);for (int i = 0; i < colors.size(); i++) {//获取元素System.out.println(colors.get(i));}}
}

修改元素
import java.util.ArrayList;
public class MyArrayList {public static void main(String[] args) {ArrayList<String> names = new ArrayList<>();names.add("Alice");names.add("Bob");names.set(0, "Charlie"); // 将下标为0的元素修改为Charliefor (int i = 0; i < names.size(); i++) {System.out.println(names.get(i));}}
}

判断元素是否存在
import java.util.ArrayList;
public class MyArrayList {public static void main(String[] args) {ArrayList<String> animals = new ArrayList<>();animals.add("Dog");animals.add("Cat");boolean hasDog = animals.contains("Dog");System.out.println(hasDog);}
}

获取元素下标
import java.util.ArrayList;
public class MyArrayList {public static void main(String[] args) {ArrayList<String> words = new ArrayList<>();words.add("hello");words.add("world");words.add("hello");int firstIndex = words.indexOf("hello");int lastIndex = words.lastIndexOf("hello");System.out.println(firstIndex);System.out.println(lastIndex);}
}

清空列表
import java.util.ArrayList;
public class MyArrayList {public static void main(String[] args) {ArrayList<Integer> scores = new ArrayList<>();scores.add(80);scores.add(90);scores.clear();for (int i = 0; i <scores.size() ; i++) {System.out.println(scores.get(i));}}
}

截取部分列表
import java.util.ArrayList;
import java.util.List;
public class MyArrayList {public static void main(String[] args) {ArrayList<String> days = new ArrayList<>();days.add("Monday");days.add("Tuesday");days.add("Wednesday");days.add("Thursday");days.add("Friday");List<String> subDays = days.subList(1, 4);System.out.println(subDays); }
}

subList 返回的是 List 接口的实例,应使用 List 类型接收

ArrayList的遍历输出
直接输出
import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList=new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);arrayList.add(5);System.out.println(arrayList);}
}

for循环下标
import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList=new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);arrayList.add(5);for (int i = 0; i <arrayList.size() ; i++) {System.out.print(arrayList.get(i)+" ");}}
}

foreach
import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList=new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);arrayList.add(5);for (Integer x:arrayList) {System.out.print(x+" ");}}
}

迭代
import java.util.ArrayList;
import java.util.Iterator;public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList=new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);arrayList.add(5);Iterator<Integer> iterator= arrayList.iterator();while(iterator.hasNext()){System.out.print(iterator.next()+" ");}}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList=new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);arrayList.add(5);ListIterator<Integer> listIterator=arrayList.listIterator();while (listIterator.hasNext()){System.out.print(listIterator.next()+" ");}System.out.println();System.out.println("========================");ListIterator<Integer> listIterator1=arrayList.listIterator(1);//下标1的位置开始遍历while (listIterator1.hasNext()){System.out.print(listIterator1.next()+" ");}}
}

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList=new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);arrayList.add(5);ListIterator<Integer> listIterator=arrayList.listIterator(arrayList.size());while (listIterator.hasPrevious()){System.out.print(listIterator.previous()+" ");}}
}

杨辉三角

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int numRows = scanner.nextInt();ArrayList<ArrayList<Integer>> result = new ArrayList<>();ArrayList<Integer> arrayList1 = new ArrayList<>();arrayList1.add(1);result.add(arrayList1);for (int i = 1; i < numRows; i++) {ArrayList<Integer> curRow = new ArrayList<>();curRow.add(1);ArrayList<Integer> preRow = result.get(i - 1);for (int j = 1; j < i; j++) {int val = preRow.get(j - 1) + preRow.get(j);curRow.add(val);}curRow.add(1);result.add(curRow);}System.out.println(result);}
}

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

相关文章:

  • 刷题日记0823
  • [特殊字符] 数据库知识点总结(SQL Server 方向)
  • MySQL:事务管理
  • games101 作业0 环境搭建与熟悉线性代数库
  • H264编解码过程简述
  • 数据结构 -- 哈希表
  • RAGFlow (一) 开发环境搭建
  • imx6ull-驱动开发篇37——Linux MISC 驱动实验
  • [机械结构设计-18]:Solidworks - 特征(Feature)是构成三维模型的基本单元,是设计意图的载体,也是参数化设计的核心。
  • 深入剖析分布式事务的Java实现:从理论到Seata实战
  • c语言中enum与#define的用法区别
  • 算法题(189):食物链
  • 如何利用数据库事务,来防止数据不一致的问题
  • 云原生概述
  • [e3nn] 归一化 | BatchNorm normalize2mom
  • 自然语言处理——06 迁移学习(上)
  • MATLAB实现CNN-LSTM-Attention 时序和空间特征结合-融合注意力机制混合神经网络模型的风速预测
  • 云计算-K8s 运维:Python SDK 操作 Job/Deployment/Pod+RBAC 权限配置及自定义 Pod 调度器实战
  • Kubernetes相关问题集(四)
  • 「数据获取」《贵港统计年鉴》(2008-2023)(2016、2017缺失)(获取方式看绑定的资源)
  • 开发指南134-路由传递参数
  • 【KO】前端面试七
  • 科研笔记:博士生手册
  • n8n热门的开源 AI 工作流平台实操
  • git实战(7)git常用命令速查表
  • C++实现常见的排序算法
  • STM32窗口看门狗(WWDG)深度解析:精准守护嵌入式系统的实时性
  • day39-keepalived
  • How to Use Managed Identity with ACS?
  • 全面解析主流AI模型:功能对比与应用推荐