2021-04-07

一、集合的概念
对象的容器,用来存放数据的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能。

集合与数值的区别:

数组长度固定,集合长度不固定
数组中能存储基本数据类型和引用数据类型,而集合只能存储引用数据类型
二、Collection体系集合
所有单列集合的父接口。
特点:代表一组任意类型的对象,无序、无下标。
常用共性方法:

方法 描述
boolean add(Object obj) 添加一个对象数据
boolean addAll(Collection c) 将集合中的所有对象添加到此集合中
void clear() 清空此集合中的所有对象
boolean contains(Object obj) 检查此集合中是否包含o对象
boolean equals(Object o) 比较此集合 是否与指定对象相等
boolean isEmpty() 判断此集合是否为空
boolean remove(Object o) 在此集合中移除o对象
is size() 返回此集合中的元素个数
Object[] toArray() 将此集合转换为数组
图例:

1.List子接口:
特点:元素有序,并且有下标,可以有重复值.
实现类:
1.ArrayList集合
特点:底层数组结构,查询快,增删慢,效率高,线程不安全
常用方法:

方法 描述
void add(int index, Object o) 在index位置插入对象o。
boolean addAll(int index, Collection c) 将一个集合中的元素添加到此集合中的index位置。
Object get(int index) 返回集合中指定位置的元素
List subList(int fromIndex, int toIndex) 返回fromIndex和toIndex之间的集合元素
优点:
ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高。(内存中开辟的是连续的空间)
缺点:
因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。
2.LinkedList集合:
特点:底层是链表结构,增删快,查询慢,线程不安全.
常有特有方法:

方法 描述
void addFirst(E e) 将指定元素插入此列表的开头。
void addLast(E e) 将指定元素添加到此列表的结尾。
E getFirst() 返回此列表的第一个元素。
E getLast() 返回此列表的最后一个元素。
优点:
LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。LinkedList 适用于要头尾操作或插入指定位置的场景.
缺点:
因为LinkedList要移动指针,所以查询操作性能比较低。
3.Vector集合:
特点:数组结构实现,查询快、增删慢,线程安全,运行效率比ArrayList较慢.
4.ArrayList和LinkedList区别:

ArrayList存储结构是数据,查找、遍历效率高。
LinkedList存储结构是双向链表,删除、添加效率高。
2.Set集合:
特点:元素无序,无下标,元素不可重复
遍历方式:a.使用foreach循环遍历。 b.使用Iterator迭代器
实现类:
1.HashSet:
特点:
底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的,如果没有重写这两个方法,则无法保证元素的唯一性。

基于HashCode实现元素不重复。
当存入元素的哈希码相同时,会调用==或equals进行确认,结果为true,拒绝后者存入。
注意方向:
根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步。
再执行equals方法,如果equals方法为true,则认为是重复,否则,形成链表。
JDK1.8引入红黑树,提高效率。
2.LinkedHashSet
链表实现的HashSet,按照链表进行存储,即可保留元素的插入顺序,线程不安全
3.TreeSet
底层数组结构采用二叉树来实现,实现了SortedSet接口,对集合元素自动排序。
排序方法:

存储元素对象实现Comparable接口,重写compareTo()方法.(自然排序)
TreeSet初始化时候传入一个实现Comparator接口的比较器对象,或者采用匿名内部类的方式new一个Comparator对象,重写里面的compare()方法;(比较器排序).
三、Map
Map集合用于保存映射关系的数据,即保存的都是键值对数据(key和value)其中key不可重复,value可重复,可通过key找到对应的value值.
关系示意图:

1.HashMap
线程不安全,运行效率快。允许用null 作为key或是value。
2.TreeMap
实现了SortedMap接口(Map的子接口),可以对key自动排序,Key需实现Comparable接口。
3.Hashtable
线程安全,运行效率慢;不允许null作为key或是value。
4.Properties :
Hashtable的子类,要求key和value都是String。通常用于配置文件的读取。(配置文件)

四、小结
Array,联想下标。底层数据结构是数组,查询快,增删慢,
Linked,联想两个特殊方法first,last。底层数据结构是链表,查询慢,增删快。
Hash,联想到两个重写方法hashCode,equals.底层数据结构是哈希表。
Tree,底层数据结构是二叉树。两种方式排序:Comparable,Comparator。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值