2021-01-15

一 集合的概念
集合类统一封装在java.util包中,是一个用来存放对象的容器。它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。

二 集合的体系框架
1.三大接口: Iterator(迭代器)、Collection(集合)、Map。
2.Iterator:
1)Iterator接口用来遍历集合当中的元素,有hashNext()、next()、remove()三个处理集合的方法;
2)ListIterator接口继承Iterator接口,在它的基础上又添加了三种处理集合的方法,分别为:add(),previous(),hasPrevious()等。
3)使用方法:
如: List list = new ArrayList<>(); Iterator it = list.listIterator();

3.Collection接口
3.1 概念:
Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。
3.2 构造方法:Collection col = new ArrayList<>();
3.3 常用方法:
(1)add​(E e):确保此集合包含指定的元素。
(2)addAll​(Collection<? extends E> c):将指定集合中的所有元素添加到此集合中。 如果在操作正在进行时修改了指定的集合,则此操作的行为是不确定的。
(3)clear() 从此集合中删除所有元素。
(4)boolean equals​(Object o) 将指定对象与此集合进行比较以获得相等性。
(5)Iterator iterator() 返回此集合中元素的迭代器。
(6)boolean remove​(Object o) 从此集合中移除指定元素的单个实例(如果存在)(可选操作)。
(7)int size() 返回此集合中的元素数。
(8) T[] toArray​(T[] a) 返回一个包含此collection中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。

3.4 List 接口
(1)概念:List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。
(2)构造方法: List list = new ArrayList<>();
(3)常用方法:
1)void add​(int index, E element) 将指定元素插入此列表中的指定位置。
2)boolean addAll​(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到指定位置的此列表中。
3)boolean contains​(Object o) 如果此列表包含指定的元素,则返回 true 。
4)E get​(int index) 返回此列表中指定位置的元素。
5)int indexOf​(Object o) 返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。
6)boolean isEmpty() 如果此列表不包含任何元素,则返回 true 。
7)E remove​(int index) 删除此列表中指定位置的元素(可选操作)。
8)E set​(int index, E element) 用指定的元素替换此列表中指定位置的元素(可选操作)。
9)default void sort​(Comparator<? super E> c) 根据指定的Comparator引发的顺序对此列表进行排序。
10)List subList​(int fromIndex, int toIndex) 返回指定的 fromIndex (包含)和 toIndex (不包括)之间的此列表部分的视图。

3.4.1 LinkedList(链表)
(1)概念: 该类实现了List接口,允许有null(空)元素。主要用于创建链表数据结构。
(2)构造方法: LinkedList linkedList = new LinkedList<>();
(3)常用方法:
1)public void add(int index, E element):向指定位置插入元素。
2)public void add(String e):向链表中添加元素。
3)public void addFirst(E e):元素添加到头部。
3)public void addLast(E e):元素添加到尾部。
4)public E remove(int index):删除指定位置的元素。
5)public E get(int index):返回指定位置的元素。
6)E pop() 弹出此列表所代表的堆栈中的元素。
7)void push​(E e) 将元素推送到此列表所表示的堆栈上。

