Java基础知识(JAVA集合框架之List与Set)

List和Set概述
数组必须存放同一种元素。
StringBuffer必须转换成字符串才能使用,如果想拿出单独的一个元素几乎不可能。
数据有很多使用对象存,对象有很多,使用集合存。

集合容器因为内部的数据结构不同有多种具体容器,不断的向上抽取就形成了集合框架。
框架的顶层就是Collection接口。

List:列表。元素可以重复,有序(存入和取出有特定的顺序)。List下有三个类比较常用:Vector、ArrayList、LinkedList。

Vector类。
Vector类自JDK1.0就出现了,它可以说是集合框架的元老级*。集合框架自JDK2.0出现以后,Vector类就加入了集合框架的队伍并归入了List旗下。Vector类的最大特点就是线程安全,这在整个集合框架中都是少见的。正是因为线程安全,所以执行效率低下,到了现在几乎已经废弃。即使在多线程编程中也不会使用它,而是使用ArrayList加锁代替。Vector内部是一个数组结构,并且是可增长的,步长为100%。Vector增删查询都很慢。

ArrayList类。
ArrayList类是为了替代Vector类而出现的,所以它的功能几乎和Vector类完全相同,但它是非同步的。ArrayList内部也维护了一个变长的数组,增长的步长为50%,查询速度很快。

LinkedList类。
LinkedList是List接口链接列表实现。也就是说我们说的链表。LinkedList最大的特点就是增删速度非常快。

LinkedList类概述。
LinkedList底层是链表数据结构,这就导致了它的内容在内存中并不是连续的。这也使得它增删速度快而查询速度慢。注意,LinkedList中存储的都是对象的地址,即引用,而非对象本身

ArrayList类概述。
ArrayList和Vector类几乎相同,略。
但需要注意的是,ArrayList中存储的是对象的引用,即地址,而非对象本身。如果ArrayList容器发生了al.add(3);这种情况,但是编译器并没有报错,不能认为是集合中可以存储基本数据类型,事实上在这个过程中发生了两件事:自动装箱以及上转型。这和Object obj=3;有着异曲同工之妙。

方法。略。
注意,虽然ArrayList略掉很多,但并不是说它不重要,只是因为方法中和List接口中的差不多,所以就不做介绍了。实际上在开发中最常使用的类就是ArrayList。

7.LinkedList和ArrayList都有get方法,有什么区别?
两者虽然都是List的子类,但是ArrayList的底层是数组数据结构,在内存中是连续的,所以使用get方法并不用从头开始查找;但是LinkedList底层是链表数据结构,即使使用了get方法,但是仍然需要从头开始查找。

Set:集合。元素不允许重复,无序(有时候有序,特别是经过特殊处理的时候比如在TreeSet中更是如此)。
一、Set概述。
Set集合的特点是元素不允许重复,而且是无序的(添加和取出的顺序不一致)。
Set接口中的方法和Collection接口中的方法几乎相同,略。
Set接口下常用的两个类:HashSet、TreeSet。

Collection
-> Set 无序不重复 -> 无序HashSet,需要排序TreeSet
-> List 有序可重复 -> 查,改ArrayList,增删LinkedList

List为列表,中在列表中的对象是由顺序的排序的,并且是有重复的对象。
简单为:有序,有重复。

Set为集合,在集合中的对象是不按照顺序排列的,并且是没有重复的对象的。
简单为:无序,无重复。

Set为无序集合,无序无重复;
List为有序集合,有序有重复;

Set                                          Map                                 算法
--------------------------------------------------------------------------
HashSet                                HashMap                        哈希表
TreeSet                                 TreeMap                          红黑树
LinkedHashSet                     LinkedHashMap             哈希表/链表
---------------------
作者:西门吹雪叶孤城
来源:CSDN
原文:https://blog.csdn.net/yangying496875002/article/details/73729290
版权声明:本文为博主原创文章,转载请附上博文链接!

上一篇:C语言核心之数组和指针详解


下一篇:c/c++指针详解(一)