ArrayList与顺序表

本文详细介绍了ArrayList的特性,包括其在集合框架中的位置、支持的接口以及与Vector的区别。讲解了ArrayList的构造方法,如无参构造、带容量构造和从Collection构造。接着展示了ArrayList的常见操作,如尾插、打印、删除和截取子列表。通过实例演示了如何删除字符串中特定字符以及模拟发放扑克牌的过程。内容深入浅出,适合Java初学者和进阶者学习。
摘要由CSDN通过智能技术生成

ArrayList简介

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

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

ArrayList的构造

方法解释
ArrayList()无参构造
ArrayList(Collection<? extends E> c)利用其他 Collection 构建 ArrayList
ArrayList(int initialCapacity)指定顺序表初始容量
public static void main(String[] args) { 
// ArrayList创建,推荐写法 
// 构造一个空的列表
 List<Integer> list1 = new ArrayList<>();

注: 当调用这个方法时,顺序表大小是0;当第一次add的时候,会变成10,扩容是1.5倍扩容。

// 构造一个具有10个容量的列表
 List<Integer> list2 = new ArrayList<>(10);
  list2.add(1);
   list2.add(2);
    list2.add(3);
     // list2.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素

注: 扩容还是1.5倍。

    public static void main6(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();//初始的大小是几?答案是0
        list1.add("haha!");//当第一次存放数据元素的时候,顺序表被分配大小为10
        System.out.println(list1);
        ArrayList<String> list2 = new ArrayList<>(13);//初始大小是指定的13
    }

// list3构造好之后,与list中的元素一致 
ArrayList<Integer> list3 = new ArrayList<>(list);
// 避免省略类型,否则:任意类型的元素都可以存放,使用时将是一场灾难
 List list4 = new ArrayList(); 
 list4.add("111"); 
 list4.add(100);

ArrayList常见操作

尾插

public static void main(String[] args) {

        ArrayList<String> list2 = new ArrayList<>();
        list2.add("hello");
        list2.add("world");
        list2.add("haha");
        System.out.println(list2);
    }

在这里插入图片描述

打印

public static void main(String[] args) {
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("hello");
        list2.add("world");
        list2.add("haha");
        System.out.println(list2);
        System.out.println("================");
        for(int i = 0; i< list2.size();i++) {
            System.out.print (list2.get(i)+" ");
        }
        System.out.println();
        System.out.println("==================");
        for (String s : list2) {
            System.out.print(s+" ");
        }
        System.out.println();
        System.out.println("========迭代器打印==========");
        Iterator<String> it = list2.iterator();
        while (it.hasNext()) {
            System.out.print(it.next()+" ");
        }

        System.out.println();
        System.out.println("========迭代器List相关打印==========");
        ListIterator<String> it2 = list2.listIterator();
        while (it2.hasNext()) {
            System.out.print(it2.next()+" ");
        }
    }

在这里插入图片描述

删除

public static void main(String[] args) {
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("hello");
        list2.add("world");
        list2.add("haha");
        Iterator<String> it = list2.iterator();
        while (it.hasNext()) {
            String ret = it.next();
            if(ret.equals("hello")) {
                it.remove();//首先需要使用next方法迭代出集合中的元素 ,然后才能调用remove方法
            }else {
                System.out.print(ret + " ");
            }
        }

        System.out.println();
        System.out.println("========迭代器List相关打印==========");
        ListIterator<String> it2 = list2.listIterator();
        while (it2.hasNext()) {
            String ret = it2.next();
            if(ret.equals("hello")) {
                it2.remove();//首先需要使用next方法迭代出集合中的元素 ,然后才能调用remove方法
            }else {
                System.out.print(ret + " ");
            }
        }
    }

在这里插入图片描述

截取部分 list

 public static void main(String[] args) {
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("a");
        list2.add("c");
        list2.add("g");
        list2.add("a");
        list2.add("o");
        List<String> sub = list2.subList(1, 3);
        System.out.println(sub);
        System.out.println(list2);
        System.out.println("==================");
        sub.set(0, "p");
        System.out.println(sub);
        System.out.println(list2);
    }

在这里插入图片描述

练习:删除第一个字符串中出现的第二个字符串中的字符

 public static void main(String[] args) {
        String str1 = "welcome to china";
        String str2 = "come";
        System.out.println(str1);
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < str1.length(); i++) {
            char ch = str1.charAt(i);
            if (!str2.contains(ch + "")) { 
                list.add(ch);
            }
        }

        for (char ch : list) {
            System.out.print(ch);
        }
    }

在这里插入图片描述

模拟发放扑克牌

class Card {
    private int rank;//数字
    private String suit;//花色

    public Card(int rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "[ "+this.suit+":"+this.rank+" ]";
    }
}

//没有大小王:1 2 3 。。。。。。10 11 12 13
public class TestDemo2 {

    private static final String[] suits = {"♥","♠","♣","♦"};

    public static List<Card> buyCard() {
        ArrayList<Card> cards = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <= 13; j++) {
                /*String suit = suits[i];
                int rank = j;
                Card card = new Card(rank,suit);
                cards.add(card);*/
                cards.add(new Card(j,suits[i]));
            }
        }
        return cards;
    }

    private static void swap(List<Card> cards,int i,int j) {
        //Card tmp = cards[i];
        Card tmp = cards.get(i);
        //cards[i] = cards[j];
        cards.set(i,cards.get(j));
        //cards[j] = tmp;
        cards.set(j,tmp);
    }

    public static void shuffle(List<Card> cards) {
        int size = cards.size();
        for (int i = size-1; i > 0 ; i--) {
            Random random = new Random();
            int rand = random.nextInt(i);
            swap(cards,i,rand);
        }
    }

    public static void main(String[] args) {
        List<Card> cards = buyCard();
        System.out.println("买牌:"+cards);
        shuffle(cards);
        System.out.println("洗牌:"+cards);

        System.out.println("揭牌:3个人每个人轮流揭5张牌");

        ArrayList<List<Card>> hand = new ArrayList<>();

        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();

        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);
        //每个人,轮流揭牌
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card card = cards.remove(0);
                hand.get(j).add(card);
            }
        }
        System.out.println("第1个人的牌:"+hand1);
        System.out.println("第2个人的牌:"+hand2);
        System.out.println("第3个人的牌:"+hand3);
        System.out.println("剩下的牌:"+cards);
    }

    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret = new ArrayList<>();
        //第一行:
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        ret.add(list1);//才把第一行的数据存放到了ret当中
        for (int i = 1; i < numRows; i++) {
            List<Integer> list = new ArrayList<>();
            list.add(1);//每一行的开始都是1
            List<Integer> preRow = ret.get(i-1);//上一行
            for (int j = 1; j < i ; j++) {
                //中间的情况
                int num1 = preRow.get(j)+preRow.get(j-1);
                list.add(num1);
            }
            list.add(1);//每一行的结尾都是1
            ret.add(list);
        }
        return ret;
    }

    public static void main1(String[] args) {
        Card card = new Card(3,"♥");
        System.out.println(card);
    }
}

在这里插入图片描述

复习专用!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粉色的志明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值