• java 集合.Collection接口详解



    活动地址:CSDN21天学习挑战赛

    文章目录


    集合.Collection接口详解

    一、常用方法

    • boolean add(E e)
      确保此集合包含指定的元素(可选操作)
    • int size()
      返回此集合中的元素数。
    • void clear()
      从此集合中删除所有元素(可选操作)。
    • Object[ ] toArray()
      返回一个包含此集合中所有元素的数组。
    • boolean isEmpty()
      如果此集合不包含元素,则返回 true 。
    1. import java.util.ArrayList;
    2. import java.util.Collection;
    3. class Customer{
    4. String name;
    5. int age;
    6. Customer(String name,int age){
    7. this.age = age;
    8. this.name = name;
    9. }
    10. public String toString(){
    11. return "Customer[name="+name+"age="+age+"]";
    12. }
    13. }
    14. public class CollectionTest01 {
    15. /**
    16. * @param args
    17. */
    18. public static void main(String[] args) {
    19. // TODO Auto-generated method stub
    20. //1.创建集合
    21. //Collection c = new Collection(); 写法错误,接口不能new,需借助实现类
    22. Collection c = new ArrayList(); //利用多态
    23. //2.添加元素
    24. c.add(1); //自动装箱
    25. c.add(new Integer(100));
    26. Object o = new Object();
    27. c.add(o); //Collection集合只能单个存储元素
    28. Customer cust = new Customer("张三",20);
    29. c.add(cust);
    30. //3.将集合转换成Object类型数组
    31. Object[] objs = c.toArray();
    32. //遍历该数组
    33. for(int i=0;i
    34. System.out.println(objs[i]);
    35. }
    36. //4.获取元素的个数
    37. System.out.println(c.size()); //4
    38. System.out.println(c.isEmpty()); //false
    39. //5.清空元素
    40. c.clear();
    41. System.out.println(c.size()); //0
    42. System.out.println(c.isEmpty()); //true
    43. }
    44. }
    • Iterator iterator()
      返回此集合中的元素的迭代器。
      通过迭代器中方法完成集合的迭代(遍历)。

    在之前的这张图中左上角部分描述过迭代器

    在这里插入图片描述
    注意:这种方式是所有的集合通用的便利方式。

    1. import java.util.*;
    2. public class CollectionTest02 {
    3. /**
    4. * @param args
    5. */
    6. public static void main(String[] args) {
    7. // TODO Auto-generated method stub
    8. //创建集合对象
    9. Collection c = new LinkedList();
    10. //添加元素
    11. c.add(10);
    12. c.add(3.14);
    13. c.add(true);
    14. //迭代
    15. //1.获取迭代对象
    16. Iterator it = c.iterator();
    17. System.out.println(it); //java.util.AbstractList$Itr是ArrayList集合所依赖的迭代器
    18. //java.util.LinkedList$ListItr是LinkedList集合所依赖的迭代器
    19. //Itr 、ListItr是内部类
    20. //迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的"迭代器对象"
    21. //2.遍历集合调用Collection内部方法
    22. while(it.hasNext()){
    23. Object element = it.next();
    24. System.out.println(element);
    25. }
    26. /*
    27. boolean b = it.hasNext(); 判断是否有更多的元素
    28. Object element = it.next(); 将迭代器下移一位,并且取出指向的元素
    29. 原则:it.next()之前必须先调用it.hasNext()方法,防止出现空指针异常
    30. */
    31. /*for(Iterator it1 = c.iterator();it.hasNext();){
    32. Object element1 = it.next();
    33. System.out.println(element1);
    34. }
    35. */
    36. }
    37. }
    • boolean contains(Object o)
      如果此集合包含指定的元素,则返回 true 。

    • boolean remove(Object o)
      从该集合中删除指定元素的单个实例(如果存在)(可选操作)。

    • 存储在集合中的元素应该去重写equals方法

    1. import java.util.*;
    2. public class CollectionTest03 {
    3. /**
    4. * @param args
    5. */
    6. public static void main(String[] args) {
    7. // TODO Auto-generated method stub
    8. //创建集合
    9. Collection c = new ArrayList();
    10. //创建Integer类型的对象
    11. Integer i1 = new Integer(10);
    12. //添加对象
    13. c.add(i1);
    14. //判断集合中是否包含对象i1
    15. System.out.println(c.contains(i1)); //true
    16. //再创建一个Integer对象
    17. Integer i2 = new Integer(10);
    18. //删除
    19. c.remove(i2);
    20. System.out.println(c.size()); //0
    21. //判断集合中是否包含对象i2
    22. System.out.println(c.contains(i2)); //true
    23. //这就涉及到之前学的整型常量池,所以i1就是i2
    24. //并且contains方法底层调用的是equals方法
    25. //创建Manager对象
    26. Manager m1 = new Manager(100,"张三");
    27. //添加对象
    28. c.add(m1);
    29. //判断集合中是否存在对象m1
    30. System.out.println(c.contains(m1)); //true
    31. //再添加一个Manager对象
    32. Manager m2 = new Manager(100,"张三");
    33. //判断集合中是否存在对象m2
    34. System.out.println(c.contains(m2));
    35. //删除
    36. c.remove(m2);
    37. System.out.println(c.size()); //0
    38. //重写equals方法之前
    39. //System.out.println(c.contains(m2)); false
    40. //重写equals方法之后
    41. //System.out.println(c.contains(m2)); true
    42. }
    43. }
    44. class Manager{
    45. int no;
    46. String name;
    47. Manager(int no,String name){
    48. this.no = no;
    49. this.name = name;
    50. }
    51. //重写equals方法
    52. public boolean equals(Object o){
    53. if(this==o) return true;
    54. if(o instanceof Manager){
    55. Manager m = (Manager)o;
    56. if(m.no==this.no && m.name.equals(this.name)){
    57. return true;
    58. }
    59. }
    60. return false;
    61. }
    62. }

    返回顶部


    二、深入remove方法

    1. 1.迭代器的remove方法
    2. 2.集合本身的remove方法
    1. import java.util.*;
    2. public class CollectionTest04 {
    3. /**
    4. * @param args
    5. */
    6. public static void main(String[] args) {
    7. // TODO Auto-generated method stub
    8. //创建一个集合
    9. Collection c = new ArrayList();
    10. //添加元素
    11. c.add(1);
    12. c.add(2);
    13. c.add(3);
    14. //获取迭代器遍历
    15. Iterator it = c.iterator();
    16. while(it.hasNext()){
    17. //推荐使用迭代器自身的remove方法
    18. it.next();
    19. //删除
    20. it.remove();
    21. /*
    22. //使用集合本身的remove方法删除
    23. Object element = it.next();
    24. //删除
    25. c.remove(element);
    26. 这种方式需要在每一次删除后重新获取新的迭代器
    27. */
    28. }
    29. System.out.println(c.size()); //0
    30. }
    31. }

    返回顶部


    三、Collection与Collections的比较

    java.util.Collections; 集合工具类
    java.util.Collection; 集合接口

    1.Collections 是集合工具类,用来对集合进行操作。部分方法如下

    1. -public static boolean addAll(Collectionc,T...elements)//往集合中添加一些元素
    2. -public static void shuffle(List list) //打乱集合顺序
    3. -public static void sort(List list) //对集合进行排序,默认为升序

    注意:

    • sort使用前提:被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则
    • sort使用范围
      在这里插入图片描述
      适用于List,若为其他类型,需要将其强制类型转换

    2.Comparable接口的排序规则:

    1. // 自己(this)-参数:升序
    2. public static <T>void sort(List<T> list, Comparatorsuper T>):
    3. //将集合中元素按照指定规则排序

    3.Comparator和Comparable的区别

    1. Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
    2. Comparator:相当于找一个第三方的裁判,比较两个
    3. Comparator定义排序规则: o1-o2 升序,反之降序
    1. import java.util.*;
    2. public class CollectionsTest01 {
    3. /**
    4. * @param args
    5. */
    6. public static void main(String[] args) {
    7. // TODO Auto-generated method stub
    8. //使用Collections工具完成集合的排序
    9. List l = new ArrayList();
    10. //添加元素
    11. l.add(10);
    12. l.add(60);
    13. l.add(20);
    14. l.add(40);
    15. l.add(30);
    16. //遍历
    17. for(int i = 0; i < l.size(); i++){
    18. System.out.println(l.get(i));
    19. }
    20. System.out.println("=================");
    21. //完成集合的排序
    22. Collections.sort(l);
    23. //遍历
    24. for (int i = 0; i < l.size(); i++) {
    25. System.out.println(l.get(i));
    26. }
    27. System.out.println("=================");
    28. //给定一个set集合
    29. Set s = new HashSet();
    30. //添加元素
    31. s.add(15);
    32. s.add(35);
    33. s.add(55);
    34. s.add(25);
    35. s.add(45);
    36. /*
    37. Collections.sort(s);
    38. Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    39. The method sort(List) in the type Collections is not applicable for the arguments (Set)
    40. */
    41. //进行强制类型转换
    42. List lists = new ArrayList(s);
    43. Collections.sort(lists);
    44. //遍历
    45. Iterator it = lists.iterator();
    46. while(it.hasNext()){
    47. System.out.println(it.next());
    48. }
    49. System.out.println("=================");
    50. //将ArrayList集合转化成线程安全的
    51. List mylist = new ArrayList();
    52. Collections.synchronizedList(mylist);
    53. }
    54. }

    在这里插入图片描述

    返回顶部

  • 相关阅读:
    基于springboot+vue的员工绩效考核与激励系统
    docker网络
    [JavaScript]_[初级]_[关于forin或for...in循环语句的用法]
    idea快速搭建struts2框架
    HTTP 3的发布
    Hive用户中文使用手册系列(二)
    阿里妈妈获得商品详情 API 返回值说明
    如何把大的‘tar‘存档文件分割成特定大小的多个文件
    快速上手RabbitMQ,直接上开发!
    自动抓取app数据技术方案总结
  • 原文地址:https://blog.csdn.net/qq_51916951/article/details/126314291