线性表
List(线性表)是一个接口,ArrayList(顺序表)和LinkedList(链表)继承了List。
List的常用方法:
方法签名 | 功能描述 |
---|---|
add(E e) | 把e这个元素,尾插到线性表中 |
add(int index,E e) | 把e这个元素,插入到index所在位置,同时,index之后的所有元素,必须"逻辑"后移 |
remove(int index) | 删除index这个下标的元素,同时,index之后的所有元素,必须"逻辑"前移 |
remove(Object o) | 删除第一个遇到的o元素(本质上是使用"equals"进行比较) |
get(int index) | 返回index下标处的元素 |
set(int index,E e) | 用e替换index下标处的元素 |
size() | 元素个数 |
clear() | 清空线性表 |
isEmpty() | 判断是否为一个空的线性表 |
contains(Object o) | 返回线性表中,是否包含o这个对象(本质上使用的是"equals"方法) |
indexOf(Object o) | 返回线性表中,第一个遇到o这个对象的下标(equals) |
lastIndexOf(Object o) | 返回线性表中,最后一个遇到o这个对象的下标(equals) |
subList(int from,int to) | 从线性表中,截取一段线性表下来,[from,to)不会影响原线性表 |
sort(Comparator cmp) | 对线性表进行排序,以传入的比较器进行元素的比较 |
iterator() | 返回迭代器,进行从前向后遍历 |
listIterator() | 效果等同于listInterator(0) |
listIterator(int index) | 从index位置开始遍历 |
toArray() | List转成数组 |
ArrayList(顺序表):
方法 | 解释 |
---|---|
ArrayList() | 无参构造 |
ArrayList(Collection<? extends E> c) | 利用其它Collection构建ArrayList |
ArrayList(int initialCapacity) | 指定顺序表初始容量 |
LinkedList(链表):
方法 | 解释 |
---|---|
LinkedList() | 无参构造 |
不管是List、ArrayList还是LinkedList都涉及到泛型,需要什么类型的线性表就在泛型里填什么就好了,注意基本类型必须全部用包装类。接下来我们来玩会扑克牌。
游戏一:一副扑克牌(只要各花色从1到5的牌)
- 洗牌
- 给5名玩家,各发两张牌
- 依次展示5名玩家手中的牌
分析:
- 需要扑克牌类来定义每一张牌
- 需要List<扑克牌> 牌组 = new ArrayList<>();
- 需要玩家类,玩家类中包含List<扑克牌> 手牌
- 将牌组的牌分发给个玩家手中
扑克牌类:
public class Card {
public String suit;//花色
public int rank;//牌面值
public Card(String suit,int rank){
this.suit = suit;
this.rank = rank;
}
@Override
//打印这张牌
public String toString() {
return String.format("[%s %d]",suit,rank);
}
}
玩家类:
import java.util.ArrayList;
import java.util.List;
public class Player {
public List<Card> cards = new ArrayList<>();//手牌
public String name;//玩家姓名
public Player(String name) {
this.name = name;
}
}
玩游戏:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Game {
//制作扑克牌(初始化)
private static void initializeCards(List<Card> cards){
for(String suit: new String[]{
"♠","♥","♦","♣"}){
for(int rank = 1;rank <= 5;rank++){
Card card = new Card(suit,rank);
//把扑克牌放入牌组中
cards.add(card);
}
}
}
public static void main(String[] args) {
//5名玩家,用List将其保存起来
List<Player> playerList = new ArrayList<>();
playerList.add(new Player("周润发"));
playerList.add(new Player("刘德华"));
playerList.add(new Player("周星驰"));
playerList.add(new Player("高进"));
playerList.add(new Player("未知用户"));
//牌组容器
List<Card> cardList = new ArrayList<>();
//初始化扑克牌
initializeCards(cardList);
System.out.println("初始化好的牌:");
System.out.println(cardList);
//洗牌,可以直接调用Collections.shuffle来洗牌
Collections.shuffle(cardList);</