黑马程序员——Java集合类

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

集合作为存储对象最常用的一种方式,与数组不同,它不固定长度,而且内部存储的数据类型可以不同。2个常用的集合容器有List和Set。collection中提供了许多集合类的共性方法。如下

add(E e) 将指定对象添加到集合中,而且其中参数是object类型。
remove(Object o) 将指定的对象从集合中移除,移除成功返回true,不成功返回false
contains(Object o) 查看该集合中是否包含指定的对象,包含返回true,不包含返回flase
size() 返回集合中存放的对象的个数。返回值为int
clear() 移除该集合中的所有对象,清空该集合。
iterator() 返回一个包含所有对象的iterator对象,用来循环遍历
toArray() 返回一个包含所有对象的数组,类型是Object
toArray(T[] t) 返回一个包含所有对象的指定类型的数组



List体系中元素是有序的,根据索引来存储数据,所以可以存相同元素。 特有的方法都是与索引有关的方法,擅长对元素进行随机访问。

ArrayList类实现与数组类似的数据结构,读取效率高,但是向列表中间插入和删除元素的时候比较慢。

List<String> list =new ArrayList<String>();

这里使用了1.5的新特性——泛型,定义一个只能存储String类型数据的列表,尖括号中的是参数类型,泛型给我们一个类型安全的集合。

add()方法用来向对象中添加元素,参数可以是基本数据类型或者对象。get()方法用来得到对象中的各个元素,参数为整型数据。size()用来获得对象的大小。remove()方法移除指定元素,参数可以int或者Object。clear()方法则是清空集合。ArrayList不具备排序功能,所以可以使用Collections类的sort方法使其排序,Collections.sort(list)。数组和List集合之间的转换也经常使用,数组转换成List使用Arrays类中的asList()方法,而List转换为数组则用List的toArray()方法。

LinkedList类中元素间是双链接的,提高了顺序访问的性能,在中间插入和删除元素的代价不高,但是随机访问效率较低。用LinkedList做一个栈或者队列,就要使用到它的特有方法,addFirst()和addLast(),getFirst()和getLast().。栈的特点是元素最后一个被压进栈就第一个被取出,即后进先出,而队列则是先进先出。


Set体系中的元素是无序的,存入和取出元素的顺序可以不一致,元素不可以相同。

HashSet类底层是哈希表结构,取数据时只能用迭代器来取。存储自定义对象,遇到相同元素时首先判断他们的哈希地址值,而每个对象都是new出来的,所以光用地址值判断相同元素可能存入,所以重写hashcode()方法使地址值判断,再使用自定义对象的equals方法来比较对象是否相同,保证HashSet中元素的唯一性。

TreeSet类底层是二叉树结构,可以对Set中的元素进行排序。第一种存储自定义对象方式,因为TreeSet会对元素进行排序,而自定义对象是不具备比较性的,这时就用到了一个接口:Comparable,使对象的类强制具备比较性,重写compareTo方法为类对象提供比较依据。保证元素唯一性的依据是compareTo方法返回0。第二种存储自定义数据的方式,当元素不具备比较性或者比较性不是想要的,这时就需要自己集合具备比较性。定义一个类实现comparator,覆盖其中的compare方法,并将该类的对象来构造TreeSet


Map体系存储有很大不同,它存储键值对,即key--value的形式,所有数据都是一对一对的存,而且要保证键的唯一性。Map不是collection接口的继承。

共性方法如下:put(Object key, Object value): 将互相关联的一个关键字与一个值放入该映像。如果该关键字已经存在,那么与此关键字相关的新值将取代旧值。方法返回关键字的旧值,如果关键字原先并不存在,则返回null

remove(Object key): 从映像中删除与key相关的映射

putAll(Map t): 将来自特定映像的所有元素添加给该映像

clear(): 从映像中删除所有映射

get(Object key): 获得与关键字key相关的值,并且返回与关键字key相关的对象,如果没有在该映像中找到该关键字,则返回null

containsKey(Object key): 判断映像中是否存在关键字key

containsValue(Object value): 判断映像中是否存在值value

size(): 返回当前映像中映射的数量

isEmpty() :判断映像中是否有任何映射

而map集合是不需要使用迭代器的,因为取键和值时有两个重要的方法,keySet()和entrySet()。原理是将map集合转成set集合,再通过迭代器取出。keySet(): 返回映像中所有关键字的视图集。entrySet(): 返回Map.Entry对象的视图集,即映像中的关键字/值对,在使用泛型时用到了泛型嵌套,Set<Map.Entry<String,String>> entryset=map.entrySet();

在使用getKey()和getValue()来获取键和值。

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值