java集合基础知识

集合

集合总图

3个技术点

泛型:

定义:泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

举例: List list = new ArrayList();

T就是泛型,指list只能存储T类型的数据。

比较器:

Comparable(可比、堪比、可比较的)接口 ,
接口中只有一个方法 int compareTo(Object o)
只要我们某个类实现了该方法,我们自定义类的对象就具备了比较的功能。就可以使用Arrays.sort(Object[] os)进行排序了。
返回值是一个大于0 或者小于0 或者等于0 的值,,
sort 方法会根据返回值 的符号位 进行是否交换位置的判断

所有可以进行排序的对象,必须实现Comparable接口。并按照某种规则(实现compareTo 方法) 实现排序。

局限性:只能按照某一种指定的规则进行排序。

内部比较器:要比较的类只要实现了comparable接口,就可以调用Arrays.sort();方法进行排序了。可以重写compareTo方法,自定义排序方法。
外部比较器:新建一个类实现comparator接口,在里面定义比较方法。就可调用此方法进行排序。

迭代器:

使用iterator()要求容器返回一个Iterator, Iterator将准备好返回序列的第一个元素;

使用next()获得序列中的下一个元素;

使用hasNext()检查序列中是否还有元素;

使用remove()将迭代器返回的元素删除.

举例: List l = new ArrayList();

for(iterator it = l.iterator();it.hasNext;){

System.out.println(it.next);

}

6个接口

Collection:

存储元素特点:无序、可重复。

常见方法:

删除:retainAll(Collection) removeAll(Collection) remove(Obj) clear() remove(index)

查看:isEmpty() contains(Obj) size() containsAll(Collection) indexOf(Obj) lastIndexOf(Obj)
get(index)

添加:add(Obj) addAll(Collection) add(index,Obj) addAll(index,Collection)

修改:set(index,Obj) trimToSize()

迭代:foreach for iterator (listiterator)

List:

存储元素特点:有序 可重复

常见方法:

删除:retainAll(Collection) removeAll(Collection) remove(Obj) clear() remove(index)

查看:isEmpty() contains(Obj) size() containsAll(Collection) indexOf(Obj) lastIndexOf(Obj)
get(index)

添加:add(Obj) addAll(Collection) add(index,Obj) addAll(index,Collection)

修改:set(index,Obj) trimToSize()

迭代:foreach for iterator (listiterator)

Set:

存储元素特点:无序 唯一的

常见方法:

删除:retainAll(Collection) removeAll(Collection) remove(Obj) clear() remove(index)

查看:isEmpty() contains(Obj) size() containsAll(Collection) indexOf(Obj) lastIndexOf(Obj)
get(index)

添加:add(Obj) addAll(Collection) add(index,Obj) addAll(index,Collection)

修改:set(index,Obj) trimToSize()

迭代:foreach iterator

Map:

存储元素特点:键值对(键:key 相当于Set,唯一的 值:value 相当于Collection 可重复)

常见方法:

添加:put(k,v)

删除:remove(k)

entrySet() value() ketSet() get(key)

迭代:

keySet()->[foreach/iterator]——>get(key)

entrySet()->[foreach/iterator]->getKey()/getValue()

iterator:实现了该接口的 可以作为foreach语句的目标

Listiterator:迭代器 List迭代器 正向/逆向迭代 并发操作

9个常用类

ArrayList:

底层实现方式:数组

优点:随机【根据索引】获取效率高

缺点:删除、添加效率低

LinkedList:

优点:底层数据结构是链表,查询慢,增删快

缺点:线程不安全,效率高

Vector:

优点:底层数据结构是数组,查询快,线程安全

缺点:增删慢;效率低,几乎已经淘汰了这个集合

HashSet:

优点:其底层其实是一个数组,存在的意义是加快查询速度

缺点:不能保证元素的顺序;不可重复;不是线程安全的;集合元素可以为 NULL

LinkedHashSet:

优点:不可以重复,有序,因为底层采用 链表 和 哈希表的算法。链表保证元素的添加顺序,哈希表保证元素的唯一性

缺点:底层采用了 哈希表算法以及 链表算法,既保证了元素的添加顺序,也保证了查询效率。但是整体性能要低于 HashSet

TreeSet:

优点:有序;不可重复,底层使用 红黑树算法,擅长于范围查询

缺点:不保证元素的添加顺序

TreeMap:

优点:Iterator遍历是排序的

缺点:插入、删除消耗性能,效率低

Arrays:

集合的工具类,可以更方便的使用集合。

常用方法:

asList方法:使用该方法可以返回一个固定大小的List

binarySearch方法:支持在整个数组中查找,以及在某个区间范围内查找

copyOf及copyOfRange方法:可以方便复制数组集合。

sort方法:可以方便排序。

toString方法:可以方便我们打印出数组内容。

Collections:

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。