java 集合工具_Java 常用工具-集合

1.集合简介

什么是集合?

简称集,是用来存储多个元素的容器

集合和数组的区别

1.元素类型

集合:引用类型(存储基本类型是自动装箱)

数组:基本类型,引用类型

2.元素个数

集合:不固定,可以任意扩容

数组:固定,不能改变容量

集合的好处

不受容器大小限制,可以随时添加、删除元素,提供大量操作元素的方法(判断、获取)

Java的集合体系

1.单列集合(Collection)

List:ArrayList

Set:HashSet

2.双列集合(Map:key,value)

Map:HashMap

2.List集合的特点和应用

List集合的特点

可重复、有序(存取顺序相同)

应用:

List list = new ArrayList();

案例:List集合的简单使用

需求:向List集合中添加三个元素,并遍历打印

分析:

A:向集合中添加元素的方法:add()

B:遍历集合的反思:for循环

C:获取集合中的元素个数的方法:size()

步骤:

1.创建集合对象:

List list = new ArrayList();

2.分别创建三个Student对象

3.使用add方法将Student对象添加到集合中

4.使用for循环遍历集合并打印

//定义一个学生类

public classStudent {//成员变量//姓名

privateString name;//年龄

private intage;//构造方法//无参构造

publicStudent() {

}//全参构造

public Student(String name, intage) {this.name =name;this.age =age;

}//成员方法

publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@OverridepublicString toString() {return "Student{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

//测试类

importjava.util.ArrayList;importjava.util.List;/***案例:List集合的简单使用

* 需求:向List集合中添加三个元素,并遍历打印

*

* 分析:

* A:向集合中添加元素的方法:add()

* B:遍历集合的反思:for循环

* C:获取集合中的元素个数的方法:size()

*

* 步骤:

* 1.创建集合对象:

* List list = new ArrayList();

* 2.分别创建三个Student对象

* 3.使用add方法将Student对象添加到集合中

* 4.使用for循环遍历集合并打印

*

* 使用集合的步骤:

* 1.创建集合对象

* 2.创建元素对象

* 3.将元素对象添加到集合中

* 4.遍历集合

**/

public classTest {public static voidmain(String[] args) {//1.创建集合对象

List list = newArrayList();//2.创建三个元素对象

Student s1 = new Student("张三",12);

Student s2= new Student("李四",15);

Student s3= new Student("王二",13);//3.将元素添加到集合中

list.add(s1);

list.add(s2);

list.add(s3);//打印list

System.out.println(list);

System.out.println("-----------");//获取索引为2的元素

Object obj = list.get(2);

System.out.println(obj);

System.out.println("----------");//获取集合元素的个数

int size =list.size();

System.out.println("集合的长度:"+size);

System.out.println("----------");//遍历集合

for (int i = 0; i

Object obj2 =list.get(i);

System.out.println("索引为"+i+"的元素:"+obj2);

}

}

}

运行结果

7d1ac3d0873eb54c81b009237f12bbcc.png

3.增强for循环和迭代器

为什么需要增强for循环

简化数组和集合的遍历

增强for循环的格式

for(数据类型 变量名:数组或者集合对象){

//循环体,变量即元素

}

例子:

importjava.util.ArrayList;importjava.util.List;//测试类//案例:演示增强for循环//快捷方式:iter+回车 生成增强for的格式

/*** 注意:

* 增强for的底层依赖的是迭代器(Iterator)

* 增强for就是迭代器的简写*/

public classTest {public static voidmain(String[] args) {//需求:通过增强for遍历集合List//1.创建集合对象

List list = newArrayList();//2.创建元素对象//3.将元素对象添加到集合中

list.add(10);

list.add(20);

list.add(30);

list.add(40);//4.遍历元素对象

for(Object obj : list){//obj是集合中的元素,其本身是Integer类型的数据

Integer i1 =(Integer) obj;

System.out.println(i1);

}for(Object o : list) {

System.out.println(o);

}

}

}

运行结果:

53895f702439a9d7132ff4586e10cb96.png

为什么需要迭代器?

对过程的重复,成为迭代

列表迭代器是遍历Collection集合的通用方式,可以在对集合遍历的同时进行添加、删除等操作

迭代器的常用方法

·next():返回迭代的下一个元素对象

·hasNext如果仍有元素可以迭代,则返回true

例子:

importjava.util.ArrayList;importjava.util.List;importjava.util.ListIterator;//测试类//测试列表迭代器

public classTest2 {public static voidmain(String[] args) {//需求:判断如果集合有字符串b,就在它后面添加新的字符串:java//1.创建集合对象

List list = newArrayList();//2.创建元素对象//3.向集合添加元素

list.add("a");

list.add("b");

list.add("c");

list.add("d");//根据集合对象获取其对象的迭代器对象

ListIterator it =list.listIterator();//2.判断迭代器中是否有元素

while (it.hasNext()){//如果it中有元素就一种迭代//3.如果有就获取元素

String s =(String)it.next();if("b".equals(s)){//这样写可以避免空指针异常//list.add("java");//必须用列表迭代器

it.add("java");

}

System.out.println(s);

}

}

}

运行结果:

61c65b4532f4474507fa1daae101fbaa.png

4.泛型简介

什么是泛型?

即泛指任意类型,又叫参数化类型

对具体类型的使用起到辅助作用,类似于方法的参数

集合类泛型的解释

表示该集合中存放指定类型的元素

泛型的好处

类型安全

避免了类型转换

5.Collections工具类

简介

针对于集合进行操作的工具类

成员方法

·sort(List)

根据元素的自然顺序,将指定列表按升序排列

·max(Collection)

返回集合的最大元素

·reverse(List)

f反转List集合元素

·shuffle(List)

使用默认的随机源随机置换指定的列表

例子:

//测试类

importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;/***成员方法

* ·sort(List)

* 根据元素的自然顺序,将指定列表按升序排列

* ·max(Collection)

* 返回集合的最大元素

* ·reverse(List)

* f反转List集合元素

* ·shuffle(List)

* 使用默认的随机源随机置换指定的列表

**/

public classTest {public static voidmain(String[] args) {//1.创建集合

List list = new ArrayList<>();//2.向集合添加数据

list.add(1);

list.add(3);

list.add(3);

list.add(5);

list.add(5);

list.add(4);//3.打印集合

System.out.println("没有操作之前list中的数据:"+list);

System.out.println("--------------------");//获取集合中最大元素

Integer max =Collections.max(list);

System.out.println("集合中最大的元素:"+max);

System.out.println("--------------------");//对集合进行升序排列

Collections.sort(list);

System.out.println("升序后的结果为:"+list);

System.out.println("--------------------");//对集合进行反转

Collections.reverse(list);

System.out.println("集合进行反转的结果:"+list);//随机置换,相当于洗牌

Collections.shuffle(list);

System.out.println("随机洗牌后的结果:"+list);

}

}

运行结果:

dcc52c68560158361f27a0fc1af90e4b.png

6.Set集合的特点

特点:

不可重复,无序

应用:

Setset = new HashSet<>();

案例:Set集合的简单使用

需求:向Set集合中添加5个元素,并遍历打印

分析:

A.向集合中添加元素的方法:add()

B.遍历集合的方式:迭代器

步骤:

1.创建集合对象

Set set = new HashSet<>();

2.分别创建5个Student对象

3.使用add方法将Student对象添加到集合中

4.使用迭代器遍历集合并打印,注意添加顺序和打印顺序是否相同

importjava.util.Objects;//定义学生类

public classStudent {//成员变量

privateString name;private intage;//构造方法

public Student(String name, intage) {this.name =name;this.age =age;

}publicStudent() {

}//成员方法

publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@OverridepublicString toString() {return "Student{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

@Overridepublic booleanequals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;

Student student=(Student) o;return age == student.age &&Objects.equals(name, student.name);

}

@Overridepublic inthashCode() {returnObjects.hash(name, age);

}

}

//测试类

importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;/***案例:Set集合的简单使用

* 需求:向Set集合中添加5个元素,并遍历打印

* 分析:

* A.向集合中添加元素的方法:add()

* B.遍历集合的方式:迭代器

*

* 步骤:

* 1.创建集合对象

* Set set = new HashSet<>();

* 2.分别创建5个Student对象

* 3.使用add方法将Student对象添加到集合中

* 4.使用迭代器遍历集合并打印,注意添加顺序和打印顺序是否相同

**/

public classTest {public static voidmain(String[] args) {//1.创建泛型集合

Set set = new HashSet<>();//2.创建5个Student对象

Student s1 = new Student("张三",12);

Student s2= new Student("李四",15);

Student s3= new Student("王二",13);

Student s4= new Student("张三",12);

Student s5= new Student("李四",15);//3.使用add方法将Student对象添加到集合中

set.add(s1);

set.add(s2);

set.add(s3);

set.add(s4);

set.add(s5);//5.遍历并打印//1.打印

System.out.println(set);

System.out.println("----------");//2.通过迭代器遍历打印

Iterator it =set.iterator();while(it.hasNext()){

Student student=it.next();

System.out.println(student);

}

System.out.println("----------");//3.通过增强for遍历打印

for(Student student : set) {

System.out.println(student);

}

}

}

运行结果:

f7bfcf652df6e3326a638566e3a8a90f.png

7.Map集合的特点

特点:

双列集合,元素键对(Entry)构成

Key --Value

key不可重复,value可以重复

应用:

Mapmap  = new HashMap<>();

案例:Map集合的简单使用

需求:向Map集合中添加三个元素,并遍历打印

分析:

A.向map集合中添加元素的方法为:put()

B:遍历集合的方式:

获取所有的Key:keySet()

遍历keySet,通过key获取value:get()

C.遍历keySet的方法:iterator()

步骤:

1.创建集合对象

Map map = new HashMap<>();

2.创建三个Student对象

3.使用put方法将Studdent对象添加到集合中

4.获取所有keym并使用迭代器遍历

importjava.util.Objects;//学生类

public classStudent {//成员变量

privateString name;private intage;//构造方法

publicStudent() {

}public Student(String name, intage) {this.name =name;this.age =age;

}//成员方法

publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@OverridepublicString toString() {return "Student{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

@Overridepublic booleanequals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;

Student student=(Student) o;return age == student.age &&Objects.equals(name, student.name);

}

@Overridepublic inthashCode() {returnObjects.hash(name, age);

}

}

//测试类

importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;importjava.util.Set;/***案例:Map集合的简单使用

* 需求:向Map集合中添加三个元素,并遍历打印

* 分析:

* A.向map集合中添加元素的方法为:put()

* B:遍历集合的方式:

* 获取所有的Key:keySet()

* 遍历keySet,通过key获取value:get()

* C.遍历keySet的方法:iterator()

* 步骤:

* 1.创建集合对象

* Map map = new HashMap<>();

*

* 2.创建三个Student对象

* 3.使用put方法将Studdent对象添加到集合中

* 4.获取所有keym并使用迭代器遍历

*

*

**/

public classTest {public static voidmain(String[] args) {//1.创建集合对象

Map map = new HashMap<>();//2.创建三个Student对象

Student s1 = new Student("张三",12);

Student s2= new Student("李四",12);

Student s3= new Student("王二",12);//3.使用put方法将Studdent对象添加到集合中

map.put(1,s1);

map.put(2,s2);

map.put(3,s3);//根据key获取value

Student stu = map.get(3);

System.out.println(stu);

System.out.println("--------------");//4.获取所有keym并使用迭代器遍历

System.out.println(map);//4.1 获取所有key的集合

Set set =map.keySet();//4.2 遍历所有key,获取每一个键//获取迭代器

Iterator it =set.iterator();while(it.hasNext()){//4.3 根据key获取value

Integer i =it.next();

Student s=map.get(i);

System.out.println("key:"+i +"value:"+s);

}

System.out.println("--------------");//通过增强for实现

for(Integer i : set) {

Student s=map.get(i);

System.out.println("key:"+i +"value:"+s);

}

}

}

运行结果:

93dcd39ec77075e6e940015aed63104c.png

8.案例:模拟斗地主发牌功能

需求:使用一个集合对象存储一副扑克牌,将所有扑克的顺序打乱,然后分发给使用集合便是的三个玩家和底牌,并答应玩家和地盘的集合内容

步骤:

1.买一副扑克牌

将花色和数字分别进行组合,生成所有的普通牌,生成的普通手动添加大、小王

2.洗牌

使用Collections工具类的shuffle()方法打乱牌的顺序

3.发牌

遍历牌堆,将每一张牌分发到三个玩家中

留三张底牌

4.看牌

分别打印每个玩家集合的内容

//测试类

import java.util.*;/***

*8.案例:模拟斗地主发牌功能

*

* 需求:使用一个集合对象存储一副扑克牌,将所有扑克的顺序打乱,然后分发给使用集合便是的三个玩家和底牌,并答应玩家和地盘的集合内容

*

* 步骤:

* 1.买一副扑克牌

* 将花色和数字分别进行组合,生成所有的普通牌,生成的普通手动添加大、小王

* 2.洗牌

* 使用Collections工具类的shuffle()方法打乱牌的顺序

* 3.发牌

* 遍历牌堆,将每一张牌分发到三个玩家中

* 留三张底牌

* 4.看牌

* 分别打印每个玩家集合的内容

**/

public classTest {public static voidmain(String[] args) {//1.将花色和数字分别进行组合,生成所有的普通牌,生成的普通手动添加大、小王//1.1创建一个Map集合用来存储牌的编号和花色数字

Map pukers = new HashMap<>();//1.2创建一个List集合来存储牌的编号

List list = new ArrayList<>();//1.3生成普通牌//创建数字数组

String[] nums = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//创建花色数组

String[] colors = {"♦","♣","♠","♥"};//循环生成普通牌

int n = 0;for(String num : nums) {for(String color : colors) {

String puker= color +num;//System.out.println(puker);

pukers.put(n,puker);

list.add(n++);

}

}//1.4生成大王,小王//生成小王

pukers.put(n,"小王");

list.add(n++);//生成大王

pukers.put(n,"大王");

list.add(n);

System.out.println("牌的编号:"+list);

System.out.println("完整一副牌:"+pukers);

System.out.println("-----------------------------");//2.使用Collections工具类的shuffle()方法打乱牌的顺序

Collections.shuffle(list);

System.out.println("乱序的编号:"+list);

System.out.println("-----------------------------");//3.遍历牌堆,将每一张牌分发到三个玩家中,留三张底牌//3.1创建三个玩家和底牌的集合

List wan1 = new ArrayList<>();

List wan2 = new ArrayList<>();

List wan3 = new ArrayList<>();

List dipai = new ArrayList<>();//3.2遍历牌堆

for (int i = 0; i

Integer pukerNum=list.get(i);if(i>=list.size()-3){//判断是否是最后三张牌

dipai.add(pukerNum);

}else if(i%3 == 0){//发给玩家1

wan1.add(pukerNum);

}else if(i%3 == 1){//发给玩家2

wan2.add(pukerNum);

}else if(i%3 == 2){//发给玩家3

wan3.add(pukerNum);

}

}//4.分别打印每个玩家和底牌集合的内容

/*(System.out.println("wan1:"+wan1);

System.out.println("wan2:"+wan2);

System.out.println("wan3:"+wan3);

System.out.println("dipai"+dipai);*/System.out.println("玩家1:"+printPuker(wan1,pukers));

System.out.println("玩家2:"+printPuker(wan2,pukers));

System.out.println("玩家3:"+printPuker(wan3,pukers));

System.out.println("底牌:"+printPuker(dipai,pukers));

}//创建方法用来顺序查看玩家和底牌的牌

public static String printPuker(List list , Mappukers){

String str= "";//给list集合排序

Collections.sort(list);//增强for的方式循环输出玩家的牌

for(Integer integer : list) {

str= str + pukers.get(integer)+"\t";

}returnstr;

}

}

运行结果:

966ba0ac2f5323dd70162fa6bf0540c9.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值