3.4.2 ArrayList
(1)概念:该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。
该类也是非同步的,在多线程的情况下不要使用。ArrayList 增长当前长度的50%,插入删除效率低。
(2)构造方法:ArrayList arrayList = new ArrayList<>();
(3)常用方法:
1)add():将元素插入到指定位置的 arraylist 中。
2)addAll():添加集合中的所有元素到 arraylist 中
3)get():通过索引值获取 arraylist 中的元素
4)indexOf():返回 arraylist 中元素的索引值
5)remove():删除 arraylist 里的单个元素
6)set():替换 arraylist 中指定索引的元素
7)sort():对 arraylist 元素进行排序
3.4.3 向量(Vector)
(1)向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。
(2)和数组一样,Vector对象的元素也能通过索引访问。
(3)构造方法:
1)创建一个默认的向量,默认大小为 10:Vector();
2)创建指定大小的向量: Vector(int size);
3)创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目:Vector(int size,int incr);
4)创建一个包含集合 c 元素的向量:Vector(Collection c);
(4)常用方法:
1)void add(int index, Object element):在此向量的指定位置插入指定的元素。
2)boolean add(Object o):将指定元素添加到此向量的末尾。
3)void addElement(Object obj):将指定的组件添加到此向量的末尾,将其大小增加 1。
4)boolean addAll(Collection c):将指定 Collection 中的所有元素添加到此向量的末尾,按照指定 collection 的迭代器所返回的顺序添加这些元素。
5)Object get(int index):返回向量中指定位置的元素。
6)int indexOf(Object elem):返回此向量中第一次出现的指定元素的索引,如果此向量不包含该元素,则返回 -1。
7)int capacity() 返回此向量的当前容量。
8)void copyInto​(Object[] anArray) 将此向量的组件复制到指定的数组中。
3.4.4 栈(Stack)
(1)栈(Stack)实现了一个后进先出(LIFO)的数据结构。
(2)构造方法: Stack();
(3)常用方法:
1)boolean empty():测试堆栈是否为空。
2)Object peek():查看堆栈顶部的对象,但不从堆栈中移除它。
3)Object pop( ):移除堆栈顶部的对象,并作为此函数的值返回该对象。
4)Object push(Object element):把项压入堆栈顶部。
5)int search(Object element):返回对象在堆栈中的位置,以 1 为基数。

3.5 Set
(1)概念:Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。 Set 接口存储一组唯一,无序的对象。
(2)构造方法:Set set = new HashSet<>();
(3)常用方法:
1)boolean add​(E e) 如果指定的元素尚不存在,则将其添加到此集合(可选操作)。
2)static Set copyOf​(Collection<? extends E> coll) 返回包含给定Collection的元素的 unmodifiable Set 。
3)boolean remove​(Object o) 如果存在,则从该集合中移除指定的元素(可选操作)。
3.5.1 HashSet
(1)概念:该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。
(2)构造方法: HashSet hashSet = new HashSet<>();
(3)常用方法:
1)boolean add​(E e) 如果指定的元素尚不存在,则将其添加到此集合中 。
2)Object clone() 返回此 HashSet实例的浅表副本:未克隆元素本身。
3)boolean contains​(Object o) 如果此set包含指定的元素,则返回 true 。
4)boolean remove​(Object o) 如果存在,则从该集合中移除指定的元素。
5)Iterator iterator() 返回此set中元素的迭代器。
3.5.2 TreeSet
(1)TreeSet是一个有序的集合,它的作用是提供有序的Set集合。它继承了AbstractSet抽象类,实现了NavigableSet,Cloneable,Serializable接口。TreeSet是基于TreeMap实现的,TreeSet的元素支持2种排序方式:自然排序或者根据提供的Comparator进行排序。
(2)构造方法:
1)TreeSet() 构造一个新的空树集,根据其元素的自然顺序进行排序。
2)TreeSet​(Comparator<? super E> comparator) 构造一个新的空树集,根据指定的比较器进行排序。
(3)常用方法:
1)E first() 返回此集合中当前的第一个(最低)元素。
2)E ceiling​(E e) 返回此set中大于或等于给定元素的 null元素,如果没有这样的元素,则 null 。
3)E floor​(E e) 返回此set中小于或等于给定元素的最大元素,如果没有这样的元素,则 null 。
4)boolean remove​(Object o) 如果存在,则从该集合中移除指定的元素。
5)E higher​(E e) 返回此集合中的最小元素严格大于给定元素,如果没有这样的元素,则 null 。
6)E lower​(E e) 返回此集合中的最大元素严格小于给定元素,如果没有这样的元素,则 null 。

