集合
集合总图
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下的类,它包含有各种有关集合操作的静态方法。