1.map双列集合,每一个集合分为值和键两个部分组成,是一个键值对的关系-对应关系(映射关系);map中的键是唯一且无序的
键:key;值:value;键值对:entrySet
2.常用方法
image.png
3.
image.png
4.collections是静态工具类
image.png
5.当集合里面装的是对象时,用collections.sort()排序
image.png
4.

可变参数

什么是方法签名?
* main(String[] args) - 方法签名
* 包含方法名和参数列表

  • 可变参数的优点:使参数列表更加灵活
  • 可变参数:参数的数量可变!

注意:

  • 1.数据类型…代表可变参数,即可以传入任意个该类型的数据
  • 2.可变参数不能放在前面,只能放在后面
  • 3.可变参数的方法与数组的方法不能重载,因为可变参数就是一个数组
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Collections;
  4. /**
  5. * 讲解方法的可变参数
  6. *
  7. */
  8. public class ArgsDemo {
  9. public static void main(String[] args) {
  10. //利用父类的接口创建对象
  11. Collection<String> c = new ArrayList<>();
  12. //添加数据 - 调用方法
  13. Collections.addAll(c,"黄药师","段誉","虚竹");//jvm会自动将多个参数封装成一个数组
  14. System.out.println(c);
  15. System.out.println("--------------------------------");
  16. //自定义一个方法 - 可以灵活的处理参数列表
  17. int sum = add(10, 20, 50, 88);
  18. System.out.println("sum="+sum);
  19. System.out.println("--------------------------------");
  20. int[] arr = {10,20,50,88};
  21. int sum2 = add(arr);
  22. System.out.println("sum2="+sum2);
  23. }
  24. //封装一个灵活参数的方法
  25. public static int add(int...a){
  26. //声明变量,记录所有数字的和
  27. int sum = 0;
  28. //变量数组 - 参数列表数组
  29. for (int i = 0; i < a.length; i++) {
  30. int j = a[i];
  31. System.out.println("j="+j);
  32. //没遇到一个数字就累加
  33. sum += j;
  34. }
  35. return sum;
  36. }
  37. /**
  38. * 可变参数其实就是一个数组
  39. * 这里int[]其实就和int...是一样的,所以jvm判断为两个方法一样,并不是重载
  40. * public static int add(int[] arr){
  41. * return 0;
  42. * }
  43. */
  44. }

数组与集合的相互转换

Arrays工具类

Arrays是一个工具类 - 专门服务于数组的 - 是一个静态类
toString()其实就是在Arrays中重写了Object中的方法
**

数组转成集合

Java数组的特点:
1.一旦声明不能修改长度
2.存放的元素只能是当前声明的数据类型

java集合的特点:
1.长度任意改变
2.存放的元素可以是任意类型 - 包装类

数组转成集合的方法:
public static * List asList(T…a):将数组转换成集合
*
注意:数组转换成集合后,该集合就不支持添加或删除操作,否则会抛出异常

集合转成数组:

public T[] toArray(T[] a);__ public Object[] toArray(); - __集合转换为数组

  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. /**
  4. * 集合转换为数组:
  5. * public <T> T[] toArray(T[] a);
  6. * public Object[] toArray(); - 集合转换为数组
  7. *
  8. *
  9. * 总结:
  10. * 1.当数组转为集合的时候要注意:不能进行添加和删除的操作 - 遵循数组的结构规则
  11. * 2.当集合转为数组的时候要注意:数据类型的强制转型或者泛型的使用
  12. * 3.数组转为集合 - 从小到大
  13. * 集合转为数组 - 从大到小
  14. */
  15. public class ArrayListToArrayDemo {
  16. public static void main(String[] args) {
  17. //声明一个集合
  18. ArrayList<Integer> list = new ArrayList<>();
  19. list.add(10);
  20. list.add(1);
  21. list.add(5);
  22. list.add(7);
  23. list.add(3);
  24. //调用方法 - 将集合转换为Object类型的数组
  25. Object[] objArr = list.toArray();
  26. System.out.println(Arrays.toString(objArr));
  27. //向下转型
  28. Integer i = (Integer) objArr[0];
  29. System.out.println(i.intValue());
  30. System.out.println("-------------------------");
  31. //调用方法,将集合转换为带类型的数组
  32. Integer[] intArr = new Integer[6];
  33. Integer[] returnArr = list.toArray(intArr);
  34. System.out.println(Arrays.toString(intArr));//[10, 1, 5, 7, 3, null]
  35. System.out.println(Arrays.toString(returnArr));//[10, 1, 5, 7, 3, null]
  36. /*如果给定的数组的长度不足以存放下集合中的元素,这个时候系统会再次自动创建
  37. 一个能够存放集合中元素的数组,原来声明好的数组就不用了*/
  38. Integer[] intArr = new Integer[3];
  39. Integer[] returnArr = list.toArray(intArr);
  40. System.out.println(Arrays.toString(intArr));//[null,null,null]
  41. //帶泛型的
  42. Integer integer = returnArr[3];
  43. System.out.println(integer.intValue());//7
  44. }
  45. }

