IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【Java】Java集合大总结 -> 正文阅读

[数据结构与算法]【Java】Java集合大总结

更多文章欢迎关注公众号“三横兰”
请添加图片描述

通过图片可以看出Java的集合主要有两种,一种是Collection接口,存放单一元素;另一种是Map接口,存放键值对元素。

Collection集合

常用的接口有List、Set、Queue

  • List:存放的元素是有序的、可以重复的。对顺序有要求的就使用改接口
  • Set:存放的元素是无序的、注重唯一性、不可以重复。可以用于去重情况
  • Queue:存放的元素是有序的、可重复的。

List

  • ArrayList:存储数据用的是Object[]数组,查找功能方便,线程不安全
  • Vector: 存储数据用的是Object[]数组,注重线程安全的用Vector
  • LinkedList:存储数据用的是双向链表数据结构,插入和删除数据比ArrayList更高效,非线程安全

Set

  • HashSet:存储数据结构以及对数据的操作主要是通过HashMap来实现的,线程不安全。HashSet判断值唯一,先通过hashCode()函数获取hash值判断相等不相等,如果相等则再调用equals方法判断。

  • LinkedHashSet:继承了HashSet。与HashSet的区别在于,HashSet的元素是无序的,而LinkedHashSet使用链表维护元素的次序,访问元素的时候会按照插入的顺序访问集合的元素

    public class Test {
        public static void main(String[] args) {
            Student student1 = new Student("student1");
            Student student2 = new Student("student2");
            Student student3 = new Student("student3");
            HashSet<Student> hashSet = new HashSet<>();
            hashSet.add(student1);
            hashSet.add(student2);
            hashSet.add(student3);
            LinkedHashSet<Student> linkedHashSet = new LinkedHashSet<>();
            linkedHashSet.add(student1);
            linkedHashSet.add(student2);
            linkedHashSet.add(student3);
            printSet(hashSet);
            printSet(linkedHashSet);
        }
        
        public static void printSet(Set<Student> set) {
            System.out.println(set.getClass());
            for (Iterator iterator = set.iterator(); iterator.hasNext();) {
                Student student = (Student) iterator.next();
                System.out.println(student.name);
            }
        }
    }
    

    打印出来的结果:

    class java.util.HashSet
    student3
    student1
    student2
    class java.util.LinkedHashSet
    student1
    student2
    student3
    
  • TreeSet:实现了SortSet的接口,可以看出集合的元素是出于排序状态的,放入TreeSet中的对象需实现Comparable接口并覆盖其compareTo()方法。有自然排序和定制排序,默认使用自然排序,如果元素不是自定义的对象,那么会按照升序排列。

    public class Test {
        public static void main(String[] args) {
            Student student1 = new Student("student1");
            Student student2 = new Student("student2");
            Student student3 = new Student("student3");
            // 自然排序
            TreeSet<Student> treeSet = new TreeSet<>();
            treeSet.add(student1);
            treeSet.add(student3);
            treeSet.add(student2);
            printSet(treeSet);
            // 定制排序
            TreeSet<Student> treeSet2 = new TreeSet<>(new StudentComparator());
            treeSet2.add(student1);
            treeSet2.add(student3);
            treeSet2.add(student2);
            printSet(treeSet2);
        }
        
        public static void printSet(Set<Student> set) {
            System.out.println(set.getClass());
            for (Iterator iterator = set.iterator(); iterator.hasNext();) {
                Student student = (Student) iterator.next();
                System.out.println(student.name);
            }
        }
    }
    
    class Student implements Comparable{
        public Student(String name) {
            super();
            this.name = name;
        }
    
        String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public int compareTo(Object o) {
            // 升序排列
            return this.name.compareTo(((Student)o).getName());
        }
    }
    
    class StudentComparator implements Comparator<Student>{
        @Override
        public int compare(Student o1, Student o2) {
            // 降序排列
            return o2.getName().compareTo(o1.getName());
        }
    }
    

    打印出来的结果:

    class java.util.TreeSet
    student1
    student2
    student3
    class java.util.TreeSet
    student3
    student2
    student1
    

Map集合

  • HashMap:非线程安全;可以存储null的key和value,作为key只能有一个,作为value可以有无数个
  • HashTable:线程安全;不可以有null的key和value。因为线程安全的问题,HashTable要比HashMap慢,并且如果考虑线程安全的话可以使用ConcurrentHashMap。HashTable继承了Dictionary,而后者已经被废弃,所以作为子类的HashTable也渐渐被打入冷宫,所以慎用
  • LinkedHashMap:与HashSet和LinkedHashSet的关系类似。
  • TreeMap:TreeMap比HashMap多实现了NavigableMap和SortedMap这两个接口。字面上的理解就知道比HashMap多了键排序和搜索的能力,主要是用于排序

Java集合的小总结,后续会详细学习各集合的具体用法。

蜗牛速度般的学习,慢牛般的成长-

更多文章欢迎关注公众号“三横兰”

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:44:52  更:2021-10-23 12:46:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:57:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码