Collection:
1、List:元素是有序的,元素可以重复。因为该集合体系有索引。
ArrayList:底层数据存储方式采用数组结构。特点:查询修改速度快,添加删除速度慢。
LinkedList:底层数据存储方式采用链表结构。特点:增删速度快,查询很慢。
特有方法:addFirst() addLast() getFirst() getLast() removeFirst() removeLast()
Vector:底层是数组数据结构,线程同步。
List集合判断元素是否相同,依据的是元素的equals方法。
2、Set:元素是无序,元素不可以重复。
HashSet:底层数据结构是哈希表。
HashSet是通过元素的两个方法,hashCode()和equals()来完成。如果元素的HashCode值相同,就判断equals是否为true,如果元素的HashCode值不同,不会调用equals();
TreeSet:可以对Set集合中的元素进行排序。底层数据结构是二叉树,保证元素唯一性的依据:compareTo 方法的返回值。
TreeSet排序的第一种方式:让元素自身具备比较性。元素需要实现Comparable接口,重写compareTo方法。
TreeSet排序的第一种方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性,让集合初始化时,就具备了比较方式:定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。
3、Map:每一个元素包含一对键对象和值对象,并且要保证键的唯一性。
Hashtable:底层是哈希表结构,不可以存入null键null值,线程同步。
HashMap:底层是哈希表结构,允许null键和null值,线程不同步。
TreeMap:底层是二叉树结构,线程不同步,可以用于给map集合中的键进行排序。
添加:put(),添加元素时,如果出现相同的键,那么后添加的值会覆盖原有的键对应值。并且put方法会返回被覆盖的值。
map集合的两种取出方式:
1,keySet:将map中所有的键存入到Set集合,因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是Map.Entry
一、List
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
1、增
add(index,element);
addAll(index,Collection);
2、删
remove(index);
3、改
set(index,element);
4、查
get(index);
subList(from,to);
listIterator(); ListIterator是Iterator的子接口,在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以,在迭代器中,只能对元素进行判断,取出,删除的操作。如果想要其他的操作,如添加、修改等,就需要使用其子接口,ListIterator.该接口只能通过List集合的listIterator方法获取。
二、泛型
JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制。
通常在集合框架中很常见,<>就是用来接收类型的。当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
泛型类定义的泛型,在整个类中有效。泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了,为了让不同方法可以操作不同类型,而且类型还不确定,可以将泛型定义在方法上。
特殊的是,静态方法不可以访问同类上定义的泛型,如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
?——通配符,也可以理解为占位符。
泛型的限定:
? extends E:可以接收E类类型或者E的子类型。
? super E:可以接收E类型或者E的父类型。
三、集合框架的工具类
Collections:sort() max() binarySearch() reverse() reverseOrder() swap() shuffle() Arrays
asList():将数组变成list集合,从而可以使用集合的思想和方法来操作数组中的元素。但是不可以使用集合的增删方法。因为数组的长度是固定的。如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。如果数组中的元素都是基本数据类型,俺么会将该数组作为集合中的元素存在。