黑马程序员--java集合

来源:互联网 发布:云南网络的发展历程 编辑:程序博客网 时间:2024/04/30 13:30

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


集合框架的层次结构:

这里只列出常用的


                                                                     Collection

                     

                                Set                                                                                  List


          HashSet                         TreeSet                                     ArrayList      LinkedList      Vector



集合和数组的区别:

           数组长度一旦确定不可改变变。集合长度不固定,可以随意改变。

           数组只能存放一种类型的数据,在声明数组是就确定类型了。集合可以存放多种类型的对象。


结合中存储的是对象的引用,即地址。


Collection容器的通用方法: 


add()

将指定的元素添加到此列表的尾部。

ArrayList al = new ArrayList();
al.add("java");
al.add("c");
al.add("php");
al.add("asp");





addAll(Collection<? extendsE> c)
按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。

也就是把一个容器里面的所有元素加入到另一个容器中,参数就是一个容器名。

ArrayList al2 = new ArrayList();
al2.add("win");
al2.add("unix");
al2.add("linux");
al2.add("ios");

al.addAll(al2);







clear()
移除此列表中的所有元素。

清空列表内容。

al.clear();


boolean contains(Object o)
如果此列表中包含指定的元素,则返回 true

在以往判断数组中是否有某个元素是,就是采用循环判断的方法。集合里面的contains()方法,也是使用迭代的方法从前向后依次判断。




isEmpty()
如果此列表中没有元素,则返回 true



remove(Object o)
移除此列表中首次出现的指定元素(如果存在)。

al.remove("unix");


removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。

Collection a ;

Collection b ;

a.removeAll(b);

把结合a和集合b的交集部分从集合a中删除。集合b不变。




由图可以看到,结合a被改变了,而集合b并没被改变。其实很容易理解,集合a对象调用了removeAll()方法进行操作,被操作的对象时a,集合b只是作为参数传递过去,所以结合b并没有被操作。



size()
返回此列表中的元素数。



Object  toArray()
按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。

返回类型为Object。




retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。

就是取交集。

Collection a ;

Collection b ;

a.retainAll(b);

结果把集合a和b中相同的元素放在结合a中,如果交集为空,则结合a就为空。集合b不变。




以上是集合容器的共性方法,就是所以Collection接口下的子接口或实现类都有上面这些方法。

下面分别说说List和Set。

List:元素是有序的,元素可以重复,有索引。

Set:元素师无序的,元素不可以重复,无索引。


其实把Collection分为这两个不同的子体系的最主要原因就是List有索引,Set无索引。

有了索引自然对应着可以用索引进行的操作。


List特有的方法:


add(int index, E element) 
将指定的元素插入此列表中的指定位置。

al.add(2,"database");




addAll(int index, Collection<? extends E> c) 
从指定的位置开始,将指定 collection 中的所有元素插入到此列表中。

al.addAll(3,al2);




get(int index) 
返回此列表中指定位置上的元素。


remove(int index) 
移除此列表中指定位置上的元素。



set(int index, E element) 
用指定的元素替代此列表中指定位置上的元素。


List下又分为:ArrayList,LinkedList,Vector,它们的存储结构不同,特点也不一样。

ArrayList:底层使用的是数组结构。特点:查询速度快,增删速度慢。线程不同步,速度快。

LinkedList:底层使用的是链表结构。特点:查询速度慢,增删速度快。

Vector:底层使用的是数组结构。线程同步,速度慢,被ArrayList替代了。


LinkedList特有的方法:

addFirst()  将指定元素插入此列表的开头。

addLast()   将指定元素添加到此列表的结尾。

由于上面两个方法操作集合是会发生异常,jdk1.6提供了对应的更好用的方法:

offerFirst()   在此列表的开头插入指定的元素。

offerLast()    在此列表末尾插入指定的元素。


getFirst()  返回此列表的第一个元素。

getLast()   返回此列表的最后一个元素。

由于上面两个方法操作集合是会发生异常,jdk1.6提供了对应的更好用的方法:

peekFirst()   获取但不移除此列表的第一个元素;如果此列表为空,则返回null

peekLast()    获取但不移除此列表的最后一个元素;如果此列表为空,则返回null



removeFirst()  移除并返回此列表的第一个元素。

removeLast()   移除并返回此列表的最后一个元素。

由于上面两个方法操作集合是会发生异常,jdk1.6提供了对应的更好用的方法:

pollFirst()  获取并移除此列表的第一个元素;如果此列表为空,则返回null

pollLast()   获取并移除此列表的最后一个元素;如果此列表为空,则返回null



接下来说说集合中的Set。

常用的Set容器就是HashSet和TreeSet,其实大致是一样的,只是TreeSet提供了一种排序,并非按元素加入集合的顺序排序,而是按照元素的ASCii码表顺序进行排序。

Hashset

在学HashSet的时候要了解一下哈希表,这样对于理解HashSet有帮助。

Hash值:类名@对象存放的地址.

Hash表:存放HashCode值的表。Hash表存Hash值并不是按先后顺序排列,而是按照Hash值得大小排列的。




HashSet保证元素唯一性的原理:判断元素的HashCode值是否相同,如果相同,进一步判断两个元素的内容是否相同,如果内容不相同,则依然会存进HashSet中,如果内容相同,则不会存入。


TreeSet

看似也无序,但其实也是有序的。TreeSet排序是按照集合内元素的ASCii码表进行排序的。




最后看看Map<K,V>

Map虽然不继承Collection,但是和Collection中的方法大致一样。

通过前面Collection中List和Set的学习,再学Map,就相对容易。Map中特有的方法不多,也都好用。

HashMap和TreeMap的关系与HashSet和TreeSet的关系基本一样。




之前对java中集合的学习相对较少,通过今天的学习,掌握了很多集合框架的原理性东西。Collection下的具体集合虽然很多,但是其中的几个就可以解决问题,上面都列出来了。从顶层的Collection借口的特征学习,再到具体的集合容器的独有特点,这样的学习方法很有效,找到规律学习很重要。




---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

   详细请查看 www.itheima.com



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 91借钱极速逾期怎么办 论文没过拿不到毕业证怎么办 大学论文不过拿不到毕业证怎么办 转店被黑中介骗了钱怎么办? 被星外转铺骗了怎么办 店铺转了后悔了怎么办 商铺转让不出去怎么办? 和包券密码丢失怎么办 天猫购物卷兑换不了怎么办 淘宝新店每天只有几个访客怎么办 注册淘宝企业店铺需要审核怎么办 淘宝店铺被投诉知识产权怎么办 一般违规扣48分怎么办 金税盘处于报税期不能开票怎么办 小规模税率开错了怎么办 我是代购卖家被买家投诉偷税怎么办 天猫盒子内存不够怎么办 天猫品牌申请不通过怎么办 天猫商家发货发个空包裹怎么办 无限流量怎么办没有4g 海外直邮身份证过期了怎么办 买车的人不过户怎么办 天猫精灵球泡离线怎么办 花呗被骗了2万怎么办 天猫公司变更地址发票怎么办 支付宝自助解限怎么办 支付宝16岁限额怎么办 支付宝提不了现怎么办 支付宝余额受限需要身份证怎么办 微信被骗了6000怎么办 被代运营骗了该怎么办 淘宝店铺过节放假无人打理怎么办 淘宝店太久没打理出现未开店怎么办 淘宝店关了售后怎么办 发货运单号发错了怎么办 天猫积分为零怎么办 山东聊城小型车脱审一年怎么办? 廉租房如果夫妻离婚怎么办 淘宝客服不给退货怎么办 天猫客服打字慢怎么办 京东买的kindle坏了怎么办