资讯专栏INFORMATION COLUMN

JAVA-集合类概述(笔记)

wangbinke / 1283人阅读

摘要:通常使用矢代器来实现遍历集合。将集合中指定索引位置的对象改成指定的对象。三元运算如果否则集合没有继承接口,它是提供到的映射,来决定遍历对象的顺序。

1.Collection接口是层次结构中的跟接口。Collection接口通常不能直接使用,但该接口提供了添加元素,删除元素,管理数据的方法。
Collection通常使用矢代器(Iterator)来实现遍历集合。
代码:

import java.util.*;

public class Muster { // 创建类Muster
    public static void main(String args[]) {
        Collection list = new ArrayList<>(); // 实例化集合类对象
        list.add("a"); // 向集合添加数据
        list.add("b");
        list.add("c");      
        int Size = list.size();//返回int类型,获取该集合中元素的个数
        Iterator it = list.iterator(); // 创建迭代器     
        while (it.hasNext()) { // 判断是否有下一个元素
            String str = (String) it.next(); // 获取集合中元素
            System.out.println(str);
        }
        System.out.println(Size);
    }
}

结果:

2.List集合:
List集合中的元素应许重复,各元素的顺序就是对象插入的顺序。
LIst接口继承了Collection接口,此外还定义了两个非常重要的方法:

get(int index): 获取指定索引位置的元素。
set(int index,Object obj) : 将集合中指定索引位置的对象改成指定的对象。

List接口的常用实现类有ArrayList 与 LinkedList。

a、ArrayList优点:随机访问速度快,缺点:删除或插入对象的速度慢。
b、LinkedList 正好相反。
代码:

import java.util.*;

public class Gather { // 创建类Gather
    public static void main(String[] args) { // 主方法
        List list = new ArrayList<>(); // 创建集合对象
        list.add("a"); // 向集合添加元素
        list.add("b");
        list.add("c");
        int i = (int) (Math.random() * (list.size() - 1)); // 获得0~1之间的随机数
        System.out.println("随机获取数组中的元素:" + list.get(i));
        list.remove(2); // 将指定索引位置的元素从集合中移除
        System.out.println("将索引是"2"的元素从数组移除后,数组中的元素是:");
        for (int j = 0; j < list.size(); j++) { // 循环遍历集合
            System.out.println(list.get(j));
        }
        System.out.println("最终集合中元素的个数:"+list.size());
        //用矢代器遍历集合
        Iteratorit = list.iterator();
        while(it.hasNext()){
            String str = (String)it.next();
            System.out.println(str);
        }
    }
}

结果:

3.Set集合
Set集合不按特定的顺序排序,只是简单把对象加入到集合中,但不能包含重复对象
Set接口常用的实现类有HashSet类与Tree类。Set继承了Comparable 接口。这个接口可参考JAVA API文档

a、HashSet类有哈希表,遍历的对象随机
b、TreeSet类遍历数组不仅可以按照自然顺序排序,还可以按照指定顺序排序。

代码:

import java.util.*;
public class UpdateStu implements Comparable {
    String name;
    long id;
    public UpdateStu(String name, long id) {
        this.id = id;
        this.name = name;
    }
    public int compareTo(Object o) {
        UpdateStu upstu = (UpdateStu) o;
        int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
        return result;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public static void main(String[] args) {
        UpdateStu stu1 = new UpdateStu("厦门", 00001);
        UpdateStu stu2 = new UpdateStu("北京", 00002);
        UpdateStu stu3 = new UpdateStu("上海", 00003);
        UpdateStu stu4 = new UpdateStu("广州", 00004);
        TreeSet tree = new TreeSet<>();
        tree.add(stu1);
        tree.add(stu2);
        tree.add(stu3);
        tree.add(stu4);
        Iterator it = tree.iterator();
        System.out.println("Set集合中的所有元素:");
        while (it.hasNext()) {
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }
        it = tree.headSet(stu2).iterator();
        System.out.println("截取前面部分的集合:");
        while (it.hasNext()) {
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }
        it = tree.subSet(stu2, stu3).iterator();
        System.out.println("截取中间部分的集合");
        while (it.hasNext()) {
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }
    }
}


结果:

补充:
细心的同学会发现上面的程序是继承 Comparable 这个类的,且里面用到了compareTo方法,这好似接口中的方法,可以重写该方法,返回的值就决定了Set集合遍历数组的排序。这就是TreeSet可以自定义排序的秘密所在。

/*例如:pojo复写了compareTo ()方法以后,对放入set集合的对象会根据compareTo ()方法的返回值进行排序,如果ast.height-this.height 为负值就是降序,以后每次比较正的放后面 负的放前面。*/

int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);

