java基础05 集合

Posted tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础05 集合相关的知识,希望对你有一定的参考价值。

 

一、集合的由来?
我们学习Java,可以操作很多对象 ,存储 的容器有数组和StringBuffer,StringBuilder;
而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。
二、集合和数组的区别?
A:长度区别
数组固定
集合可变
B:内容区别
数组可以是基本类型,也可以是引用类型
集合只能是引用类型
C:元素内容
数组只能存储同一种类型
集合可以存储不同类型(其实集合一般存储的也是同一种类型)
三、集合的继承体系结构?
由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,
我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。

在学习集合类时,我们重点关注四个要点:

1、是否允许为null

2、是否有序(有序:指插入元素时,保持插入的顺序性,也就是先插入的元素优先放入集合的前面部分。 )

3、是否唯一,即是否允许相同数据

4、在多线程下是否安全

 

四、Collection的功能概述
Collection sc=new Collection();//错误,因为接口不能不能实例化;
Collection sc=new ArrayList();//正确做法;
A:添加功能 boolean add(E e);
B:删除功能 void clear();
C:判断功能 boolean isEmpty();
D:获取功能 boolean retainAll(Collection c);假设有两个集合AB,A对B做交集,最终的结果保存在A,B不变;
返回值表示的是A是否发生改变;
E:长度功能 int size();
F:交 boolean containsAll(Collection c);

G:把集合转数组(了解)Object[] toArray();

五、List的子类特点
ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。

(1)List的子类特点
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
(2)ArrayList
A:没有特有功能需要学习
(3)Vector
A:有特有功能
a:添加
public void addElement(E obj) -- add()
b:获取
public E elementAt(int index) -- get()
public Enumeration<E> elements() -- iterator()
(4)LinkedList
A:有特有功能
a:添加
addFirst()
addLast()
b:删除
removeFirst()
removeLast()
c:获取
getFirst()
getLast()

 

六、Set   无序,唯一

        LinkedHashSet类概述

    1、元素有序唯一

    2、由链表保证元素有序

    3、由哈希表保证元素唯一

   HashSet类概述

    1、不保证 set 的迭代顺序

    2、特别是它不保证该顺序恒久不变。

   TreeSet类概述

    1、使用元素的自然顺序对元素进行排序

    2、或者根据创建 set 时提供的 Comparator 进行排序

    3、具体取决于使用的构造方法。

    TreeSet是如何保证元素的排序和唯一性的

    底层数据结构是红黑树(红黑树是一种自平衡的二叉树)

七、Map 

TreeMap

TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

 

Hashtable

Hashtable与HashMap类似,Hashtable继承自Dictionary类,实现了Map接口,不同的是它不允许记录的键或者值为空;

和HashMap相比,Hashtable是线程同步的,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

而且Hashtable可以通过Enumeration去遍历。

 

LinkedHashMap

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

以上是关于java基础05 集合的主要内容,如果未能解决你的问题,请参考以下文章

Java基础05—数组

JAVA基础05 Java语言基础:数组

2021-05-16

2021-05-16

2021-05-16

2021-05-16