目录
集合的划分:
集合从大的范围来说一共分为两类,一类是Collection接口定义的集合,一类是Map接口定义的集合。先说说大概区别,Collection接口定义的的集合,都是单列元素,每次只存储一个元素。而Map接口定义的集合每次存储元素都是成对存在的,它有着键和值(键可以理解成地址),并且里面的键的值不能重复,但是值可以重复。下面就具体说一下两个接口定义集合的区别:
Collection接口定义的集合:
可以使用迭代器
首先两个子接口,List接口和Set接口:
List接口定义的集合:
特点:元素有序,可以重复,带有索引
特有方法:
Link接口主要具体实现类:
ArrayList集合:存储结构为数组结构,元素增删慢,查找快
LinkedList集合:存储结构为链表结构,增删快,查找慢。
LinkedList需要了解的方法:
Set接口定义的集合:
特点:元素不重复,是否有序得看具体实现类。
Set接口具体实现类:
HashSet集合:
HashSet集合存储集合的结构是通过哈希表来存储的,哈希表则是由数组加链表加红黑树组成的,同时该集合保证元素唯一的方法是通过hasCode和equals方法来实现的,所以我们在存放自定义元素的时候就需要重写这两个方法来保证元素的唯一性(可以自动生成)。
LinkedHashSet集合:
因为HashSet集合里面的元素并没有顺序,所以在HashSet这个类有一个子类,也就是LinkedHashSet集合,这个集合里面的元素是有顺序的。它的实现原理是在HashSet的基础上加了一个双向链表用来记录添加的顺序。
TreeSet集合:
特点:
元素唯一、元素没有索引、可以使用自然排序方法或者通过Comparator比较器来自定义排序方法。
Map接口定义的集合:
HashMap集合:
存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
LinkedHashMap集合:
HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
TreeMap集合:
底层结构一样是红黑树,可以对元素的键来进行排序,排序方式也是两种,一种是自然排序,另一种就是通过自定义的比较器来排序。其余的与上述Map集合并无太大区别。
Map集合遍历的方法:
一种是通过键来找值的方式,先得到每一个键的值用一个Set集合来存储,方法为keyset(),然后通过遍历该Set集合来获取每一个键所对应的值,方法用get(k key),另一种就是通过键值对对象来获取键值对对象的键和值,步骤就是先获取所有Entry对象,方法是public Set entrySet(),然后通过Entry里面的方法来得到键值和值,方法分别为getKey()和getValue()。
集合的工具类----Collections:
该类是用来对集合进行操作的,主要应用有下面几个方法:
public static void shuffle(List<?> list):打乱集合顺序。
但是只支持List集合。
public static <T extends Comparable<? super T>> void sort(List<T> list) 将集合中元素按照默认规则排序。
public static <T> void sort(List<T> list,Comparator<? super T> ) 将集合中元素按照指定规则排序。
public static <T> boolean addAll(Collection<T> c, T... elements) 往集合中添加一些元素。
这里主要一点区别:
Comparable:是让一个类具备比较排序的功能
Comparator:自己定义的一个比较器