zoukankan      html  css  js  c++  java
  • 编程基础系列之浅谈List、Set、Map和泛型(一)——单列集合

    之前在学习Java时对于泛型,集合的理解一直模模糊糊,随着时间的推移,对泛型和集合有了一些浅显的认知,打算写出来巩固一下,也希望各位大佬能指出理解不当之处,万分感谢!!!

    在Java语言中,集合分为两大体系:Collection和Map集合,这两大体系最大的区别在于——Collection是单列集合,Map是双列集合

    单列集合下有两个接口——List和Set,在List接口下有很多的实现类,我们在使用List和Set时候是通过它们的实现类来进行实例化的,比较常用的实现类应该是ArrayList集合和LinkedList集合

    简单说一下这两个集合的区别,ArrayList集合底层是通过数组来实现的,数组实现的特点是:查找快,增删慢LinkedList集合是通过链表来实现的,链表的特点是增删快,查找慢。

    这两个集合的共同点是:这两种实现方式都能保证它的存储和获取顺序是一致的。

    public class ListDemo01 {
        /*list集合的特点:
            有序:存储和取出的元素顺序一致
            可重复:存储的元素可以重复
         */
        public static void main(String[] args) {
            //创建集合对象
            List<String> list = new ArrayList<String>();
    
            //添加元素
            list.add("hello");
            list.add("java");
            list.add("word");
            list.add("word");
            //输出集合对象
    //        System.out.println(list);
            //迭代器方法遍历list集合
            Iterator<String> it = list.iterator();
            while (it.hasNext())
            {
                System.out.println(it.next());
            }
    
        }
    }

    结果是这样:

    Set接口下比较常用的实现类是HashSet和LinkedHashSet

    从名字我们可以看出,Set集合是通过Hash表来实现的,Hash表的特点是保证数据的不可重复性,也就是说Set集合是不能存储重复元素的。通过了解Hansh的存储方式我们也会知道,通过Hash来存储数据,我们存进去的数据顺序和读出来的数据顺序是不一致的。这也是Set接口和List接口的一个区别。

    import java.util.HashSet;
    import java.util.Set;
    
    /*
    Set集合的特点:
        不包含重复元素的集合
        没有带索引的方法,所以不能使用普通for循环遍历
     */
    public class SetDemo {
        public static void main(String[] args) {
            //创建集合对象
            Set<String> set = new HashSet<String>();
    
            //添加元素
            set.add("Hello");
            set.add("world");
            set.add("Java");
    
            //遍历
            for (String s :set)
            {
                System.out.println(s);
            }
        }
    }

    结果是这样:

    但凡事也会有例外,在Set集合下有一个实现类是可以保证插入顺序与检索顺序一致的,这个实现类就是LinkedHashSet,为什么它能呢?

    它的底层是通过链表加Hash来实现的,Hash保证数据的不重复性,链表保证数据插入检索的一致性

    import java.util.LinkedHashSet;
    
    /*
    LinkedHashSet是由哈希表跟链表来实现Set集合的,又因为Set是不能重复的和存储读取不一致的,所以,这个是对它的一个改进,不能存重复值,是由Hash表来保证的,同时又能进行
    存储和读取一致,这是由链表来保证的
     */
    public class LinkedHashSetDemo {
        public static void main(String[] args) {
            //创建集合对象
            LinkedHashSet<String> LinkHashSet = new LinkedHashSet<String>();
    
            //添加元素
            LinkHashSet.add("hello");
            LinkHashSet.add("word");
            LinkHashSet.add("Java");
    
            //遍历结合
            for (String s : LinkHashSet)
            {
                System.out.println(s);
            }
        }
    }

    运行结果:

    这就是我对于单列集合的理解,总结一下就是:Collection下有List和Set接口,这俩接口下最常用的实现类是ArrayList集合和LinkedList、HashSet和LinkedHashSet,其中这里面list的两个实现类中ArrayList是数组实现,便于查找,LinkedList用链表实现,便于插入删除。Set的两个实现类中HashSet是通过Hash表来实现的,能保证数据的不重复性,但是不能保证数据插入检索顺序一致。LinkedHashSet既能保证数据不重复,又能保证插入检索一致。

  • 相关阅读:
    [转]给明年依然年轻的我们:欲望、外界、标签、天才、时间、人生目标、现实、后悔、和经历
    sql server 2005/2008 加密存储过程解密脚本/软件推荐
    将所有程序最小化到系统托盘RBTray strokeit TrayEverything
    [转]LeftLeaning RedBlack Tree
    emulator for the MIX computer (TAOCP)
    [转]Kindle电子书资源网站汇总
    鼻炎、鼻窦炎可尝试药膳
    C# 获取机器码(转)
    为输入提供动态提示框
    ProcessDialogKey 方法实现回车自动换行
  • 原文地址:https://www.cnblogs.com/Xiaomoml/p/11961147.html
Copyright © 2011-2022 走看看