黑马日记第七篇——集合

---------------------- android培训 、java培训、期待与您交流!----------------------

一、集合框架
集合框架是java提供的可定义对象,该对象有其他的对象组成。它是一个统一的可以代表和操作集合,并能对这些集合独立的进行操作的一些结构。优点是提高了编程效率、性能、和复用性。
java集合框架主要由一组用来操作对象的接口组成。不同的接口描述一组不同数据类型。在这些接口中Collection接口是层次结构中的根接口,常用的几口有:set接口、list接口和map接口。
为什么出现这些容器:每个容器对数据的存储方式都有不同,这种存储方式称为数据结构。
二、Collection
它是集合继承树的最顶层接口,声明了一些方法,这些方法都是集合框架中最基本的方法,其他接口也都继承了这些方法。
1,添加
boolean add(Object o):添加指定元素o到集合中。
boolean addAll(Collcetion c):将集合c中的所有元素添加到集合中。
2,获取
int size():获取集合的长度,即元素的个数。
Object[] toArray():将集合中元素以数组形式返回。 
<T> T[] toArray(T[] a) :将集合中元素以数组形式返回,反回的数组的数据类型与集合的数据类型一致。
3,删除
clear():清空集合。
boolean remove(Object o):删除集合中指定元素o。
boolean removeAll(Collection c):将集合中与集合c中元素相同的元素删除。
boolean retainAll(Collection c):将集合中与集合c中元素不同的元素删除,保留相同的。
4,获取
boolean isEmpty():判断集合是否为空。
boolean contains(Object o):判断集合是否包含元素o。
boolean containsAll(Collection c):判断集合是否包含c集合中所有元素。
5、其他
boolean equals(Object o):比较集合与指定对象o。
int hasCode():返回集合的哈希值整数表示形式。
Iterator iterator():返回集合迭代器,可用于遍历集合的元素。
三、List
注:除了从Collection中继承的方法外,凡是可以操作角标的方法都是该体系中特有方法。
1,添加
add(index,element):指定位置添加元素。
addAll(index,Collection):指定位置添加集合中所有元素。
2,删除
remove(index):删除指定位置的元素。
3,修改
set(index,element):将某一位置元素改为传入的参数。
4,获取
Object get(index):获取该索引位置的元素。
List subList(from,to):获取从指定索引位置之间的元素,返回一个新的List集合。
int indexOf(Object):根据已知元素返回其在列表中第一次出现的位置,如果不存在则返回-1。
int lastIndexOf(Object):根据已知元素反向查找其在列表中第一次出现的位置,如果不存在返回-1。
5,其他
Object[] toArray():将集合转换成一个Object类型数组,数组元素顺序与List集合中顺序一致。
6,列表迭代器
ListIterator是Iterator的子接口,它不仅集成了Iterator的方法(判断,取出,删除等)外,还具有其他方法(添加,修改等)。
该接口通过List集合的两种方法可以获取:
listIterator():返回迭代器。
listIterator(index):从指定位置开始,返回迭代器。、
注:List判断元素是否相同(remove、contains等)的依据是元素的equals方法,返回布尔值,可在自定义的类中覆写。
List有三个常用的实现类:
1,Vector:
底层使用数组数据结构,效率较低,功能与ArrayList相同,出现时间较早,与ArrayList不同之处为该类是线程同步的。一般无特殊需要,尽量使用ArrayList集合。
Vector特有方法:枚举(Enumeration)。它与迭代器相同,后被迭代器取代。使用方法类似,通过elements方法获取。它包含两个方法:hasMoreElement()测试是否包含更多元素、nextElement()返回此枚举的下一个元素。
2,ArrayList
底层使用数组数据结构,查询效率较高,增删效率一般,线程是非同步的,该类是最为常用的。它的方法与List接口一致,另外它可以向其中添加包括null值在内的所有类型对象,甚至该类对象引用自己也可以作为其中的元素。
Object clone():返回此对象的复制对象。
trimToSize():将此 ArrayList 实例的容量调整为列表的当前大小。应用程序可以使用此操作来最小化 ArrayList 实例的存储量。  
3,LinkedList
底层使用双链表数据结构,增删效率高,查询效率一般、线程非同步。
add()、remove()、get():这三个方法在集合中元素为null时会抛出NoSuchElementException异常,在JDK1.6后出现了替代方法:
offer()、peek()、poll()。
四、Set
功能与Collection一致,元素是无序的(存入取出顺序不一定相同),元素不可重复。
Set集合有两个常用的实现类:
1,HashSet
底层数据结构是哈希表,线程非同步,Set接口最常用的实现,它保证元素唯一性的方法由两个方法完成:hashCode()和equals()。
如果hashCode值相同,判断equals是否为true。
如果hashCode值不同,不会调用equals方法。
注:对于判断元素是否存在以及删除元素,依赖的方法时元素的hashCode()和equals()方法。所以,可以通过复写hashCode()方法返回同一值,进而使用自定义的equals()方法。
2,TreeSet
底层数据结构是二叉树,线程非同步。可以对存入的元素进行自然排序(默认升序)。
排序方式一:让元素自身具备比较性,元素需要实现Comparable接口,并覆盖compareTo()方法。
排序方式二:如元素不具备比较性,或具备的不是所需的比较性时,可以通过传入比较器的方式让集合具备比较性。
Comparator:比较器,实现这个接口需要覆盖两个方法:compare(T o1,T o2)和equals(Object obj)
五、泛型
JDK1.5以后出现的新特性,用于解决安全问题,是一个安全机制。
什么时候定义泛型?
当类中要操作的引用数据类型不确定的时候,早期通过定义Object来完成扩展,现在可以通过定义泛型来完成扩展。
泛型类定义的泛型在整个类中有效,如果方法是用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就固定了。
如果不同方法操作不同类型,而且类型也不确定,那么可以将泛型定义在方法上,泛型方法不随泛型类设定而改变,泛型方法与泛型类互不冲突。
注:静态方法不可以访问类上定义的泛型,如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
泛型限定:
? extends E:可接受E以及E的子类(上限限定)。
? super E:可接受E以及E的父类(下限限定)。
六、Map
键值集合,存储键值对,键值一一对应,成对存入,而且保证键的唯一性。
1,添加
Object put(Key,Value):指定键值对存入集合并将其关联,如键已存在,则新值覆盖旧值,返回值。
putAll(Map):将已知键值集合中的键值对存入集合。
2,删除
clear():清空。
remove(Key):删除此键映射。
3,判断
containValue(value):判断是否包含此值的映射关系。
containKey(key):判断是否包含此键的映射关系。
isEmpty():判断该集合是否为空。
4,获取
Object get(key):返回此键映射的值。
int size():返回该集合键值对个数。
Collection values():返回该映射的所有值的Collection集合。
Set entrySet():返回此映射中包含的映射关系的Set集合。
Set keySet():返回此映射中包含的所有键的Set集合。
Map接口有三个常用实现类
1,HashTable
底层使用哈希表数据结构,不可存入null值,null键。线程同步,出现于JDK1.0。
2,HashMap
底层使用哈希表数据结构,允许存入null值,null键。线程非同步,出现于JDK1.2.
3,TreeMap
底层是二叉树数据结构,线程非同步。可用于给Map集合中键排序。
Map集合的两种取出方式:
1,keySet:将Map中所有的键存入到Set集合中,因为Set具备迭代器,所以可以以迭代方式取出所有的键,再根据get方法获取每一个键对应的值。
2,entrySet:将Map集合中的映射关系存入到set集合中,这个映射关系数据类型为:Map.Entry<K,V>
七、Collections
集合框架的工具类,与Collection区别:Collections方法都是静态的,提供对集合进行操作的方法。
八、其他
List Arrays类中的asList(T a):用于将数组变成List集合,可以使用集合的思想来操作数组。注:不可以使用集合的增删方法,因为数组长度固定。
toArray方法将集合变成数组,建议定义长度刚好的数组。但不必须。另外,将集合变成数组可以限制对元素的操作,不许进行增删。

---------------------- android培训 、java培训、期待与您交流!----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值