java基础—集合类
java集合框架包含两种类型的容器,一种是集合collection,另一种是图map。集合collection有三种子类型set,list,Queue。
set
set是一种无序且不包含重复元素的collection,set最多只有一个null
HashSet
HashSet是由哈希表实现,数据是无序的,只能放入一个null,其底层是hashMap,只使用了HashMap的key来存放数据。HashSet要求放入的对象必须实现hashcode方法,放入的对象是以hashcode码作为标识的,相同内容的String对象,hashcode相同,所以放入的内容不能相同,但同一个类的对象可以放入不同的实例。
HashSet中保证元素唯一的hashcode和equals方法进行判断。如果hashcode不同,则不用判断equals直接存在hashset中,如果hashcode相同,则需要用equals判断,相同则不存,不相同则存储。
TreeSet
TreeSet底层是自平衡的排序二叉树,可以保证快速检索指定节点。保证数据唯一性的方法是根据比较方法返回的结果是否为0,为0则相同,不加入TreeSet,不为0则为不同元素,进行存储,所以要求加入TreeSet的对象类要实现Comparable接口,否则会抛出异常。
TreeSet对元素的排序方式:
1)自然排序:元素本身具有排序功能,实现Comparable接口,重写compareTo方法
2)比较器排序:元素不具备排序功能,实现Comparator接口,覆盖compare方法
compareTo和compare方法
compareTo是java.lang.Comparable< T >接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable< T >接口,重写compareTo方法。
它强行将实现它的每一个接口进行整体排序------称为自然排序,实现此接口的对象列表和数组可以用Collections.sort和Arrays.sort进行自动排序。
只要实现了这个接口,其对象就拥有了排序能力,是一种内部排序方式,通过实现它唯一的方法compareTo。
compare是java.util.Comparator< T > 接口中的方法,实际上用的是待比较对象的compareTo方法,主要是针对一些没有比较能力的对象,为他们实现比较的功能,所以叫做比较器,是一种外部的东西,通过它定义比较的方式,再传到Collections.sort()和Arrays.sort()中对目标排序,而且通过自身的compare方法定义比较的内容和结果的升降序
List<String> list = Arrays.asList("hello", "world", "welcome", "nihao");
//按照字母排序
Collections.sort(list);
System.out.println(list);
//按照字符串的长度.
Collections.sort(list, (item1, item2) -> item1.length() - item2.length());
System.out.println(list);
//按照字符串的长度降序排序.
Collections.sort(list, (item1, item2) -> item2.length() - item1.length());
list
list是有序的collection,能够精确控制每个元素插入的位置,用户能够使用索引(元素在list中的位置,类似数组中的下标)来访问list中的元素,类似于java的数组。
list允许有相同的元素,常用的实现类:Arraylist,linkedlist,Stack和vector
list的3种遍历方式
for(int i=0;i<