1.map双列集合,每一个集合分为值和键两个部分组成,是一个键值对的关系-对应关系(映射关系);map中的键是唯一且无序的
键:key;值:value;键值对:entrySet
2.常用方法
3.
4.collections是静态工具类
5.当集合里面装的是对象时,用collections.sort()排序
4.
可变参数
什么是方法签名?
* main(String[] args) - 方法签名
* 包含方法名和参数列表
- 可变参数的优点:使参数列表更加灵活
- 可变参数:参数的数量可变!
注意:
- 1.数据类型…代表可变参数,即可以传入任意个该类型的数据
- 2.可变参数不能放在前面,只能放在后面
- 3.可变参数的方法与数组的方法不能重载,因为可变参数就是一个数组
import java.util.ArrayList;import java.util.Collection;import java.util.Collections;/*** 讲解方法的可变参数**/public class ArgsDemo {public static void main(String[] args) {//利用父类的接口创建对象Collection<String> c = new ArrayList<>();//添加数据 - 调用方法Collections.addAll(c,"黄药师","段誉","虚竹");//jvm会自动将多个参数封装成一个数组System.out.println(c);System.out.println("--------------------------------");//自定义一个方法 - 可以灵活的处理参数列表int sum = add(10, 20, 50, 88);System.out.println("sum="+sum);System.out.println("--------------------------------");int[] arr = {10,20,50,88};int sum2 = add(arr);System.out.println("sum2="+sum2);}//封装一个灵活参数的方法public static int add(int...a){//声明变量,记录所有数字的和int sum = 0;//变量数组 - 参数列表数组for (int i = 0; i < a.length; i++) {int j = a[i];System.out.println("j="+j);//没遇到一个数字就累加sum += j;}return sum;}/*** 可变参数其实就是一个数组* 这里int[]其实就和int...是一样的,所以jvm判断为两个方法一样,并不是重载* public static int add(int[] arr){* return 0;* }*/}
数组与集合的相互转换
Arrays工具类
Arrays是一个工具类 - 专门服务于数组的 - 是一个静态类
toString()其实就是在Arrays中重写了Object中的方法
**
数组转成集合
Java数组的特点:
1.一旦声明不能修改长度
2.存放的元素只能是当前声明的数据类型
java集合的特点:
1.长度任意改变
2.存放的元素可以是任意类型 - 包装类
数组转成集合的方法:
public static *
*注意:数组转换成集合后,该集合就不支持添加或删除操作,否则会抛出异常
集合转成数组:
public
import java.util.ArrayList;import java.util.Arrays;/*** 集合转换为数组:* public <T> T[] toArray(T[] a);* public Object[] toArray(); - 集合转换为数组*** 总结:* 1.当数组转为集合的时候要注意:不能进行添加和删除的操作 - 遵循数组的结构规则* 2.当集合转为数组的时候要注意:数据类型的强制转型或者泛型的使用* 3.数组转为集合 - 从小到大* 集合转为数组 - 从大到小*/public class ArrayListToArrayDemo {public static void main(String[] args) {//声明一个集合ArrayList<Integer> list = new ArrayList<>();list.add(10);list.add(1);list.add(5);list.add(7);list.add(3);//调用方法 - 将集合转换为Object类型的数组Object[] objArr = list.toArray();System.out.println(Arrays.toString(objArr));//向下转型Integer i = (Integer) objArr[0];System.out.println(i.intValue());System.out.println("-------------------------");//调用方法,将集合转换为带类型的数组Integer[] intArr = new Integer[6];Integer[] returnArr = list.toArray(intArr);System.out.println(Arrays.toString(intArr));//[10, 1, 5, 7, 3, null]System.out.println(Arrays.toString(returnArr));//[10, 1, 5, 7, 3, null]/*如果给定的数组的长度不足以存放下集合中的元素,这个时候系统会再次自动创建一个能够存放集合中元素的数组,原来声明好的数组就不用了*/Integer[] intArr = new Integer[3];Integer[] returnArr = list.toArray(intArr);System.out.println(Arrays.toString(intArr));//[null,null,null]//帶泛型的Integer integer = returnArr[3];System.out.println(integer.intValue());//7}}
总结:
1.当数组转为集合的时候要注意:不能进行添加和删除的操作 - 遵循数组的结构规则 2.当集合转为数组的时候要注意:数据类型的强制转型或者泛型的使用 3.数组转为集合 - 从小到大 集合转为数组 - __从大到小
import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.Map;import com.igeek_07.ArrayAsListDemo;/*** 重构案例:** ♣♦♠♥ 大☺小☺* 具体规则:* 使用54张牌打乱顺序* 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。** 逻辑分析:** 每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。* 使用一个Map集合,<<将小的数字与小的牌对应起来>>,做成Map集合的键与值* 即:* 键:数字* 值:花色+数字的字符串(牌)** 准备牌:* 牌可以设计为一个ArrayList<Integer>,每个数字为一张牌。* 牌由Collections类的shuffle方法进行随机排序。* 发牌:* 将每个人以及底牌设计为ArrayList<Integer>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。* 看牌:* 将所有集合排序Collections类的sort方法进行排序* 将每个集合的数字依次找到对应的纸牌字符串打印出来*/public class CardDemo {public static void main(String[] args) {//确定牌和数字的对应关系Map<Integer, String> map = new HashMap<>();//花色集合ArrayList<String> colors = new ArrayList<>();colors.add("♣");colors.add("♦");colors.add("♠");colors.add("♥");//数字集合ArrayList<String> numbers = new ArrayList<>();for(int i=3; i<=10; i++){numbers.add(i + "");}//添加其他的牌Collections.addAll(numbers, "J","Q","K","A","2");//设置对应关系int cardNumber = 0;//遍历数字集合,使用每一种颜色匹配每一个花色for(String thisNumber : numbers){//使用数字匹配花色for(String thisColor : colors){String thisCard = thisColor + thisNumber;//放入mapmap.put(cardNumber, thisCard);//对应成功一个就累计cardNumber++;}}//添加大小王map.put(cardNumber++, "大☺");map.put(cardNumber++, "小☺");//测试//System.out.println(map);//准备牌ArrayList<Integer> poker = new ArrayList<>();for(int i=0;i<54;i++){poker.add(i);}//System.out.println(poker);//制造下标,目的是为了打乱顺序Collections.shuffle(poker);//发牌ArrayList<Integer> player01 = new ArrayList<>();ArrayList<Integer> player02 = new ArrayList<>();ArrayList<Integer> player03 = new ArrayList<>();ArrayList<Integer> dipai = new ArrayList<>();for(int index=0;index<poker.size()-3;index++){//通过索引,获取代表牌的数字Integer integerCard = poker.get(index);//对3取余if(index%3==0){player01.add(integerCard);}else if(index%3==1){player02.add(integerCard);}else{player03.add(integerCard);}}//最后的三张底牌for(int index=poker.size()-3;index<poker.size();index++){Integer integerCard= poker.get(index);dipai.add(integerCard);}//看牌 - 排序Collections.sort(player01);Collections.sort(player02);Collections.sort(player03);Collections.sort(dipai);//从小到大进行排序for(int i=player01.size()-1; i>0; i--){Integer integer = player01.get(i);String realCard = map.get(integer);System.out.print(realCard + " ");}//换行System.out.println();for(int i=player02.size()-1; i>0; i--){Integer integer = player02.get(i);String realCard = map.get(integer);System.out.print(realCard + " ");}//换行System.out.println();for(int i=player03.size()-1; i>0; i--){Integer integer = player03.get(i);String realCard = map.get(integer);System.out.print(realCard + " ");}//换行System.out.println();//增强forfor(Integer integer : dipai){String realCard = map.get(integer);System.out.print(realCard + " ");}}