/*三元运算:  如果 id>upstu,return 1 ,否则 return (id == upstu.id ? 0 : -1)*/

4.Map集合:
Map没有继承Collection接口,它是提供key到value的映射,来决定遍历对象的顺序
注意每个key只能映射一个值。
代码:
先创建Emp,获得对象

public class Emp {
    private String e_id;
    private String e_name;
    public Emp( String e_id,String e_name) {
        this.e_id = e_id;
        this.e_name = e_name;
    }
    public String getE_id() {
        return e_id;
    }
    public void setE_id(String e_id) {
        this.e_id = e_id;
    }
    public String getE_name() {
        return e_name;
    }
    public void setE_name(String e_name) {
        this.e_name = e_name;
    }

}

在创建 MapText 遍历对象

import java.util.*;

public class MapText { // 创建类MapText
    public static void main(String[] args) { // 主方法
        Map map = new HashMap<>(); // 由HashMap实现的Map对象
        Emp emp = new Emp("001", "厦门");
        Emp emp2 = new Emp("005", "上海"); // 创建Emp对象
        Emp emp3 = new Emp("004", "北京");
        map.put(emp.getE_id(), emp.getE_name());
        map.put(emp2.getE_id(), emp2.getE_name()); // 将对象添加到集合中
        map.put(emp3.getE_id(), emp3.getE_name());
        Set set = map.keySet(); // 获取Map集合中的key对象集合
        Iterator it = set.iterator();
        System.out.println("HashMap类实现的Map集合,无序:");
        while (it.hasNext()) {
            String str = (String) it.next();
            String name = (String) map.get(str); // 遍历Map集合
            System.out.println(str + " " + name);
        }

        TreeMap treemap = new TreeMap<>(); // 创建TreeMap集合对象
        treemap.putAll(map); // 向集合添加对象
        Iterator iter = treemap.keySet().iterator();
        System.out.println("TreeMap类实现的Map集合,键对象升序:");
        while (iter.hasNext()) { // 遍历TreeMap集合对象
            String str = (String) iter.next(); // 获取集合中的所有key对象
            String name = (String) treemap.get(str); // 获取集合中的所有values值
            System.out.println(str + " " + name);
        }
    }
}

结果:

补充:
使用Map集合需要先获取Map集合中的Key对象,再根据这个key映射对value进行遍历,key获取的顺序决定value排列的顺序。

Set set = map.keySet(); // 获取Map集合中的key对象集合

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64302.html

相关文章

  • JAVA集合概述

    摘要:近段时间在学习集合,原本也没想着写笔记或者博客的。在安卓开发的时候已经有在用集合了,具体是用向上转型到对象。我觉得集合比数组方便的地方主要有个所有操作都是基于对象进行,符合的核心思想。集合主要由两个接口派生而来以及。     近段时间在学习java集合,原本也没想着写笔记或者博客的。但是慢慢看下去之后发现java集合的内容繁多,但是各集合之间具有很大的共通性。所以就动了写博客的念头。 ...

    darkbaby123 评论0 收藏0
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • Spring笔记01_下载_概述_监听器

    摘要:简单来说,是一个轻量级的控制反转和面向切面的容器框架。变成的支持提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能。用于反射创建对象,默认情况下调用无参构造函数。指定对象的作用范围。 1.Spring介绍 1.1 Spring概述 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert...

    reclay 评论0 收藏0
  • 面向对象接口多态

    摘要:多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。具体格式如下父类引用指向子类对象就是多态的定义格式。多态的转型分为向上转型与向下转型两种向上转型当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。 第3天 面向对象 今日内容介绍 接口 多态 笔记本案例今日学习目标 写出定义接口的格式 写出实现接口的格式...

    wangdai 评论0 收藏0
  • Java集合框架概述集合的遍历

    摘要:第三阶段常见对象的学习集合框架概述和集合的遍历一集合框架的概述集合的由来如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。进而它们的遍历方式也应该是不同的,最终就没有定义迭代器类。 第三阶段 JAVA常见对象的学习 集合框架概述和集合的遍历 (一) 集合框架的概述 (1) 集合的由来 如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一...

    happyhuangjinjin 评论0 收藏0

发表评论

0条评论

wangbinke

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<