Java集合
集合概述
Collection
一个一个存
-
List
有序集合,能够存重复的数据
-
Set
无序集合,不允许放重复的数据
主要继承结构图:
-
Iterable
接口:可迭代的里面有
iterator()
方法,返回一个Iterator
迭代器 -
Iterator
接口:迭代器里面有
hasNext()
、next()
、remove()
等方法。hasNext()
:判断集合中是否有下一个元素,有的话就返回true,否则返回falsenext()
:返回集合中的下一个元素remove()
:删除集合中最后一个元素 -
Collection
接口继承自Iterable
接口:集合所有的集合都要实现
Iterable
接口需要实现它里面的iterator()
方法然后得到迭代器,所以所有的集合都是可迭代的。 -
List
和Set
接口也都继承自Collection
接口LIst:有序可以重复
Set:无序不可重复
-
ArrayList
实现了List
接口ArrayList顾名思义底层采用的是数组来存储元素的,所以ArrayList集合适合查询,不适合频繁增删元素。因为数组存的都是一组相同数据类型的集合,在内存里是连续存储的,只是通过数组名的地址来指引,数组中的元素是连续内存地址排列的,如果按下标增加或者删除的话数组的地址就会发生偏移,但是查询就不会,查询因为内存地址连续,所以查询的效率就会提高。
-
LinkedList
实现了List
接口底层采用双向链表存储数据。适合增删元素,不适合查询。
-
Vector
实现了List
接口底层和ArrayList集合相同,但是Vector在多线程是安全的,效率较低,现在很少使用。
-
HashSet
实现了Set
接口底层是哈希表(又叫散列表)
-
SortedSet
继承了set
接口存进去的数据是无序且不可重复的,但是存储进去之后会自动按照元素大小排序
-
TreeSet
实现了SortedSet
接口
思路:
Collection
接口继承Iterable
(可迭代的)接口,实现里面的iterator()
方法,这个方法的返回Itertor
接口,利用返回的Iterator
接口里的hasnext()
判断是否有下一个元素,next()
返回下一个元素,remove()
删除其中的元素。- 其中
List
和Set
都继承Collection
接口,都能够实现上述方法。 ArrayList
、LinkedList
、Vector
实现了List
接口HashSet
实现了Set
接口,SortedSet
继承了Set
接口,而TreeSet
实现了SortedSet
接口
Map
一对一对存
-
Map
无序集合,集合中是用键值对(Key—Value)来存储的,键是无序不可重复的,在Map里起决定性作用的是键key,值只是key存的值而已。
主要继承结构图:
-
Map
是顶层接口Map里的数据都是key—value键值对来存储的
-
HashMap
实现了Map
接口HashMap里的key等同于set集合,无序且不能重复
-
Hashtable
实现了Map
接口线程是安全的,但是效率很低
-
Properties
继承了Hashtable
接口属性类,也是以key—value的方式存的,只是键和值都是字符串
-
SortedMap
继承了Map
接口存入的key是无序且不可重复的,但是存储的key可以自动排序,key等同于SortedSet
-
TreeMap
实现了SortedMap
里面的key就是一个TreeSet
集合实现类总结:
-
List
有序且可重复
有序:存入和取出的顺序一样,有下标
可重复:可以存储相同的数据
-
ArrayList
底层是数组;适合查询元素
-
LinkedList
底层是双向链表;适合增删元素
-
Vector
底层是数组;线程安全,但是效率不高;不常用
-
-
Set
无序且不可以重复
无序:存入和取出的顺序不一样,没有下标
不可重复:不可以存储相同的数据
-
HashSet
底层是HashMap;
-
TreeSet
实现了SortedSet;底层是TreeMap;能够排序
-
-
Map
key—value(键值对);键是无序且不可重复的
无序:存入和取出的顺序不一样
不可重复:不可以存储相同的数据
-
HashMap
底层是哈希表;
-
Hashtable
底层是哈希表;线程安全,效率不高;不常用
-
Properties
线程安全;键和值都是String类型
-
TreeMap
底层是二叉树;key能够自动排序
-
Collection接口
Collection接口继承自Iteratable接口,它的常用方法有以下这些:
方法 | 描述 |
---|---|
boolean add(E e) | 向集合末尾添加元素(object类型) |
void clear() | 移除这个集合中的所有元素(清空) |
boolean contains(Object o) | 如果集合中包含o元素,返回true |
boolean isEmpty() | 如果集合中不包含任何元素,返回true |
Iterator iterator() | 返回该集合的元素的迭代器 |
boolean remove(Object o) | 从集合中移除元素o(前提o元素存在) |
int size() | 返回此集合中元素的个数 |
object[] toArray() | 将该集合转换成Object数组 |
List集合接口和Set集合接口都需要实现上述方法,需要重点掌握contains()
、remove()
、iterator()
方法,需要注意的是集合中不能添加基本数据类型,而是添加的数据类型的引用。