大数据基础之java单列集合

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据基础之java单列集合

单列集合

  1. 单列集合介绍

  2. Collection集合

    1. 集合的定义
    public static void main(String[] args) {
        // 注意: Collection 是顶层接口,不能进行数据实例化,所以我们想要获取其对象,需要使用子类实例化后赋值给父类变量
        // 单列集合的定义格式:
        //  集合类型<泛型> 集合名称 = new 集合类型<泛型>();
        // 定义集合时,如果在前边书写了泛型, new后边的类型就可以省略泛型,前后泛型必须一致
        Collection<String> list = new ArrayList<>();
    
        //添加数据,可以使用add API进行添加数据
        list.add("hello");
        list.add("world");
        list.add("java");
    
        // 在集合中重写了toString 可以直接打印集合中的数据内容
        System.out.println(list); // [hello, world, java]
    
    }
    1. 集合的成员方法
     public static void main(String[] args) {
            // 定义单列集合对象
            Collection<String> list = new ArrayList<>();
    
            //添加数据,可以使用add API进行添加数据
            //1.public boolean add(E e) 添加元素.
            list.add("hello");
            list.add("world");
            list.add("java");
    
            //2.public boolean remove(Object obj) 从集合中移除指定的元素.
            // 删除成功,返回true 如果删除不成功返回false
            boolean h = list.remove("hello");
            System.out.println(h);
            //3.public void clear() 清空集合对象
    //        list.clear();
            //4.public boolean contains(Object obj) 判断集合中是否包含指定的元素
            // 如果包含,返回true, 如果不包含,返回false
            System.out.println(list.contains("hello"));
            System.out.println(list.contains("传智"));
            //5.public boolean isEmpty() 判断集合是否为空
            System.out.println(list.isEmpty());
            //6.public int size() 获取集合的长度, 即集合中元素的个数
            System.out.println(list.size());
            // 获取字符串长度length()
            // 获取数组长度 length
    
            // 在集合中重写了toString 可以直接打印集合中的数据内容
            System.out.println(list);
    
        }
    1. 集合遍历
    public static void main(String[] args) {
        // 创建Collection对象
        Collection<String> list = new ArrayList<>();
    
        //添加数据,可以使用add API进行添加数据
        list.add("hello");
        list.add("world");
        list.add("java");
    
        // 遍历  Collection对象不能通过下标获取元素数据
        // 方法一: 使用迭代器对集合进行迭代
        //1.构造迭代器
        Iterator<String> itor = list.iterator();
        //2.判断迭代器中是否存在下一个元素,如果存在,则获取,如果不存在,终止循环 hasnext
        // 分析: 我们使用哪种方式循环?? while 因为循环次数不定
        // hasNext()判断集合中是否存在下一个值
        // next()获取集合中的下一个值
        while (itor.hasNext()){
            System.out.println(itor.next());
        }
    
        // 方法二: 增强for  foreach
        // 格式: for(临时变量类型 临时变量 : 集合或者数组){}
        // 增强for 会以此从集合汇总获取每一个值,并赋值给临时变量
        for (String s: list){
            System.out.println(s);
        }
    
    
    }

    4.集合储存对象数据

    public static void main(String[] args) {
        //1. 创建集合对象
        Collection<Student> stuList = new ArrayList<>();
        //2.向集合对象中添加数据
        stuList.add(new Student("小明", 12));
        stuList.add(new Student("小方", 13));
        stuList.add(new Student("小莉", 15));
    
        //3.输出集合对象的值
        System.out.println(stuList);
    
        // 4.遍历集合
        for(Student s : stuList){
            System.out.println(s);
        }
    }
  3. List集合

    List的遍历

    public static void main(String[] args) {
            // 1.创建list集合对象
            ArrayList<Student> stuList = new ArrayList<>();
    
            // 2.向list集合对象中添加学生信息
            stuList.add(new Student("小明", 12));
            stuList.add(0, new Student("小方", 14));
            stuList.add(new Student("小红", 15));
    
            // 3.打印集合对象
    //        System.out.println(stuList);
    
            // 4.遍历集合对象
            // 方法一: 普通迭代器
            Iterator<Student> itor = stuList.iterator();
    //        while (itor.hasNext()){
    //            System.out.println(itor.next());
    //        }
            //迭代器的快捷键是 itit
            while (itor.hasNext()) {
                Student s = itor.next();
                System.out.println(s);
            }
            System.out.println("---------------");
            // 方法二: 列表迭代器
            ListIterator<Student> sitor = stuList.listIterator();
    
            while (sitor.hasNext()) {
                Student s = sitor.next();
                System.out.println(s);
            }
            System.out.println("---------------");
    
            // 方法三: 增强for
            //增强for 的快捷键是 iter
            for (Student s : stuList) {
                System.out.println(s);
            }
            System.out.println("---------------");
    
            // 方法四:普通for
            for (int i = 0; i < stuList.size(); i++) {
                System.out.println(stuList.get(i));
            }
    
        }
    1. list的正向遍历和逆向遍历
    public static void main(String[] args) {
        // 创建list对象
        ArrayList<String> list = new ArrayList<>();
    
        // 添加数据
        list.add("hello");
        list.add("world");
        list.add("java");
    
        // 打印列表对象
        System.out.println(list);
        
        //构造列表迭代器
        ListIterator<String> sitor = list.listIterator();
        
        // 正向遍历
        while (sitor.hasNext()) {
            String s = sitor.next();
            System.out.println(s);
        }
        // 逆向遍历
        while (sitor.hasPrevious()) {
            String s =  sitor.previous();
            System.out.println(s);
        }
    
    
    }
    1. 并发修改异常
    public static void main(String[] args) {
            // 创建list对象
            ArrayList<String> list = new ArrayList<>();
    
            // 添加数据
            list.add("hello");
            list.add("world");
            list.add("java");
    
            // 创建迭代器
    //        Iterator<String> itor = list.iterator();
            //遍历集合
            // ConcurrentModificationException
            // 并发修改异常, 在我们使用迭代器的过程中不能修改迭代器控制的集合
    //        while (itor.hasNext()) {
    //            String s = itor.next();
    //            if (s.equals("world")){
    //                list.add("javaEE");
    //            }
    //        }
    
            // 方法一: 使用listIterator
            ListIterator<String> sitor = list.listIterator();
    
            while (sitor.hasNext()) {
                String s = sitor.next();
                if (s.equals("world")){
                    //ConcurrentModificationExceptio
                    // 在此处使用集合的add方法依然会报并发修改异常
    //                list.add("javaEE");
                    //如果想要解决这个问题需要使用listIterator中的add方法
                    sitor.add("javaEE");
                }
            }
    
            // 方法二: 直接使用普通for循环,不构造迭代器
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).equals("world")){
                    list.add("javaEE");
                }
            }
    
            System.out.println(list);
    
            // 注意:增强for本质上也是使用了迭代器,所以也存在并发修改异常
    //        for (String s : list) {
    //            // ConcurrentModificationException
    //            if (s.equals("world")){
    //                list.add("javaEE");
    //            }
    //        }
    
    
        }
  4. 增强for

  5. 常见的数据结构

    常用的数据结构
    1. 栈: 先进后出, 后进先出
    2. 队列: 先进先出, 后进后出
    3. 数组: 改和查效率高, 增删效率低
    4. 链表: 增删效率高, 改查效率低
  6. List集合的子类

  7. Set集合

    set集合保存对象

    public static void main(String[] args) {
        // 创建hashset对象
        HashSet<Student> hs = new HashSet<>();
        // 添加数据
        hs.add(new Student("小明", 15));
        hs.add(new Student("小方", 14));
        hs.add(new Student("小黄", 16));
        hs.add(new Student("小黄", 16));
    
        // 遍历集合将结果打印到控制台上
        // 使用功能hashset保存对象,如果重写hashcode方法,同样成员变量的对象将被去重,否则不去重
        Iterator<Student> itor = hs.iterator();
        while (itor.hasNext()) {
            Student s = itor.next();
            System.out.println(s);
        }
    
    
    
    }
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
28天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
38 6
|
28天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
38 3
|
28天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
32 2
|
30天前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
28 3
|
8天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
18 2
|
8天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
13天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
13天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
13天前
|
Java 开发者
|
17天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置