_

总结:

1.当数组转为集合的时候要注意:不能进行添加和删除的操作 - 遵循数组的结构规则 2.当集合转为数组的时候要注意:数据类型的强制转型或者泛型的使用 3.数组转为集合 - 从小到大 集合转为数组 - __从大到小

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import com.igeek_07.ArrayAsListDemo;
  6. /**
  7. * 重构案例:
  8. *
  9. * ♣♦♠♥ 大☺小☺
  10. * 具体规则:
  11. * 使用54张牌打乱顺序
  12. * 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
  13. *
  14. * 逻辑分析:
  15. *
  16. * 每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。
  17. * 使用一个Map集合,<<将小的数字与小的牌对应起来>>,做成Map集合的键与值
  18. * 即:
  19. * 键:数字
  20. * 值:花色+数字的字符串(牌)
  21. *
  22. * 准备牌:
  23. * 牌可以设计为一个ArrayList<Integer>,每个数字为一张牌。
  24. * 牌由Collections类的shuffle方法进行随机排序。
  25. * 发牌:
  26. * 将每个人以及底牌设计为ArrayList<Integer>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
  27. * 看牌:
  28. * 将所有集合排序Collections类的sort方法进行排序
  29. * 将每个集合的数字依次找到对应的纸牌字符串打印出来
  30. */
  31. public class CardDemo {
  32. public static void main(String[] args) {
  33. //确定牌和数字的对应关系
  34. Map<Integer, String> map = new HashMap<>();
  35. //花色集合
  36. ArrayList<String> colors = new ArrayList<>();
  37. colors.add("♣");
  38. colors.add("♦");
  39. colors.add("♠");
  40. colors.add("♥");
  41. //数字集合
  42. ArrayList<String> numbers = new ArrayList<>();
  43. for(int i=3; i<=10; i++){
  44. numbers.add(i + "");
  45. }
  46. //添加其他的牌
  47. Collections.addAll(numbers, "J","Q","K","A","2");
  48. //设置对应关系
  49. int cardNumber = 0;
  50. //遍历数字集合,使用每一种颜色匹配每一个花色
  51. for(String thisNumber : numbers){
  52. //使用数字匹配花色
  53. for(String thisColor : colors){
  54. String thisCard = thisColor + thisNumber;
  55. //放入map
  56. map.put(cardNumber, thisCard);
  57. //对应成功一个就累计
  58. cardNumber++;
  59. }
  60. }
  61. //添加大小王
  62. map.put(cardNumber++, "大☺");
  63. map.put(cardNumber++, "小☺");
  64. //测试
  65. //System.out.println(map);
  66. //准备牌
  67. ArrayList<Integer> poker = new ArrayList<>();
  68. for(int i=0;i<54;i++){
  69. poker.add(i);
  70. }
  71. //System.out.println(poker);
  72. //制造下标,目的是为了打乱顺序
  73. Collections.shuffle(poker);
  74. //发牌
  75. ArrayList<Integer> player01 = new ArrayList<>();
  76. ArrayList<Integer> player02 = new ArrayList<>();
  77. ArrayList<Integer> player03 = new ArrayList<>();
  78. ArrayList<Integer> dipai = new ArrayList<>();
  79. for(int index=0;index<poker.size()-3;index++){
  80. //通过索引,获取代表牌的数字
  81. Integer integerCard = poker.get(index);
  82. //对3取余
  83. if(index%3==0){
  84. player01.add(integerCard);
  85. }else if(index%3==1){
  86. player02.add(integerCard);
  87. }else{
  88. player03.add(integerCard);
  89. }
  90. }
  91. //最后的三张底牌
  92. for(int index=poker.size()-3;index<poker.size();index++){
  93. Integer integerCard= poker.get(index);
  94. dipai.add(integerCard);
  95. }
  96. //看牌 - 排序
  97. Collections.sort(player01);
  98. Collections.sort(player02);
  99. Collections.sort(player03);
  100. Collections.sort(dipai);
  101. //从小到大进行排序
  102. for(int i=player01.size()-1; i>0; i--){
  103. Integer integer = player01.get(i);
  104. String realCard = map.get(integer);
  105. System.out.print(realCard + " ");
  106. }
  107. //换行
  108. System.out.println();
  109. for(int i=player02.size()-1; i>0; i--){
  110. Integer integer = player02.get(i);
  111. String realCard = map.get(integer);
  112. System.out.print(realCard + " ");
  113. }
  114. //换行
  115. System.out.println();
  116. for(int i=player03.size()-1; i>0; i--){
  117. Integer integer = player03.get(i);
  118. String realCard = map.get(integer);
  119. System.out.print(realCard + " ");
  120. }
  121. //换行
  122. System.out.println();
  123. //增强for
  124. for(Integer integer : dipai){
  125. String realCard = map.get(integer);
  126. System.out.print(realCard + " ");
  127. }
  128. }