ArrayList与LinkedList常用操作

本文主要内容:
1.ArrayList的常用操作
2.随机数的简单介绍
3.Java自定义相等性的比较
4.迭代器简单介绍
5.Iterable与foreach的关系
6.LinkedList的常用操作
7.instanceOf简单说明
8.ArrayList练习(洗牌)
9.LinkedList常用操作练习
1.ArrayList常用操作:
(1)构造方法
ArrayList(); 构造空的顺序表,容量为默认容量
ArrayList(int capacity); 构造空的顺序表,容量为capacity
ArrayList(Collection c); 构造一个顺序表,把c中所有的元素放到顺序表中

List<Integer> origin = Arrays.asList(1,2,3,4,5);
ArrayList<Integer> list = new Arraylist<>(origin);

(2)常用方法:
add(E element): 尾插数据
add(int index,E element) :把元素插到index位置
remove(Object o): 删除顺序表中第一个o
remove(int index): 删除顺序表中下标为index的位置
contains(E e): 判断e是否在顺序表中
indexOf(E e): 返回出现e的第一次下标
lastIndexOf(E e): 返回出现e的最后一次下标
get(int index): 返回下标元素
set(int index,E e) : 更改下标元素
2.随机数
java.util.Random包下:
Random();与Random(long seed);
nextInt(bound)[0,bound)【bound不能为0】
伪随机,种子固定的情况下,随机产生是固定的,为了避免随机固定,引入时间作为种子,Rogue-Like
3.Java中自定义类相等性比较
(1)对于引用类型 == 判断的不是对象相等,而是引用相等,两个引用指向同一个对象
(2)Object类中有一个equals方法,在自定义类中覆写该方法,去调用该对象的equals方法
(3)自定义对象时:toString()、equals()推荐全部覆写
4.迭代器:Iterator
(1)重要方法:
boolean hasNext():判断是否有更多的元素
E next():返回迭代中的下一个元素
void remove():删除此迭代器返回的最后一个元素
5.Iterable和foreach关系:
foreach:for(int a:容器){};
ListIterator(双向迭代接口):方法中有previous:可以返回前一个元素。是一个可以沿一个方向遍历列表的迭代器,在迭代期间修改列表,并得到列表中迭代器当前的位置。
只要类实现了Iterable接口,就可以被foreach语法使用了
6.LinkedList
(1)LinkedList实现了List/Deque,,Deque(双端队列,具有队列和栈性质的数据结构)
(2)构造方法:LinkedList();
LinkedList(Collection c);
(3)方法:void addFirst(E e):在该链表的开头插入指定元素
void addLast(E e):将指定元素插入列表的末尾
E getFirst():返回链表的第一个元素
E getLast():返回链表中最后一个元素
E peek():检索但不删除列表的头
E peekFirst():检索但不删除链表的第一个元素
E peekLast():检索但不删除链表的最后一个元素
E poll():检索并删除链表的头
E pollFirst():检索并删除链表的第一个元素
E pollLast():检索并删除链表的最后一个元素
void push(E e):将该元素推送到由列表表示的栈上
E pop():从此列表中栈上弹出一个元素
List<E> subList(int fromIndex,int toIndex):返回fromIndex(含)和toIndex之前的
视图
7.instanceOf
a instanceOf b:a对象能否被b数据类型的引用所指向,即a对象类型是不是b类型的小类型。
8.ArrayList练习(洗牌)

