• Java入门 集合框架、泛型和Collection(一)(第二十三天)


    集合的使用:

    如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java集合框架

    java集合框架:

    在java中数据结构是以某种形式将数据组织在一起的集合。他们不仅存储数据,还支持访问以及处理数据的操作。这些数据结构通常称为java集合框架。

    1、容器:一种能够存储其他数据或者元素的数据结构。

    2、java集合框架支持的两种类型的容器:
          1)、一种是为了存储一个元素集合,简称为集合(collection)。
          2)、另一种是为了存储键/值对,称为图(map)。

    1)准备数据:创建NewsTitle类对象
        NewsTitle nt1 = new NewsTitle(对象(即数据));

    2)准备容器:创建集合对象,创建ArrayList对象
        ArrayList al = new ArrayList();//集合名:al

    准备容器:创建集合对象,创建LinkedList对象
           List list = new LinkedList();

    集合包含的内容

    Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
    1)接口:Collection、Map
           Collection包含了List和Set两大分支。
    2)具体类
    3)算法

    Collection提供了对集合进行排序、遍历等多种算法实现

    1)List集合中元素的特点:
            不唯一(可重复)、有序
    2)Set集合中元素的特点
            唯一(不可重复)、无序
    3)Map集合中元素的特点
            键唯一、值不唯一

    遍历集合的方法

    遍历集合的方法有三种:
        1)List集合:普通for循环、增强for循环、迭代器
        2)Set集合:增强for循环、迭代器
        3)Map集合:增强for循环、迭代器、键值对遍历

    ArrayList和LinkedList集合的区别

       ArrayList集合底层是长度可变的数组,遍历和查询集合中的元素效率高
       LinkedList集合底层是链表结构,删除和插入元素效率高

    List接口

    List三种遍历方法都可采用

    确定存储方式
            ArrayList类是List接口的一个具体实现类
            ArrayList对象实现了可变大小的数组
            随机访问和遍历元素时,它提供更好的性能
    确定存储对象
            创建类型:新闻标题
            包含属性: ID、名称、创建者
    具体实现

    代码:

    1. package GatherDemo01;
    2. public class NewsTitle {
    3. private int id;//编号
    4. private String name;//标题名称
    5. private String author;//作者
    6. public NewsTitle() {
    7. super();
    8. }
    9. public NewsTitle(int id, String name, String author) {
    10. super();
    11. this.id = id;
    12. this.name = name;
    13. this.author = author;
    14. }
    15. public int getId() {
    16. return id;
    17. }
    18. public void setId(int id) {
    19. this.id = id;
    20. }
    21. public String getName() {
    22. return name;
    23. }
    24. public void setName(String name) {
    25. this.name = name;
    26. }
    27. public String getAuthor() {
    28. return author;
    29. }
    30. public void setAuthor(String author) {
    31. this.author = author;
    32. }
    33. @Override
    34. public String toString() {
    35. return "NewsTitle [id=" + id + ", name=" + name + ", author=" + author
    36. + "]";
    37. }
    38. }

    对象: 

    1. package GatherDemo01;
    2. import java.util.ArrayList;
    3. public class ArrayListDemo01 {
    4. public static void main(String[] args) {
    5. // 准备数据:创建5个NewsTitle类对象
    6. NewsTitle nt1 = new NewsTitle(1001, "三亚新增本土480+774", "百度");
    7. NewsTitle nt2 = new NewsTitle(1002, "中国成功发射一箭十六星", "中国航天");
    8. NewsTitle nt3 = new NewsTitle(1003, "男子救落水5人后遇难 同伴讲述经过", "民间观察");
    9. NewsTitle nt4 = new NewsTitle(1004, "苏氏祖祠:苏炳添是苏东坡第29代孙", "生活观察");
    10. NewsTitle nt5 = new NewsTitle(1005, "家长花200万给娃集奥特曼卡没集齐", "合肥观察");
    11. // 准备容器:创建集合对象,创建ArrayList对象
    12. ArrayList al = new ArrayList();
    13. // 将数据存储到集合中,向集合中添加元素不是通过元素下标来赋值,而是通过集合对象调用方法实现
    14. al.add(nt1);
    15. al.add(nt3);
    16. al.add(nt4);
    17. al.add(nt2);
    18. al.add(nt4);
    19. // 可以通过集合对象调用方法实现对集合中元素的操作
    20. // 获取集合中的元素个数
    21. int size = al.size();
    22. System.out.println("al集合中元素个数:" + size);
    23. /*// 获取集合中指定位置的元素
    24. Object obj0=al.get(0);
    25. NewsTitle nwt0 = (NewsTitle)obj0;
    26. System.out.println(nwt0);
    27. Object obj1=al.get(1);
    28. NewsTitle nwt1 = (NewsTitle)obj1;
    29. System.out.println(nwt1);
    30. Object obj2=al.get(2);
    31. NewsTitle nwt2 = (NewsTitle)obj2;
    32. System.out.println(nwt2);
    33. Object obj3=al.get(3);
    34. NewsTitle nwt3 = (NewsTitle)obj3;
    35. System.out.println(nwt3);
    36. Object obj4=al.get(4);
    37. NewsTitle nwt4 = (NewsTitle)obj4;
    38. System.out.println(nwt4);*/
    39. /* // 遍历集合
    40. for (int i = 0; i < al.size(); i++) {
    41. Object object = al.get(i);
    42. NewsTitle ntw = (NewsTitle) object;
    43. System.out.println(ntw);
    44. }*/
    45. System.out.println("--------------------");
    46. // 增强for循环遍历集合
    47. /*for (Object object : al) {
    48. NewsTitle ntw = (NewsTitle) object;
    49. System.out.println(ntw);
    50. }*/
    51. System.out.println("--------------------");
    52. // 使用迭代器遍历集合
    53. /*
    54. * 集合对象调用iterator()方法将集合中的所有元素按照顺序取出来放入到迭代器容器里面
    55. * 然后通过迭代器对象调用hasNext()方法判断迭代器中是否有元素,有元素就通过next()方法取出这个元素
    56. * 判断一个就取出一个,判断一个就取出一个,所以可以使用循环来取出里面所有的元素
    57. */
    58. /*Iterator it = al.iterator();
    59. while (it.hasNext()) {
    60. Object object = it.next();
    61. NewsTitle nt = (NewsTitle) object;
    62. System.out.println(nt);
    63. }*/
    64. System.out.println("--------------------");
    65. //将数据存储到集合中的指定位置
    66. al.add(1, nt5);//将元素nt5插入到下标为1的位置
    67. // 增强for循环遍历集合
    68. for (Object object : al) {
    69. NewsTitle ntw = (NewsTitle) object;
    70. System.out.println(ntw);
    71. }
    72. System.out.println("---------------------");
    73. //删除集合中的某个元素
    74. // Object ob=al.remove(1);//刪除下标为1的元素
    75. /*al.remove(nt3);
    76. for (Object object : al) {
    77. NewsTitle ntw = (NewsTitle) object;
    78. System.out.println(ntw);
    79. }*/
    80. //判断集合中是否包含指定的元素
    81. /*boolean result =al.contains(nt3);
    82. System.out.println("集合中包含nt3元素:"+result);*/
    83. //判断集合是不是空的
    84. /*System.out.println("集合是空的:"+al.isEmpty());*/
    85. //清空集合
    86. /*al.clear();
    87. System.out.println("集合是空的:"+al.isEmpty());
    88. System.out.println(al.size());*/
    89. System.out.println("****************************");
    90. //将集合转换成数组
    91. Object[] objects=al.toArray();
    92. for (int i = 0; i < objects.length; i++) {
    93. System.out.println(objects[i]);
    94. }
    95. System.out.println("****************************");
    96. /*//清空集合
    97. al.clear();
    98. System.out.println("集合是空的:"+al.isEmpty());
    99. System.out.println(al.size());*/
    100. }
    101. }

    对象 

    1. package GatherDemo01;
    2. import java.util.Iterator;
    3. import java.util.LinkedList;
    4. import java.util.List;
    5. public class LinkedListDemo01 {
    6. public static void main(String[] args) {
    7. // 准备数据:创建5个NewsTitle类对象
    8. NewsTitle nt1 = new NewsTitle(1001, "三亚新增本土480+774", "百度");
    9. NewsTitle nt2 = new NewsTitle(1002, "中国成功发射一箭十六星", "中国航天");
    10. NewsTitle nt3 = new NewsTitle(1003, "男子救落水5人后遇难 同伴讲述经过", "民间观察");
    11. NewsTitle nt4 = new NewsTitle(1004, "苏氏祖祠:苏炳添是苏东坡第29代孙", "生活观察");
    12. NewsTitle nt5 = new NewsTitle(1005, "家长花200万给娃集奥特曼卡没集齐", "合肥观察");
    13. // 准备容器:创建集合对象,创建LinkedList对象
    14. // List是一个接口,LinkedList是List接口的实现类,将List接口引用指向了实现类的实例,
    15. // 向上转型:父类(接口)的引用指向子类的实例,父类引用无法调用子类特有的方法
    16. List list = new LinkedList();
    17. list.add(nt1);
    18. list.add(nt3);
    19. list.add(nt2);
    20. list.add(nt2);
    21. System.out.println(list.size());
    22. //使用迭代器将list集合进行遍历
    23. Iterator it =list.iterator();
    24. while(it.hasNext()){
    25. Object object =it.next();
    26. NewsTitle nt = (NewsTitle)object;
    27. System.out.println(nt);
    28. }
    29. System.out.println("-------------------------");
    30. /*向下转型:子类的引用指向父类的对象 需要进行向下转型的原因是父类
    31. 引用无法调用子类中特有的方法,子类特有的方法只能通过子类对象调用*/
    32. LinkedList link = (LinkedList)list;
    33. link.addFirst(nt5);
    34. link.addLast(nt4);
    35. for (Object object : link) {
    36. System.out.println(object);
    37. }
    38. System.out.println("-------------------------");
    39. //获取集合中的第一个元素和最后一个元素
    40. System.out.println(link.getFirst());
    41. System.out.println(link.getLast());
    42. /*System.out.println("-------------------------");
    43. //删除集合中的第一个元素和最后一个元素
    44. link.removeFirst();
    45. link.removeLast();
    46. for (Object object : link) {
    47. System.out.println(object);
    48. }*/
    49. }
    50. }

    Set接口

    1)Set接口存储一组唯一,无序的对象
    2)HashSet是Set接口常用的实现类
            Set接口不存在get()方法
    3)Set中存放对象的引用

    判断加入对象是否已经存在:
    采用对象的equals()方法比较两个对象是否相等

    遍历Set集合:

    方法1:通过迭代器Iterator实现遍历 
         1)获取Iterator :Collection 接口的iterator()方法
         2)Iterator的方法
               boolean hasNext(): 判断是否存在另一个可访问 
               的元素 
              Object next(): 返回要访问的下一个元素

    方法2:增强型for循环

    1. package GatherDemo03;
    2. import java.util.Collection;
    3. import java.util.HashMap;
    4. import java.util.Iterator;
    5. import java.util.Map;
    6. import java.util.Set;
    7. public class HashMapDemo01 {
    8. public static void main(String[] args) {
    9. //准备容器:创建HashMap对象
    10. HashMap hm = new HashMap();
    11. //准备元素并将元素存储到集合中
    12. hm.put("CN", "中华人民共和国");
    13. hm.put("JP", "小日本");
    14. hm.put("RU", "俄罗斯联邦");
    15. hm.put("USA", "美利坚合众国");
    16. hm.put("UK", "大不列颠及北爱尔兰联合王国");
    17. System.out.println(hm.size());
    18. //根据键获取对应的值
    19. Object obj1=hm.get("CN");
    20. String str1=(String)obj1;
    21. System.out.println(str1);
    22. System.out.println(hm.get("CNN"));
    23. //删除集合中的元素
    24. Object obj2=hm.remove("JP");
    25. String str2=(String)obj2;
    26. System.out.println(str2);
    27. System.out.println(hm.size());//删除元素JP,还有4个元素
    28. //获取HashMep集合中所有键值对的键
    29. Set keys=hm.keySet();
    30. for (Object object : keys) {
    31. String key=(String)object;
    32. System.out.println(key);
    33. }
    34. //获取HashMep集合中所有键值对的值
    35. Collection values= hm.values();
    36. for (Object object : values) {
    37. String value=(String)object;
    38. System.out.println(value);
    39. }
    40. //查询集合中是否存在指定键对应的键值对
    41. System.out.println(hm.containsKey("RU"));//true
    42. System.out.println(hm.containsKey("JP"));//false
    43. //遍历键值对的3种方式
    44. //方式一:获取键的集合,然后在遍历键的集合过程中调用get()方法获取值
    45. Set keys2 = hm.keySet();
    46. for (Object object : keys2) {
    47. //获得键
    48. String key=(String)object;
    49. //根据键获取值
    50. Object obj=hm.get(key);
    51. String value = (String)obj;
    52. System.out.println(key+"---"+value);
    53. }
    54. System.out.println("********************************");
    55. //方式二:获取键的集合,然后在遍历键的集合过程中调用get()方法获取值
    56. Set keys3=hm.keySet();
    57. Iterator it = keys3.iterator();
    58. while (it.hasNext()) {
    59. Object object = it.next();
    60. String key=(String)object;
    61. //获得键
    62. Object obj=hm.get(key);
    63. String value=(String)obj;
    64. System.out.println(key+"---"+value);
    65. }
    66. System.out.println("********************************");
    67. //方式三:键值对遍历,将hm集合中的键值对整体取出来后放入到Set集合中
    68. /*
    69. *1)使用entrySet( )方法将hm集合中的键值对整体取出来放在Set集合中
    70. *
    71. *2)然后使用增强for循环或者迭代器取出Set集合中的键值对元素,取出来的
    72. * 是Object类型,实际,上键值对的真正类型是Map. Entry类型
    73. *
    74. *3)所以将取出来的元素强制转换为Map. Entry类型,Map. Entry类中有getKey( )
    75. * 方法获取键值对的键,有getValue( )方法获取键值对的值
    76. */
    77. Set keyValues=hm.entrySet();
    78. for (Object object : keyValues) {
    79. Map.Entry me = (Map.Entry)object;
    80. //获取键
    81. Object object1=me.getKey();
    82. String key = (String)object1;
    83. //根据键获取值
    84. Object object2=me.getValue();
    85. String value = (String)object2;
    86. System.out.println(key+"---"+value);
    87. }
    88. }
    89. }

  • 相关阅读:
    Linux 基础命令&进阶
    【Web安全】文件上传漏洞
    【PM专用】快速统计团队还有谁没有登记上报信息,快速筛选出属于自己项目组的成员,未完成XXX工作事项的名单
    IDEA中创建Java Web项目方法1
    元素的盒子模型+标签的尺寸大小和偏移量+获取页面滚动距离+JS直接修改标签样式 + 让页面滚动到指定位置
    特征工程特征预处理归一化与标准化、鸢尾花种类预测代码实现
    消息中间件-面试题
    【Java 基础】5、通过 Java 官方文档学习一下 Java 的类和对象
    Android jetpack : Navigation 导航 路由 、 单个Activity嵌套多个Fragment的UI架构方式
    13.Jenkins的使用
  • 原文地址:https://blog.csdn.net/m0_70516782/article/details/126347092