java集合常用知识详解

Posted youx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合常用知识详解相关的知识,希望对你有一定的参考价值。

一,集合简介

1,基本概念

1.1 什么是集合

简单来说,就是一个用来存储多个元素的容器,这一点与我们的数组类似。

1.2 集合与数组的区别

  1. 元素类型 集合:引用类型(存储基本类型时自动装箱) 数组:基本类型

  2. 元素个数 集合:不固定 可任意扩容 数组:固定不能改变容量

     

    通过对比知道集合有非常多的好处,实际开发中也用的很多‘

     

1.3 java的集合体系

java集合分为两部分

  • 单列集合(collection)

  • 双列集合(map)

技术图片

 

 

其中Collection List Set Map 都是接口,他们都有自己对应的实现类也就是ArrayList,HashSet,HashMap。

2 List集合

  • 特点:可重复 有序(指 存取顺序)

  • 基本使用:ArrrayList实例化 add()方法添加元素 size()方法获取元素个数 遍历方式for循环或增强for

    写代码:

    //学生类
    public class Student {
       private String name;
       private int age;
    /测试类
    public class MyTest {
       public static void main(String[] args) {
           List list = new ArrayList();
           Student s1 = new Student("张三", 19);
           Student s2 = new Student("李四", 21);
           Student s3 = new Student("王五", 21);
           list.add(s1);
           list.add(s2);
           list.add(s3);
           //方式一 for循环遍历
           int size = list.size();
           for (int i = 0; i < size; i++) {
               Object stu = list.get(i);
               System.out.println("索引为" + i + "的元素是" + stu);
    ?
              }
               //方式二 增强for
           for (Object stu2 : list) {
               System.out.println(stu2);
          }
          }
      }
  •  

    3 增强for和迭代器

    增强for(foreach循环)与迭代器都可用于遍历集合元素 增强for的底层就是迭代器,遍历时使用增强for更加便捷

    简单演示:

    public class MyTest2 {
       public static void main(String[] args) {
           List list = new ArrayList();
           list.add("a");
           list.add("b");
           list.add("c");
           //方式一 增强for
           for (Object obj : list) {
               System.out.println(obj);
          }
           //方式二 迭代器
           //创建迭代器
           Iterator it = list.iterator();
           //判断迭代器中是否有元素有就迭代
           while (it.hasNext()) {
               String s = (String)it.next();
               System.out.println(s);
          }
      }
    }

    4 泛型

    4.1泛型简介

    什么是泛型? 即泛指任意类型,对具体类型起到辅助作用,通俗来讲就是<>中的类型,起到具体的指定作用,

    写了具体的数据类型,那么添加元素时就必须与其数据类型相符合。

    好处:类型安全

    避免了类型转换

    public class MyTest2 {
       public static void main(String[] args) {
           List list = new ArrayList();
           list.add("a");
           list.add("b");
           list.add("c");
           list.add(2);//无泛型约束,报类型转换异常
    ?
           //创建迭代器
           Iterator it = list.iterator();
           //判断迭代器中是否有元素有就迭代
           while (it.hasNext()) {
               String s = (String) it.next();
               System.out.println(s);
          }
           List<String> list2 = new ArrayList<>();//jdk7开始 后面这个泛型可以不用写了
           list2.add("a");
           list2.add("b");
           list2.add("c");
           //list2.add(2); //泛型约束提示报红,只能传泛型指定的数据类型
    ?
           for (String s2 : list2) {
               System.out.println(s2);
    ?
          }
    ?
      }
    }

    5.Collections工具类

    5.1 简介 针对集合操作的工具类

    5.2 常用成员方法

    • sort(List<T>) 根据列表指定顺序,将指定列表升序排序

    • max(Collection<T>)返回集合最大元素

    • reverse(List<T>)翻转集合元素

    • shuffle(List<T>)使用默认随机源随机置换指定的列表

     

    6. Set集合

    • 特点:不可重复 无序

    //测试类
    public class MyTest {
       public static void main(String[] args) {
           Set<Student> set = new HashSet<>();
           Student s1 = new Student("张三", 19);
           Student s2 = new Student("李四", 21);
           Student s3 = new Student("王五", 21);
           set.add(s1);
           set.add(s2);
           set.add(s3);
    ?
           //方式二 增强for
           for (Object stu2 : set) {
               System.out.println(stu2);
          }
      }
    ?
    }

    7. Map集合

    • 特点:双列集合 即由KY键值对组成

    • Key不可重复 Value可重复

    • 基本使用:put()方法 添加元素

    在 for 循环中使用 entries 实现 Map 的遍历(最常见和最常用的)

    • Map集合的遍历:

    public class MyTest {
       public static void main(String[] args) {
          Map<String, Student> map = new HashMap<>();
           Student s1 = new Student("张三", 19);
           Student s2 = new Student("李四", 21);
           Student s3 = new Student("王五", 21);
          map.put("1",s1);
          map.put("2",s2);
          map.put("3",s3);
           for (Map.Entry<String, Student> entry : map.entrySet()) {
               String mapKey = entry.getKey();
               Student mapValue = entry.getValue();
               System.out.println(mapKey + ":" + mapValue);
          }
      }
    }
    • 使用 for-each 循环遍历 key 或者 values,一般适用于只需要 Map 中的 key 或者 value 时使用。性能上比 entrySet 较好。

    public class MyTest {
       public static void main(String[] args) {
          Map<String, Student> map = new HashMap<>();
           Student s1 = new Student("张三", 19);
           Student s2 = new Student("李四", 21);
           Student s3 = new Student("王五", 21);
          map.put("1",s1);
          map.put("2",s2);
          map.put("3",s3);
           for (String key : map.keySet()) {
               System.out.println(key);
          }
    // 打印值集合
           for (Student value : map.values()) {
               System.out.println(value);
          }
      }
    }

     

    到这里简单的集合框架就说到这里,搞定 收工!

     

 

 

 

 

 

 

 

 

以上是关于java集合常用知识详解的主要内容,如果未能解决你的问题,请参考以下文章

Java常用集合类详解

ArrayList知识详解

JAVA常用集合框架用法详解基础篇一之Colletion接口

Java中的集合(List,Set,Map)(知识点详解)(看完这篇就够了)

java中的List详解以及代码示例

JAVA笔记(16)---集合- 详解 Set集合( Map 体系集合常用方法;哈希表;二叉树数据结构;Map集合,如何自定义集合排序规则 )