Java之List
Posted 0x7e
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之List相关的知识,希望对你有一定的参考价值。
0x01.List接口介绍
-
我们掌握了Collection接口的使用后,再来看看Collection接口中的子类,他们都具备那些特性呢?
接下来,我们一起学习Collection中的常用几个子类(
java.util.List
集合、java.util.Set
集合)。 -
List接口的概述
-
List接口的特点
1、List接口的概述
java.util.List
接口继承自Collection
接口,是单列集合的一个重要分支,习惯性地会将实现了List
接口的对象称为List集合。
2、List接口特点
- 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
- 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
- 集合中可以有重复的元素。
tips:我们之前学习过了List接口的子类java.util.ArrayList类,该类中的方法都是来自List中定义。
3、List接口中常用方法
- List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法
知识点:
- List接口新增常用方法
- List接口新增常用方法的使用
List接口新增常用方法
List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法,如下:
public void add(int index, E element)
: 将指定的元素,添加到该集合中的指定位置上。public E get(int index)
:返回集合中指定位置的元素。public E remove(int index)
: 移除列表中指定位置的元素, 返回的是被移除的元素。public E set(int index, E element)
:用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
List集合特有的方法都是跟索引相关,我们在基础班都学习过。
List接口新增常用方法的使用
public class Demo {
public static void main(String[] args) {
// 创建一个List集合,限制集合中的元素为String类型
List<String> list = new ArrayList<>();
// 往集合中添加一些元素
list.add("苍老师");
list.add("波老师");
list.add("吉泽老师");
list.add("小泽老师");
System.out.println(list);// [苍老师, 波老师, 吉泽老师, 小泽老师]
// 添加元素到集合的指定位置:public void add(int index, E element)
// 例如:在索引为1的位置添加一个元素(王老师)
list.add(1,"王老师");
System.out.println(list);// [苍老师, 王老师, 波老师, 吉泽老师, 小泽老师]
// 获取指定索引位置上的元素: public E get(int index)
// 例如:获取索引为2的元素
String e1 = list.get(2);
System.out.println("索引为2的元素是:"+e1);// 索引为2的元素是:波老师
// 删除指定索引位置上的元素:public E remove(int index)
// 例如:删除索引为1的元素
String removeE = list.remove(1);
System.out.println("被删除的元素:"+removeE);// 被删除的元素:王老师
System.out.println(list);// [苍老师, 波老师, 吉泽老师, 小泽老师]
// 修改指定位置上的元素:public E set(int index, E element)
// 例如:把索引为0的元素替换为明老师
String e2 = list.set(0, "明老师");
System.out.println("被替换的元素:"+e2);// 被替换的元素:苍老师
System.out.println(list);// [明老师, 波老师, 吉泽老师, 小泽老师]
}
}
4、List的子类
目标:
-
了解List接口的实现类
-
ArrayList集合
-
LinkedList集合
ArrayList集合
java.util.ArrayList
集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList
是最常用的集合。
许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。
LinkedList集合
java.util.LinkedList
集合数据存储的结构是链表结构。方便元素添加、删除的集合。
LinkedList是一个双向链表,那么双向链表是什么样子的呢,我们用个图了解下
实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。这些方法我们作为了解即可:
public void addFirst(E e)
:将指定元素插入此列表的开头。public void addLast(E e)
:将指定元素添加到此列表的结尾。public E getFirst()
:返回此列表的第一个元素。public E getLast()
:返回此列表的最后一个元素。public E removeFirst()
:移除并返回此列表的第一个元素。public E removeLast()
:移除并返回此列表的最后一个元素。public E pop()
:从此列表所表示的堆栈处弹出一个元素。public void push(E e)
:将元素推入此列表所表示的堆栈。
LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,我们只需要了解LinkedList的特有方法即可。在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。
public class Demo {
public static void main(String[] args) {
// 创建一个LinkedList集合,限制集合中元素的类型为String类型
LinkedList<String> list = new LinkedList<>();
// 往集合中添加一些元素
list.add("王宝强");
list.add("贾乃亮");
list.add("文章");
list.add("陈羽凡");
System.out.println(list);// [王宝强, 贾乃亮, 文章, 陈羽凡]
// 添加一个元素在集合的开头位置: public void addFirst(E e)
list.addFirst("谢霆锋");
// 添加一个元素在集合的末尾位置: public void addLast(E e)
list.addLast("吴秀波");
System.out.println(list);// [谢霆锋, 王宝强, 贾乃亮, 文章, 陈羽凡, 吴秀波]
// 获取集合中的第一个元素:public E getFirst()
System.out.println("集合中第一个元素为:"+list.getFirst());// 集合中第一个元素为:谢霆锋
// 获取集合中的最后一个元素:public E getLast()
System.out.println("集合中最后一个元素为:"+list.getLast());// 集合中最后一个元素为:吴秀波
// 删除集合中的第一个元素:public E removeFirst()
String removeFirst = list.removeFirst();
System.out.println("被删除的元素:"+removeFirst);// 谢霆锋
System.out.println("删除第一个元素后的集合:"+list);// [王宝强, 贾乃亮, 文章, 陈羽凡, 吴秀波]
// 删除集合中的最后一个元素:public E removeLast()
String removeLast = list.removeLast();
System.out.println("被删除的元素:"+removeLast);// 吴秀波
System.out.println("删除最后一个元素后的集合:"+list);// [王宝强, 贾乃亮, 文章, 陈羽凡]
// public E pop():从此列表所表示的堆栈处弹出一个元素。 删除第一个元素
String popE = list.pop();
System.out.println("popE:"+popE);// popE:王宝强
System.out.println("调用pop方法后的集合:"+list);// [贾乃亮, 文章, 陈羽凡]
// public void push(E e):将元素推入此列表所表示的堆栈。添加一个元素在集合的开头位置
list.push("刘强东");
System.out.println("调用push方法后的集合:"+list);// [刘强东, 贾乃亮, 文章, 陈羽凡]
}
}
案例---集合综合案例
-
按照斗地主的规则,完成洗牌发牌的动作。
具体规则:使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
分析:
-
准备牌:
牌可以设计为一个ArrayList
,每个字符串为一张牌。
每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。
牌由Collections类的shuffle方法进行随机排序。 -
发牌
将每个人以及底牌设计为ArrayList
,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 -
看牌
直接打印每个集合。
实现:
import java.util.ArrayList;
import java.util.Collections;
public class Poker {
public static void main(String[] args) {
/*
* 1: 准备牌操作
*/
//1.1 创建牌盒 将来存储牌面的
ArrayList<String> pokerBox = new ArrayList<String>();
//1.2 创建花色集合
ArrayList<String> colors = new ArrayList<String>();
//1.3 创建数字集合
ArrayList<String> numbers = new ArrayList<String>();
//1.4 分别给花色 以及 数字集合添加元素
colors.add("?");
colors.add("?");
colors.add("?");
colors.add("?");
for(int i = 2;i<=10;i++){
numbers.add(i+"");
}
numbers.add("J");
numbers.add("Q");
numbers.add("K");
numbers.add("A");
//1.5 创造牌 拼接牌操作
// 拿出每一个花色 然后跟每一个数字 进行结合 存储到牌盒中
for (String color : colors) {
//color每一个花色 guilian
//遍历数字集合
for(String number : numbers){
//结合
String card = color+number;
//存储到牌盒中
pokerBox.add(card);
}
}
//1.6大王小王
pokerBox.add("小?");
pokerBox.add("大?");
// System.out.println(pokerBox);
//洗牌 是不是就是将 牌盒中 牌的索引打乱
// Collections类 工具类 都是 静态方法
// shuffer方法
/*
* static void shuffle(List<?> list)
* 使用默认随机源对指定列表进行置换。
*/
//2:洗牌
Collections.shuffle(pokerBox);
//3 发牌
//3.1 创建 三个 玩家集合 创建一个底牌集合
ArrayList<String> player1 = new ArrayList<String>();
ArrayList<String> player2 = new ArrayList<String>();
ArrayList<String> player3 = new ArrayList<String>();
ArrayList<String> dipai = new ArrayList<String>();
//遍历 牌盒 必须知道索引
for(int i = 0;i<pokerBox.size();i++){
//获取 牌面
String card = pokerBox.get(i);
//留出三张底牌 存到 底牌集合中
if(i>=51){//存到底牌集合中
dipai.add(card);
} else {
//玩家1 %3 ==0
if(i%3==0){
player1.add(card);
}else if(i%3==1){//玩家2
player2.add(card);
}else{//玩家3
player3.add(card);
}
}
}
//看看
System.out.println("令狐冲:"+player1);
System.out.println("田伯光:"+player2);
System.out.println("绿竹翁:"+player3);
System.out.println("底牌:"+dipai);
}
}
0x02.Map
以上是关于Java之List的主要内容,如果未能解决你的问题,请参考以下文章