Map
(1)概念:Map 接口存储一组键值对象,提供key(键)到value(值)的映射。
(2)构造方法:Map<Integer,String> map = new HashMap<>();
(3)常用方法:
1)void clear() 从此映射中删除所有映射(可选操作)。
2)boolean containsKey​(Object key) 如果此映射包含指定键的映射,则返回 true 。
3)boolean equals​(Object o) 将指定对象与此映射进行比较以获得相等性 。
4)V get​(Object key) 返回指定键映射到的值,如果此映射不包含键的映射,则返回 null 。
5)V put​(K key, V value) 将指定的值与此映射中的指定键相关联(可选操作)。
6)V remove​(Object key) 如果存在,则从该映射中移除键的映射(可选操作)。
7)default V replace​(K key, V value) 仅当指定键当前映射到某个值时,才替换该条目的条目。
4.1 HashMap
(1)HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
(2)构造方法:HashMap<Integer,String> hashMap = new HashMap<>();
(3)常用方法:
1)V put​(K key, V value) 添加键值对。
2)V get​(Object key) 返回指定键映射到的值,如果此映射不包含键的映射,则返回 null 。
3)Object clone() 返回此 HashMap实例的浅表副本:未克隆键和值本身。
4)V remove​(Object key) 从此映射中删除指定键的映射(如果存在)。
4.2 TreeMap
(1)TreeMap中的元素默认按照keys的自然排序排列。
(2)构造方法:
1)TreeMap() 使用其键的自然顺序构造一个新的空树图。
2)TreeMap​(Comparator<? super K> comparator) 构造一个新的空树图,根据给定的比较器排序。
3)TreeMap​(Map<? extends K,​? extends V> m) 构造一个新的树映射,其中包含与给定映射相同的映射,根据其键的 自然顺序排序 。
4)TreeMap​(SortedMap<K,​? extends V> m) 构造一个包含相同映射的新树映射,并使用与指定有序映射相同的顺序。
(3)常用方法:
1)K ceilingKey​(K key) 返回大于或等于给定键的 null键,如果没有这样的键,则 null 。
2)K firstKey() 返回此映射中当前的第一个(最低)键。
3)K floorKey​(K key) 返回小于或等于给定键的最大键,如果没有这样的键,则 null 。
4)K higherKey​(K key) 返回严格大于给定键的最小键,如果没有这样的键,则返回 null 。
5)K lastKey() 返回此映射中当前的最后一个(最高)键。
6)V remove​(Object key) 如果存在,则从此TreeMap中删除此键的映射。
7)SortedMap<K,​V> subMap​(K fromKey, K toKey) 返回此映射部分的视图,其键的范围从 fromKey (包括 toKey )到 toKey (独占)。

4.3 Hashtable
(1)Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。
(2)构造方法:
1)Hashtable() 使用默认初始容量(11)和加载因子(0.75)构造一个新的空哈希表。
2)Hashtable​(int initialCapacity) 使用指定的初始容量和默认加载因子(0.75)构造一个新的空哈希表。
3)Hashtable​(int initialCapacity, float loadFactor) 使用指定的初始容量和指定的加载因子构造一个新的空哈希表。
4)Hashtable​(Map<? extends K,​? extends V> t) 构造一个新的哈希表,其具有与给定Map相同的映射。
(3)常用方法:
1)protected void rehash() 增加此哈希表的容量并在内部重新组织,以便更有效地容纳和访问其条目。
2)V get​(Object key) 返回指定键映射到的值,如果此映射不包含键的映射,则返回 null 。
3)V put​(K key, V value) 将指定的 key映射到此哈希表中的指定 value 。

4.4 HashTable和HashMap区别
(1)继承的父类不同: Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。
(2)线程安全性不同: Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步,但使用HashMap时就必须要自己增加同步处理。(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。
(3)是否提供contains方法:
HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。
Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。
(4)key和value是否允许null值
其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。
Hashtable中,key和value都不允许出现null值。但是如果在Hashtable中有类似put(null,null)的操作,编译同样可以通过,因为key和value都是Object类型,但运行时会抛出NullPointerException异常,这是JDK的规范规定的。
(5)两个遍历方式的内部实现上不同
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值