image.png
    image.png

    • 向Collection接口的实现类的对象中添加数据obj时,要求obj所在类要重写equals().
      Collection没有提供直接的实现类,而是提供了List、Set实现类

    1.结合Collection中存储的如果是自定义类的对象,需要自定义类重写哪个方法?为什么?
    equals()方法
    List:equals()方法
    Set:(HashSet、LinkedHashSet为例) : equals()、hashCode()
    (TreeSet为例) : Comparable:comparaeTo(Object obj)
    Comparator:compare(Object o1,Object o2)f

    1. package com.atguigu.java1;
    2. import org.junit.Test;
    3. import java.util.*;
    4. /**
    5. * Collection接口中声明的方法的测试
    6. *
    7. * 向Collection接口的实现类的对象中添加数据obj时,要求obj所在类要重写equals().
    8. *
    9. * @author Dxkstart
    10. * @create 2021-05-19 14:05
    11. */
    12. public class CollectionTest1 {
    13. @Test
    14. public void test(){
    15. Collection coll = new ArrayList();
    16. //1.add(Object e):将元素e添加到集合coll中
    17. coll.add("AA");
    18. coll.add("BB");
    19. coll.add(123);
    20. coll.add(new Date());
    21. //2.size():
    22. System.out.println(coll.size());
    23. System.out.println(coll);
    24. //3.addAll(Collection coll1):将coll集合中的元素添加到当前的集合中
    25. Collection coll1 = new ArrayList();
    26. coll1.add("WW");
    27. coll.addAll(coll1);
    28. System.out.println(coll.toString());
    29. //4.clear():清空集合中的元素
    30. coll.clear();
    31. //5.isEmpty():判断集合是否为空
    32. System.out.println(coll.isEmpty());
    33. }
    34. @Test
    35. public void test1(){
    36. Collection coll = new ArrayList();
    37. coll.add("AA");
    38. coll.add(123);
    39. coll.add(new String("Tom"));
    40. coll.add(new Person("Jerry",20));
    41. coll.add(false);
    42. //6.contains(Object obj):判断当前集合中是否包含obj
    43. //我们在判断时会调用obj对象所在类的equals()。
    44. boolean contains = coll.contains("AA");
    45. System.out.println(contains);
    46. System.out.println(coll.contains(new String("Tom")));//true,用equals比较的
    47. System.out.println(coll.contains(new Person("Jerry",20)));//false
    48. //没有重写equals()
    49. //7.containsAll(Collection coll1):判断形参coll1中的所有元素是否都存在于当前集合中。
    50. Collection coll1 = Arrays.asList(123,456);
    51. System.out.println(coll.containsAll(coll1));
    52. }
    53. @Test
    54. public void test2(){
    55. //8.remove(Object obj):从当前集合中移除obj元素
    56. Collection coll = new ArrayList();
    57. coll.add("AA");
    58. coll.add(123);
    59. coll.add(new String("Tom"));
    60. coll.add(new Person("Jerry",20));
    61. coll.add(false);
    62. System.out.println(coll.size());
    63. System.out.println(coll.remove(123));
    64. System.out.println(coll.size());
    65. coll.remove(new Person("Jerry",20));
    66. System.out.println(coll.size());
    67. //9.removeAll(Collection coll1):差集:从当前集合中移除coll1中所有的元素
    68. Collection coll1 = new ArrayList();
    69. coll1.add(false);
    70. coll.removeAll(coll1);
    71. System.out.println(coll.size());
    72. }
    73. @Test
    74. public void test3(){
    75. Collection coll = new ArrayList();
    76. coll.add("AA");
    77. coll.add(123);
    78. coll.add(new String("Tom"));
    79. coll.add(new Person("Jerry",20));
    80. coll.add(false);
    81. //10.retainAll(Collection coll1):交集:获取当前集合和coll1集合的交集,并返回给当前集合
    82. Collection coll1 = Arrays.asList(123,456,789);
    83. coll.retainAll(coll1);
    84. System.out.println(coll);
    85. //11.equals(Object obj):要想返回true,需要当前集合和形参集合的元素都相同。
    86. System.out.println(coll.equals(coll1));
    87. }
    88. @Test
    89. public void test4(){
    90. Collection coll = new ArrayList();
    91. coll.add("AA");
    92. coll.add(123);
    93. coll.add(new String("Tom"));
    94. coll.add(new Person("Jerry",20));
    95. coll.add(false);
    96. //12.hashCode():返回当前对象的哈希值
    97. System.out.println(coll.hashCode());
    98. //13.toArray():集合 ----> 数组
    99. Object[] arr = coll.toArray();
    100. for(int i = 0;i<arr.length;i++){
    101. System.out.println(arr[i]);
    102. }
    103. //拓展:asList():数组 ---->集合:调用Arrays类的静态方法asList()
    104. List<Object> list = Arrays.asList(arr);
    105. System.out.println(list);
    106. List arr1 = Arrays.asList(new int[]{123, 456});
    107. System.out.println(arr1);//这样会识别成一个数,不对
    108. List arr2 = Arrays.asList(123, 456);
    109. System.out.println(arr2);
    110. //14.iterator():返回Iterator接口的实例,用于遍历集合元素。放在IteratorTest.java中测试
    111. }
    112. }
    1. package com.atguigu.java1;
    2. /**
    3. * @author Dxkstart
    4. * @create 2021-05-19 14:15
    5. */
    6. public class Person {
    7. private String name;
    8. private int age;
    9. public Person() {
    10. }
    11. public Person(String name, int age) {
    12. this.name = name;
    13. this.age = age;
    14. }
    15. public String getName() {
    16. return name;
    17. }
    18. public void setName(String name) {
    19. this.name = name;
    20. }
    21. public int getAge() {
    22. return age;
    23. }
    24. public void setAge(int age) {
    25. this.age = age;
    26. }
    27. @Override
    28. public String toString() {
    29. return "Person{" +
    30. "name='" + name + '\'' +
    31. ", age=" + age +
    32. '}';
    33. }
    34. @Override
    35. public boolean equals(Object o) {
    36. System.out.println("Person equals()....");
    37. if (this == o) return true;
    38. if (o == null || getClass() != o.getClass()) return false;
    39. Person person = (Person) o;
    40. if (age != person.age) return false;
    41. return name != null ? name.equals(person.name) : person.name == null;
    42. }
    43. // @Override
    44. // public int hashCode() {
    45. // int result = name != null ? name.hashCode() : 0;
    46. // result = 31 * result + age;
    47. // return result;
    48. // }
    49. }