- 5. 扑克牌小游戏
[](()1. List
===========================================================================
[](()1.1 List 的常见方法
| 方法 | 描述 |
| — | — |
| boolean add(E e)
| 尾插 e |
| void add(int index, E element)
| 将 e 插入到 index 位置 |
| boolean addAll(Collection<? extends E> c)
| 尾插 c 中的元素 |
| E remove(int index)
| 删除 index 位置的元素 |
| boolean remove(Object o)
| 删除遇到的第一个 o |
| E get(int index)
| 获取下标 index 位置的元素 |
| E set(int index, E element)
| 将下标 index 位置元素设置为 element |
| void clear()
| 清空 |
| boolean contains(Object o)
| 判断 o 是否在线性表中 |
| int indexOf(Object o)
| 返回第一个 o 所在下标 |
| int lastIndexOf(Object o)
| 返回最后一个 o 的下标 |
| List<E> subList(int fromIndex, int toIndex)
| 截取部分 list |
[](()1.2 代码示例
注意: 下面的示例都是一份代码分开拿出来的,上下其实是有逻辑关系的
示例一: 用 List 构造一个元素为整形的顺序表
List list = new ArrayList<>();
示例二: 尾插 e
list.add(1);
list.add(2);
System.out.println(list);
// 结果为:[1, 2]
示例三: 将 e 插入到 index 位置
list.add(0,10);
System.out.println(list);
// 结果为:[10, 1, 2]
示例四: 尾插 c 中的元素
List list1=new LinkedList<>();
list1.add(99);
list1.add(100);
list.addAll(list1);
System.out.println(list);
// 结果为:[10, 1, 2, 99, 100]
*示例五: *删除 index 位置的元素
System.out.println(list.remove(0));
System.out.println(list);
// 结果为:10 和 [1, 2, 99, 100]
示例六: 删除遇到的第一个 o
System.out.println(list.remove((Integer) 100));
System.out.println(list) 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 ;
// 结果为:true 和 [1, 2, 99]
示例七: 获取下标 index 位置的元素
System.out.println(list.get(0));
// 结果为:1
示例八: 将下标 index 位置元素设置为 element
System.out.println(list.set(2,3));
System.out.println(list);
// 结果为:99 和 [1, 2, 3]
示例九: 判断 o 是否在线性表中
System.out.println(list.contains(1));
// 结果为:true
示例十: 返回第一个 o 所在下标
System.out.println(list.indexOf(1));
// 结果为:0
示例十一: 返回最后一个 o 的下标
list.add(1);
System.out.println(list.lastIndexOf(1));
// 结果为:3
示例十二: 截取部分 list
List list2=list.subList(1,3);
System.out.println(list2);
// 结果为:[2, 3]
[](()2. ArrayList
================================================================================
[](()2.1 介绍
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。其继承了 AbstractList,并实现了 List 接口。LinkedList 不仅实现了 List 接口,还实现了 Queue 和 Deque 接口,可以作为队列去使用。
ArrayList 类位于 java.util
包中,使用前需要引入它。
[](()2.2 ArrayList 的构造方法
| 方法 | 描述 |
| — | — |
| ArrayList()
| 无参构造 |
| ArrayList(Collection<? extends E> c)
| 利用其他 Collection 构建 ArrayList |
| ArrayList(int initialCapacity)
| 指定顺序表初始容量 |
示例一:
ArrayList list1 = new ArrayList<>();
示例二:
ArrayList list2 = new ArrayList<>(10);
// 该构造方法就是在构建时就将底层数组大小设置为了10
示例三:
List list = new ArrayList<>();
list.add(1);
list.add(2);
ArrayList list3 = new ArrayList<>(list);
[](()2.3 ArrayList 底层数组的大小
当我们使用 add 方法给 ArrayList 的对象进行尾插时,突然想到了一个问题:既然 ArrayList 的底层是一个数组,那么这个数组有多大呢?
为了解决这个问题,我进行了如下探索
为什么这个数组是空的但存储元素的时候没有报异常呢?我们再去了解下 add 是怎样存储的
此时我们就可以了解,当我们创建一个 ArrayList 时,其底层数组大小其实是0。当我们第一次 add 的时候,经过 grow ,数组的大小就被扩容为了10。并且这大小为10的容量放满以后,就会按1.5倍的大小继续扩容。至于这个数组最大能存放多少,大家可以再转到 MAX_ARRAY_SIZE
的定义去查看。
[](()3. LinkedList
=================================================================================
[](()3.1 介绍
LinkedList 类是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
Java 的 LinkedList 底层是一个双向链表,位于 java.util
包中,使用前需要引入它
[](()3.2 LinkedList 的构造方法
| 方法 | 描述 |
| — | — |
| LinkedList()
| 无参构造 |
| LinkedList(Collection<? extends E> c)
| 利用其他 Collection 构建 LinkedList |
示例一:
LinkedList list1 = new LinkedList<>();
示例二:
List list = new LinkedList<>();
list.add(1);
list.add(2);
LinkedList list2 = new LinkedList<>(list);
[](()4. 练习题
==========================================================================
- 习题一
题目描述:
本题代码:
class Student{
private String name;
private String classes;
private double score;
// 重写构造方法
public Student(String name, String classes, double score) {
this.name = name;
this.classes = classes;
this.score = score;
}
// 构造 get 和 set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
public double getScore() {
return score;
}