之前在学习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既能保证数据不重复,又能保证插入检索一致。

编程基础系列--之--浅谈List、Set、Map和泛型(一)——单列集合的更多相关文章

  1. 【ASP.NET MVC系列】浅谈数据注解和验证

    [ASP.NET MVC系列]浅谈数据注解和验证   [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google C ...

  2. 【.Net基础二】浅谈引用类型、值类型和装箱、拆箱

    目前在看CLR via C#,把总结的记下来,索性就把他写成一个系列吧. 1.[.Net基础一] 类型.对象.线程栈.托管堆运行时的相互关系 2.[.Net基础二]浅谈引用类型.值类型和装箱.拆箱 引 ...

  3. 【Fiori系列】浅谈SAP Fiori的设计美感与发展历程

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[Fiori系列]浅谈SAP Fiori的设计美 ...

  4. 【公众号系列】浅谈SAP项目管理的技能

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[[公众号系列]浅谈SAP项目管理的技能   写 ...

  5. linux高级编程基础系列:线程间通信

    linux高级编程基础系列:线程间通信 转载:原文地址http://blog.163.com/jimking_2010/blog/static/1716015352013102510748824/ 线 ...

  6. Spring5.0源码学习系列之浅谈BeanFactory创建

    Spring5.0源码学习系列之浅谈BeanFactory创建过程 系列文章目录 提示:Spring源码学习专栏链接 @ 目录 系列文章目录 博客前言介绍 一.获取BeanFactory主流程 二.r ...

  7. 【ASP.NET MVC系列】浅谈表单和HTML辅助方法

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  8. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  9. 【ASP.NET MVC系列】浅谈NuGet在VS中的运用

    一     概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...

随机推荐

  1. Java逻辑思维训练题

    两柱香问题题目:有两柱不均匀的香,每柱香燃烧完需要1个小时,问:怎样用两柱香切出一个15分钟的时间段?这个题的重点就是怎么切. 答案:将甲香的一头点着,将乙香的两头点着,当乙香燃烧完时,说明已经过了半 ...

  2. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

  3. 阿里云“网红&quot;运维工程师白金:做一个平凡的圆梦人

    他是阿里云的一位 P8 运维专家,却很有野心得给自己取花名“辟拾(P10)”:他没有华丽的履历,仅凭着 26 年的热爱与坚持,一步一个脚印踏出了属于自己的技术逆袭之路:他爱好清奇,练就了能在 20 秒 ...

  4. JDBC 数据源

    概述 JNDI 数据源配置的相关内容已经在 JNDI 资源文档中详细介绍过.但从 Tomcat 用户的反馈意见来看,有些配置的细节问题非常棘手. 针对常用的数据库,我们已经给 Tomcat 用户提供了 ...

  5. HBase写过程详解

    1首次读写流程图 2 首次写基本流程 (1)客户端发起PUT请求,Zookeeper返回hbase:meta所在的region server (2)去(1)返回的server上,根据rowkey去hb ...

  6. git之github解决冲突

    1.先创建一个txt文件,并进行编辑 2.然后推送到github,过程看之前的教程. 3.在另一个文件夹拉取(用小乌龟拉取),分别在克隆文件夹和原本文件夹操作test.txt. 4.把本体推送给服务器 ...

  7. lombok工作原理分析

    在Lombok使用的过程中,只需要添加相应的注解,无需再为此写任何代码.但是自动生成的代码到底是如何产生的呢? 核心之处就是对于注解的解析上.JDK5引入了注解的同时,也提供了两种解析方式. 运行时解 ...

  8. Controller中页面跳转完后页面的样式全消失的解决办法

    问题的原因应该是在controller中进行页面跳转时当前文件的路径变了 解决办法: 1.在jsp页面中<%@ page language="java" contentTyp ...

  9. Vim编辑器Go简单入门

    今天是一次做Go的笔记,一开始直接打开Github上的Go项目然后跑到Wiki位置,然后作者列出了一堆学习Go的资料,这里我 以第一个学习资料https://tour.golang.org/作为Go学 ...

  10. react项目使用antd

    在开始实践之前要确保搭建React单页面开发环境,如果还没有搭建好开发环境的朋友请移步到如何搭建React单页面开发环境. 首先在命令行模式下创建一个React项目(项目名使用小写字母命名):(win ...