当前位置: 首页> 教育> 培训 > ArrayList与顺序表

ArrayList与顺序表

时间:2025/7/10 8:37:46来源:https://blog.csdn.net/qq_57681480/article/details/125699812 浏览次数:0次

ArrayList与顺序表

文章目录

  • ArrayList与顺序表
    • 线性表
    • 1.顺序表
    • 2.ArrayList的简介
    • 3.ArrayList的使用
    • 4.ArrayList的遍历
    • 5.ArrayList的扩容机制
    • 6.使用示例
      • 6.1扑克牌
      • 6.2杨辉三角
    • 7.心得

线性表

1.顺序表

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

2.ArrayList的简介

3.ArrayList的使用

各种方法:

方法名作用
add(E)尾插
add(int, E)在任意位置插入
remove(int)删除任意位置的值
set(int,E)改变任意位置的值
get(int)获得任意位置的值
contain(Object)判断是否包含这个参数
indexof(Object)通过参数值找到该值的下标
size()求当前顺序表的大小
subList(int,int)截取顺序表

注意subList:这里的截取只是把要截取的顺序表下标的地址拿去了,操作的就是原来的顺序表,所以对截取后的顺序表的任何操作对原来的顺序表都有影响。

4.ArrayList的遍历

        ArrayList<String> arrayList = new ArrayList<>();arrayList.add("刘宇豪");arrayList.add("今年");arrayList.add("20岁啦!");System.out.println(arrayList);System.out.println("==========================");//for遍历for (int i = 0; i < arrayList.size(); i++) {System.out.println(arrayList.get(i));}System.out.println("==========================");//foreach遍历for (String e: arrayList) {System.out.println(e);}System.out.println("==========================");//迭代器 iterator用的多一些Iterator<String> it = arrayList.iterator();while(it.hasNext()){System.out.println(it.next());}ListIterator<String> it2 = arrayList.listIterator();while(it2.hasNext()){System.out.println(it2.next());}

5.ArrayList的扩容机制

去看源码

【总结】

  1. 检测是否真正需要扩容,如果是调用grow准备扩容
  2. 预估需要库容的大小
    • 初步预估按照1.5倍大小扩容
    • 如果用户所需大小超过预估1.5倍大小,则按照用户所需大小扩容
    • 真正扩容之前检测是否能扩容成功,防止太大导致扩容失败
  3. 使用copyOf进行扩容

6.使用示例

6.1扑克牌

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;//抽象牌
class Card{private int rank;private String suit;public Card(int rank, String suit){this.rank = rank;this.suit = suit;}@Overridepublic String toString() {return "" + suit + " " + rank;}
}
public class CardDemo {private String[] suit = {"❤","♠","♣","♦"};//准备一副牌public List<Card> buyCards(){List<Card> cards = new ArrayList<>(52);for (int i = 1; i < 14; i++) {for (int j = 0; j < 4; j++) {String s = suit[j];Card card = new Card(i,s);cards.add(card);}}return cards;}private void swap(List<Card> cards, int i, int j){Card tmp = cards.get(i);cards.set(i,cards.get(j));cards.set(j,tmp);}//洗牌public void shuffle(List<Card> cards){Random random = new Random();for (int i = cards.size()-1; i > 0 ; i--) {int index = random.nextInt(i);swap(cards,i,index);}}//揭牌public void test(List<Card> cards){List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();List<Card> hand3 = new ArrayList<>();List<List<Card>> hands = new ArrayList<>();hands.add(hand1);hands.add(hand2);hands.add(hand3);for (int i = 0; i < 5; i++) {for (int j = 0; j < 3; j++) {Card card = cards.remove(0);hands.get(j).add(card);}}for (int i = 0; i < hands.size(); i++) {System.out.println("第"+ (i+1) + "个人的牌");System.out.println(hands.get(i));}System.out.println("剩余的牌 ");for (int i = 0; i < cards.size(); i++) {System.out.print(cards.get(i)+" ");}}
}

6.2杨辉三角

    public static List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<>();ArrayList<Integer> list1 = new ArrayList<>();list1.add(1);//每行第一列元素都是1ret.add(list1);//第一行元素//从第二行开始for (int i = 1; i < numRows; i++) {ArrayList<Integer> list2 = new ArrayList<>();list2.add(1);//每行第一个元素准备//准备前一行List<Integer> prevRow = ret.get(i-1);//从每行第二列开始for (int j = 1; j < i; j++) {//从第三行第二列开始,每列等于上一行的同一列的值+前一列的值list2.add(prevRow.get(j)+prevRow.get(j-1));}//每行最后一列元素都是1list2.add(1);ret.add(list2);}return ret;}

[118. 杨辉三角 - 力扣(LeetCode)]()

7.心得

d(1);
ret.add(list2);
}
return ret;
}


[[118. 杨辉三角 - 力扣(LeetCode)](https://leetcode.cn/problems/pascals-triangle/submissions/)]()## 7.心得顺序表适合用于查找数据,对于查找时间复杂度是O(1),是一个简单的哈希表。
关键字:ArrayList与顺序表

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: