今天复习了下集合框架部分的知识,根据平时打的一些笔记,总结了集合框架的知识。
Collection定义了集合框架的共性功能。集合中存贮的都是对象的引用(地址),而不是对象实体。
Collection
List:元素是有序的,元素可以重复。因为该集合体系有索引。
ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。如果不是频繁操作增删的动作,我们建议使用ArrayList
LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。必须是唯一的。Set集合的功能和Collection是一致的。
HashSet:底层数据结构是哈希表。是线程不安全的,不同步, 它是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashcode值不同,就不会调用equals。
对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
ArrayList,对于判断元素是否存在,以及删除等操作,依赖的方法只有equals方法。原因是数据结构不同依赖的方法不一样。
通常我们在自定义一个对象的时候,通常是要复写equals方法和HashCode方法。有可能这个对象要存到HashSet当中;你不复写他也有而这个有都是根据地址值来判断的地址值肯定都不一样所以肯定是挂的。
一般开发的时候只要描述一件事物需要往集合里边存的时候建的对象一般都是要复写Hashcode和equals。
TreeSet:可以对Set集合中的元素进行排序。底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法return 0.但凡返回值为0 他会认为是相同元素。和哈希值没关系,如果treeSet 删除元素判断元素是否包含走的都是 comparetTo
TreeSet排序的第一种方式:让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。这种方式也成为元素的自然顺序,或者叫做默认顺序。元素一定义完,他就具备比较性了和字符串一样一旦被定义出来他就是按照字典的方式排序
TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。这两种方法原理都是二叉树。
当主要条件相等时,我们要比较次要条件,java当中很多对象自身就具备比较性就是因为实现了compare这个方法这俩哥们比较完之后也是整数负数和0;
Collection的方法:
1,添加 add(e); addAll(collection); 方法的参数类型是object 以便接收任意类型的对象
2,删除remove(e); removeAll(collection); clear();
3,判断。contains(e); isEmpty();
4,获取 iterator(); size();
5,获取交集。retainAll();
6,集合变数组。toArray();
迭代器:
其实就是集合的取出元素的方式
List:特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增 add(index,element); addAll(index,Collection);
删 remove(index);
改 set(index,element);
查 get(index): subList(from,to); ListIteratorlistIterator();
int indexOf(obj):获取指定元素的位置。
List集合特有的迭代器。ListIterator是Iterator的子接口。在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以,在迭代器使用时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。
.
List集合判断元素是否相同,依据的是元素的equals方法,Object中的eqauls方法,equals是比较地址值的。字符串的equals的方法是比较字符串内容的。
List:除了有Collection的方法之外还有特有的方法:
addFirst(); addLast();
getFirst(); getLast();
获取元素但是不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst(); removeLast();
获取元素,但是元素被删除,如果集合中没有元素,会出现NoSuchElementException
LinkedList可以不用迭代器也不用遍历把元素都取出来,特有的。
while(!link.isEmpty())
{
sop(link.removeLast());
}
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。键是唯一的不能重复的,而值是可以重复的。
1添加
put(K key, V value) 他没有add他的存使用put,添加元素。添加的时候,相同的键,那么后添加的会覆盖原有键对应值,put方法会返回被覆盖的值。
putAll(Map<? extends K,? extends V>m)
2,删除:clear() ;remove(Objectkey)
3,判断。containsValue(Object value) ;containsKey(Object key);
isEmpty()
4,获取。
get(Object key) 给我一个Key 我给你一个值
size()
values() 把所有的值都拿出来
entrySet()
keySet()
Map
Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低一般元老级都是线程同步的。
HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。HashMap是无序的。这也是Hash结构的特点。
TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
Map和Set很像,其实Set底层就是使用了Map集合。
注意:Collecttion 是单列集合,Map是双列集合。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
Map集合的两种取出方式:
1.Set<k> keySet:将map中所有的键存入到Set集合。Map没有迭代器,而set具备迭代器。所以可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。
2.Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry是用与表示关系的数据类型。
Collections
他是集合框架的工具类。里面定义的都是静态方法。
Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。它有两个常用的子接口:
List:对元素都有定义索引,有序的,可以重复元素。list是不可以排序的,他没有直接排序的方式。、
Set:不可以重复元素。无序。
Collections是集合框架中的一个工具类。该类中的方法都是静态的,提供的方法中有可以对list集合进行排序,二分查找等方法。list是不可以排序的,他没有直接排序的方式。
---------------------- android培训 、 java培训 、期待与您交流! ----------------------