Java集合类关系图
集合类概述
为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。
数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
Collection接口概述
Collection接口概述
Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
Collection接口成员方法
boolean add(E e)
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)
Object[] toArray() 把集合转成数组,可以实现集合的遍历
Iterator iterator() 迭代器,集合的专用遍历方式
Iterator接口概述
Iterator接口概述
对 collection 进行迭代的迭代器
依赖于集合而存在
Iterator接口成员方法
boolean hasNext()
E next()
List接口概述
List接口概述
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
与 set 不同,列表通常允许重复的元素。
List接口成员方法
void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
ListIterator listIterator()
ListIterator接口的成员方法
boolean hasPrevious()
E previous()
常见数据结构
栈
队列
数组
链表
树
哈希表
ArrayList类概述及使用
ArrayList类概述
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector类概述及使用
Vector类概述
底层数据结构是数组,查询快,增删慢
线程安全,效率低Vector类特有功能
public void addElement(E obj) public E elementAt(int index) public Enumeration elements()
LinkedList类概述及使用
LinkedList类概述
底层数据结构是链表,查询慢,增删快
线程不安全,效率高LinkedList类特有功能
public void addFirst(E e)及addLast(E e) public E getFirst()及getLast() public E removeFirst()及public E removeLast()
泛型概述及使用
1:泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行。
也被称为参数化类型,可以把类型当作参数一样传递过来,在传递过来之前我不明确,但是在使用的时候我就用明确了。
2:泛型的好处
A:提高了程序的安全性
B:将运行期遇到的问题转移到了编译期
C:省去了类型强转的麻烦
泛型由来
为什么会有泛型呢?
早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。
泛型应用
泛型类
把泛型定义在类上
格式:public class 类名<泛型类型1,…>
注意:泛型类型必须是引用类型泛型方法
把泛型定义在方法上
格式:public <泛型类型> 返回类型 方法名(泛型类型 .)泛型接口
把泛型定义在接口上
格式:public interface 接口名<泛型类型1…>
泛型高级(通配符)
泛型通配符
<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
? extends E
向下限定,E及其子类
? super E
向上限定,E及其父类
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
public class CollectionDemo {
public static void main(String[] args) {
Collection<?> c1 = new ArrayList<Animal>();
Collection<?> c2 = new ArrayList<Dog>();
Collection<?> c3 = new ArrayList<Cat>();
Collection<?> c4 = new ArrayList<Object>();
Collection<? extends Animal> c5 = new ArrayList<Animal>();
Collection<? extends Animal> c6 = new ArrayList<Dog>();
Collection<? extends Animal> c7 = new ArrayList<Cat>();
// Collection<? extends Animal> c8 = new ArrayList<Object>();
Collection<? super Animal> c9 = new ArrayList<Animal>();
// Collection<? super Animal> c10 = new ArrayList<Dog>();
// Collection<? super Animal> c11 = new ArrayList<Cat>();
Collection<? super Animal> c12 = new ArrayList<Object>();
}
}
增强for概述及使用
增强for概述
简化数组和Collection集合的遍历
格式:
for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可,该变量就是元素 }
好处:简化遍历
注意事项:增强for的目标要判断是否为null
静态导入概述及使用
静态导入概述
格式:import static 包名….类名.方法名;
可以直接导入到方法的级别注意事项
方法必须是静态的
如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。
可变参数概述及使用
可变参数概述
定义方法的时候不知道该定义多少个参数
格式
修饰符 返回值类型 方法名(数据类型… 变量名){}
注意:
这里的变量其实是一个数组
如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个Arrays工具类中的一个方法
public static <T> List<T> asList(T... a)
Set接口概述
Set接口概述
一个不包含重复元素的 collection。
HashSet类概述
HashSet类概述
不保证 set 的迭代顺序
特别是它不保证该顺序恒久不变。HashSet如何保证元素唯一性
底层数据结构是哈希表(元素是链表的数组)
哈希表依赖于哈希值存储
添加功能底层依赖两个方法:
1.int hashCode()
2.boolean equals(Object obj)
LinkedHashSet类概述
LinkedHashSet类概述
元素有序唯一
由链表保证元素有序
由哈希表保证元素唯一
TreeSet类概述
TreeSet类概述
使用元素的自然顺序对元素进行排序
或者根据创建 set 时提供的 Comparator 进行排序
具体取决于使用的构造方法。TreeSet是如何保证元素的排序和唯一性的
底层数据结构是红黑树(红黑树是一种自平衡的二叉树)
Collection集合总结
Collection
List
ArrayList
Vector
LinkedListSet
HashSet
TreeSet
Map接口概述
Map接口概述
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构值针对键有效,跟值无关
Collection集合的数据结构是针对元素有效
Map接口成员方法
V put(K key,V value)
V remove(Object key)
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
int size()
V get(Object key)
Set<K> keySet()
Collection<V> values()
Set<Map.Entry<K,V>> entrySet()
Map集合遍历
方式1:根据键找值
获取所有键的集合
遍历键的集合,获取到每一个键
根据键找值方式2:根据键值对对象找键和值
获取所有键值对对象的集合
遍历键值对对象的集合,获取到每一个键值对对象
根据键值对对象找键和值
HashMap类概述
HashMap类概述
键是哈希表结构,可以保证键的唯一性
HashMap案例
HashMap<String,String> HashMap<Integer,String> HashMap<String,Student> HashMap<Student,String>
LinkedHashMap类概述
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
TreeMap类概述
TreeMap类概述
键是红黑树结构,可以保证键的排序和唯一性
TreeMap案例
HashMap<String,String> HashMap<Student,String>
Collections类概述和成员方法
Collections类概述
针对集合操作 的工具类
Collections成员方法
public static <T> void sort(List<T> list) public static <T> int binarySearch(List<?> list,T key) public static <T> T max(Collection<?> coll) public static void reverse(List<?> list) public static void shuffle(List<?> list)
集合总结
Collection
List
SetMap