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

最新文章

  1. LoadRunner免费公开课,惠普金牌讲师亲授
  2. Linux进程间通信(七):消息队列 msgget()、msgsend()、msgrcv()、msgctl()
  3. 如何破解mac版UltraEdit?
  4. 关于c#调用c编译器
  5. [转]看懂ExtJS的API
  6. mydbtest文档
  7. Neutron分析(1)——简介
  8. python之ftplib库
  9. String定义与方法
  10. 【原创】一个复制本地文件到Hadoop文件系统的实例
  11. 启明星辰:安全管理平台(SOC)
  12. memset 初始化数组
  13. R1:创建Libevent库
  14. struts2 ActionSupport关联源码
  15. android studio 关闭SVN关联
  16. KNN分类算法补充
  17. The POM for XXX is invalid, transitive dependencies (if any) will not be available解决方案
  18. Beta阶段复审
  19. idea 与springboot 快捷键
  20. CSS----学习

热门文章

  1. Koa搭建简单服务器
  2. CKEditor配置,最适合新手两种方式详解。
  3. 【35.86%】【POJ 1962】Corporative Network
  4. P3810 陌上花开 CDQ分治
  5. boostrap-非常好用但是容易让人忽略的地方【4】:Font Awesome
  6. CentOS系统将UTC时间修改为CST时间方法
  7. Swagger Editor 本地搭建
  8. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])
  9. Jenkins配置QQ邮箱发送邮件
  10. 日期格式化跨年bug,是否与你不期而遇?