------- android培训、java培训、期待与您交流! ----------
Collection
List:元素是有序的,元素可以重复。因为该集合体系有索引。
set:元素是无序的,元素不可以重复。
1.List:
ArrayList:底层是数组数据结构。特点:查询很快,但是增删稍慢。线程不同步
LinkedList:底层是链表数据结构。特点:增删很快,查询比较慢
Vector:底层是数组数据结构。线程同步,被ArrayList替代
(1).
特有方法:凡是可以操作角标的方法,都是该体系的特有方法。
增
add(index,element)、addAll(index,Collection)
删
remove(index)
改
set(index, element)
查
get(index)、subList(from, to)、listIterator()
(2).
List集合特有的迭代器---ListIterator(它是Iterator的子接口)
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生并发修改异常(ConcurrentModificationException)。所以在迭代时,只能用迭代器的方式操作元素。可是在Iterator中操作元素的方法是有限的,只能对元素进行判断、取出、删除操作。如果想要其他操作,如添加、修改等,就需要使用其子接口---ListIterator。
(3).
ArrayList:
集合中存储的都是对象的引用或者地址。
LinkedList:
特有方法:
addFirst()、addLast()
getFirst()、getLast():获得元素,但不删除元素。如果集合中没有元素,则会抛出
NoSuchElementException异常。
removeFirst()、removeLast():获得元素,并且删除元素。如果集合中没有元素,则会抛出
NoSuchElementException异常。
在jdk1.6中出现了替代方法。offerFirst()、offerLast()、peekFirst()、peekLast()、pollFirst()、pollLast()(如果集合中没有元素,会返回null)。
(4).
List集合判断元素是否相同,依据的是元素的equals方法。
即:contains()和remove()方法底层依赖的都是元素的equals方法。
2.Set
(1).
HashSet:底层数据结构是哈希表.
怎么保证HashSet中数据的唯一性呢?
在存储数据的时候,它是通过先调用hashCode()方法来比较各个哈希值是否相同。如果一些数据的hashCode值相同,则再调用equals()方法来比较对象是否相同。这两个对象都是在底层自动被调用的。(如果存储对象的话,可以重写hashCode和equals方法。存储对象的时候,重写hashCode()方法时,不要总是返回同一个值,这样最后总是通过euqals方法来完成比较,效率不是很高。比较好的方式是
public
int
hashCode(){
return
this
.
name
.hashCode() +
this
.
age
*27;
//这样写可以提高效率,不用每次都通过equals来比较
}
)
注:HashSet集合判断元素是否相同,或者删除元素,依据的是hashCode()和equals()方法。
(2).
a. TreeSet:可以对Set集合中的元素进行排序(默认排序方式按照字母表的Unicode值排序)。
b. 底层数据结构是二叉树(二叉树默认存取为从小到大)。
保证元素唯一性的依据:compareTo方法返回(可以重写compareTo方法)。
c. TreeSet排序方式:
第一种:让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。这种方式也称为元素的自然顺序,也叫做默认顺序。
第二种:当元素不具备比较性,或具备的比较性不是所需要的。这时需要让容器自身具备比较性。在容器初始化时,就具备比较性。定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
注:当两种比较方式都存在时,以比较器为主(定义比较器方法:定义一个类,实现Comparator接口,并且重写compare()方法)。
Map:
1.该集合存储键值对。一对一往里存,并且要保持键的唯一性。
2.Map取出方式
(1).keySet:将map中所有的键都存入Set集合中。因为Set具备迭代器,所以可以迭代方式取出所有的键,再根据get方法,取出每个键所对应的值。
(2).Set<Map.Entry<k,v>> entrySet:将Map集合中的映射关系存入到set集合中,而这个关系的数据类型就是Map.Entry。
示例:
Set<Map.Entry<String, String>> entry = map.entrySet();
Iterator<Map.Entry<String, String>> it = entry.iterator();
while
(it.hasNext()){
Map.Entry<String, String> me = it.next();
String key = me.getKey();
String value = me.getValue();
System.
out
. println(key+
", "
+value);
}
3.三个子类型:
Hashtable:底层是哈希表数据结构,不可以存入null键和null值。该集合是线程同步的,效率低。
HashMap:底层是哈希表数据结构,可以存入null键和null值。该集合是线程不同步的,效率高。
TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
4.Set集合底层就是运用了Map集合。
5.put(key, value):如果存入的两个值,它们的键相同。则第二次存入的键的值会覆盖第一次存入的值。分别打印两者的时候,被覆盖的值会返回null。
6.Map集合用与具有映射关系的数据