//首先定义一个porkCard类
public class PorkCard {
    private int value;
    private String color;
    public PorkCard(){
    }
    public PorkCard(String color,int value){
        this.color = color;
        this.value = value;
    }
    public int getValue(){
        return value;
    }
    public void setValue(int value){
        this.value = value;
    }
    public String getColor(){
        return color;
    }
    public void setColor(String color){
        this.color = color;
    }
    @Override
    public String toString(){
        return "["+this.color+","+this.value+"]";
    }
    @Override
    public boolean equals(Object o){
        if(o==null){
            return false;
        }
        //PorkCard类型的引用是否指向o对象
        if(!(o instanceof PorkCard)){
            return false;
        }
        PorkCard porkCard = (PorkCard) o;
        return this.value==porkCard.value&&this.color.equals(porkCard.color);
    }
}
//其次定义playCards类,完成各个操作
public class PlayCards {
    public static void temp(ArrayList<PorkCard> arrayList,int i,int j){
        PorkCard temp1 = arrayList.get(i);
        PorkCard temp2 = arrayList.get(j);
        arrayList.set(i,temp2);
        arrayList.set(j,temp1);
    }
    public static void main(String[] args) {
        //写出52张牌
        ArrayList<PorkCard> arrayList = new ArrayList<>(52);
        //定义一个数组放入各种花色
        String[] cardColor = {"红桃","黑桃","方块","梅花"};
        //52张牌中有4中花色,每种花色13张
        for(int i = 0;i < 4;i++){
            for(int j = 0;j < 13;j++){
                PorkCard porkCard = new PorkCard(cardColor[i],j);
                arrayList.add(porkCard);
            }
        }
        System.out.println(arrayList);
        System.out.println("--------------------------------------");
        //洗牌->取出第52张牌,在前51张随机抽取一张后,两张牌交换(第一张牌例外)
        Random random = new Random(20190820);
        for(int i = 51;i >0;i--){
            //i = 51时,bound的范围[0,51)
            int num = random.nextInt(i);
            temp(arrayList,i,num);
        }
        System.out.println(arrayList);
        System.out.println("--------------------------------------");
        //给三个人分别发五张牌
        ArrayList<PorkCard> A = new ArrayList<>(5);
        ArrayList<PorkCard> B = new ArrayList<>(5);
        ArrayList<PorkCard> C = new ArrayList<>(5);
        for(int i = 1;i<16;i++){
            PorkCard porkCard = arrayList.get(arrayList.size()-1);
            switch (i%3){
                case 0:
                    A.add(porkCard);
                    break;
                case 1:
                    B.add(porkCard);
                    break;
                case 2:
                    C.add(porkCard);
                    break;
                default:
                    break;
            }
            arrayList.remove(porkCard);
        }
        System.out.println(A);
        System.out.println(B);
        System.out.println(C);
        System.out.println("------------------------------------");
        //查看A中有没有梅花4,如果有则删除,如果没有则返回
        PorkCard porkCard = new PorkCard("梅花",4);
        System.out.println(A);
        for(int i = 0;i<A.size();i++){
            if(porkCard.equals(A.get(i))){
                A.remove(porkCard);
                System.out.println(A);
            }
        }
        System.out.println("------------------------------------");
        Iterator<PorkCard> iterator = A.iterator();
        System.out.println(A);
        PorkCard porkCard1 = new PorkCard("红桃",4);
        while (iterator.hasNext()){
            PorkCard porkCard2 = iterator.next();
            if(porkCard1.equals(porkCard2)){
                iterator.remove();
                //在迭代器、foreach循环中使用集合提供的remove(),就会出现异常,而Iterator.remove()不会出现异常
            }
        }
        System.out.println(A);
        System.out.println("------------------------------------");
        if (A.contains(porkCard1)) {
            System.out.println("包含");
        } else {
            System.out.println("不包含");
        }
        System.out.println("--------------------------------------");
        ListIterator<PorkCard> listIterator = A.listIterator();
        System.out.println(listIterator.next());
        System.out.println(listIterator.next());
        System.out.println(listIterator.previous());
        System.out.println(listIterator.previous());
    }
}

运行结果:

[[红桃,0], [红桃,1], [红桃,2], [红桃,3], [红桃,4], [红桃,5], [红桃,6], [红桃,7], [红桃,8], [红桃,9], [红桃,10], [红桃,11], [红桃,12], [黑桃,0], [黑桃,1], [黑桃,2], [黑桃,3], [黑桃,4], [黑桃,5], [黑桃,6], [黑桃,7], [黑桃,8], [黑桃,9], [黑桃,10], [黑桃,11], [黑桃,12], [方块,0], [方块,1], [方块,2], [方块,3], [方块,4], [方块,5], [方块,6], [方块,7], [方块,8], [方块,9], [方块,10], [方块,11], [方块,12], [梅花,0], [梅花,1], [梅花,2], [梅花,3], [梅花,4], [梅花,5], [梅花,6], [梅花,7], [梅花,8], [梅花,9], [梅花,10], [梅花,11], [梅花,12]]
--------------------------------------
[[方块,1], [方块,7], [方块,3], [黑桃,12], [黑桃,8], [梅花,5], [红桃,7], [红桃,5], [红桃,10], [梅花,1], [红桃,12], [黑桃,11], [梅花,12], [方块,8], [黑桃,6], [梅花,11], [红桃,8], [黑桃,2], [方块,0], [方块,9], [梅花,3], [红桃,6], [方块,12], [红桃,3], [梅花,2], [梅花,10], [方块,6], [方块,11], [方块,4], [红桃,9], [红桃,1], [黑桃,10], [黑桃,0], [黑桃,7], [梅花,6], [红桃,0], [黑桃,4], [梅花,0], [黑桃,3], [梅花,9], [方块,10], [黑桃,5], [红桃,11], [梅花,8], [黑桃,1], [方块,5], [红桃,4], [红桃,2], [黑桃,9], [梅花,4], [梅花,7], [方块,2]]
--------------------------------------
[[梅花,4], [红桃,4], [梅花,8], [方块,10], [梅花,0]]
[[方块,2], [黑桃,9], [方块,5], [红桃,11], [梅花,9]]
[[梅花,7], [红桃,2], [黑桃,1], [黑桃,5], [黑桃,3]]
------------------------------------
[[梅花,4], [红桃,4], [梅花,8], [方块,10], [梅花,0]]
[[红桃,4], [梅花,8], [方块,10], [梅花,0]]
------------------------------------
[[红桃,4], [梅花,8], [方块,10], [梅花,0]]
[[梅花,8], [方块,10], [梅花,0]]
------------------------------------
不包含
--------------------------------------
[梅花,8]
[方块,10]
[方块,10]
[梅花,8]

9.LinkedList常用操作练习

public class MyLinkedList {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list);
        System.out.print(list.peek()+" ");
        System.out.print(list.peekFirst()+" ");
        System.out.println(list.peekLast());
        System.out.print(list.poll()+" ");
        System.out.print(list.pollFirst()+" ");
        System.out.println(list.pollLast());
        System.out.println(list);
        list.push(1);
        list.push(2);
        list.push(3);
        System.out.println(list);
        System.out.println(list.pop());
    }
}

运行结果:

[1, 2, 3]
1 1 3
1 2 3
[]
[3, 2, 1]
3
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值