------- android培训、java培训、期待与您交流! ----------
- 集合类 2014/5/13 星期二 16:41:39
1.集合的特点
集合只用于存储对象,集合长度是可变的,集合可以存储任意类型的对象
2.集合和数组的区别
集合和数组都是容器,数组虽然也可以存储对象,但长度是固定的,集合长度是可变的;
数组只能存储基本数据类型的,而集合可以存储任意数据类型
ArrayList()集合
1.集合中为什么存储的都是Object对象?
定义为Object类型对象,以达到集合中能存储任意类型对象的目的
2.集合中实际存储的是对象的引用(地址),而不是对象实体
什么是迭代器?
其实就是取出集合元素的一种方式
迭代器Iterator的基本原理
1,把取出方式定义在集合内部,这样就可以直接通过取出方式直接访问集合内部的元素,这样取出方式就被定义为了内部类
2.每个容器的数据结构不同,所以取出的动作细节也不一样,但是,都有共性内容,那就是”判断和取出“,那么可以将其共性内容
进行抽取
3.这些共性内容都符合一个规则,那就是Iterator接口
4.可通过对外提供的一个方法:iterator()来获取集合的取出对象
Collection
--List 元素是有序的,集合中的元素可以重复,因为该集合体系有下标
ArrayList:底层的数据结构使用的数组结构,特点:查询速度很快,增删稍慢,线程不同步。
LinkList:底层的数据结构使用的是链表数据结构,特点:查询速度稍慢,增删很快
Vector:底层使用的是数组数据结构,线程不同步,被ArrayList取代了
--Set 元素是无序的,集合中的元素不可以重复
List的特有方法
凡是可以操作角标的方法都是该集合体系的特有方法
增加
add(index,element)
addAll(index,Collection)
删除
remove(index)
修改
set(index,element)
获取
listIterator()
get(index)
subList(from,to)
List集合特有的迭代器:ListIterator
ListIterator是迭代器Iterator的子接口
1.在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会引发并发修改异常(currentmodifyexecpton)
2.所以在使用迭代器时,只能通过迭代器的方法操作集合元素,但Iterator方法是有限的,只能执行判断(hasNex()),
获取(Next()) 和删除(delete())的操作,
3.故只能通过Iterator的子类接口:ListIterator来执行其他操作。如:添加,修改等
该接口只能通过集合的ListIterator()方法获取
LinkList主要方法
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
早期版本 JDK1.6以后
addFirst()----offerFirst();
addLast()------offerLast();
getFirst()------peekFirst();
getLast()-------peekLast();
removeFirst()-----poolFirst();
removeLast()-------poolLast();
set接口对象
|--set集合:1.元素是无序的(元素的存入和取出顺序是不一致的)。 2.元素不能重复
|--hashSet:底层数据结构是哈希表
hashSet集合是如何保证元素的唯一性的呢?
是通过元素的两个方法:hashCode()和equals()来完成
如果元素的hashCode值相同,才会判断equals是否为True
如果元素的hashCode值不同,则不会调用equals()方法
所以一般情况下,如果要把实体对象存入Set集合中,都需要在该对象的方法覆写hashCode()方法
并比较任意两个对象的equals()
public int hastCode(){ return name.hashCode+age*37; } public boolean equals(object obj) { if(!(obj instances of Person)) { return false; } Person p=(Person)obj; return this.name.equals(p.name)&& this.age==p.age }
注意:对于判断元素是否存在,或是删除等操作,依赖的方法都是hashCode和equals
|--treeSet:可以对Set集合中的元素进行排序
记住:排序时,当主要条件相同时,一定要判断一下次要条件
|-- set的功能和Collection的功能是以致的
Map(和Collection接口同级的接口)集合
1.简述:该集合用于存储键值对,一对一对的往里存,但要保证键的唯一性
2.Map接口的子类对象
|--HashTable:底层是哈希表数据结构,不可以存入null键和null值,线程同步,效率低
|--HashMap:底层是哈希表数据结构,可以存入null键和null值,线程不同步,效率高
|--TreeMap:底层是二叉树数据结构,线程不同步,可以对Map集合中的元素进行排序
和set接口的集合很像,事实上set集合底层就是用了Map集合
3.共性方法
(1)增加
put(Key key,Value value)
putAll(Map<? extends k,? extends v>m)
(2)删除
clear()
remove(Object key)
(3)判断
containsValue(Object value)
containsKey(Object key)
(4)获取
get(Object key)
size()
values()
重要方法
Set<key> keySet():
将Map中的所有键存入到set集合中,因为set具备迭代器
所有通过迭代器方式取出的键,都可通过get()方法来获取对应的值
Set<Map.Entry<K,V>> entrySet():
将Map集合中的所有映射关系存入到set集合中,而这个关系的数据类型就是:Map.Entry
public class MapDemo { public static void main(String[] args) { Map<String, String> map=new HashMap<String, String>(); //添加元素时,如果添加的key相同,则key对应的后面的value值会覆盖前面的旧值,并且,put()方法 //会返回原来的旧值,和新添加的新值 /* System.out.println( map.put("01","张三旧值")); System.out.println( map.put("01","张三新值"));*/ map.put("01","张三"); map.put("02","李四"); map.put("03","王五"); //System.out.println(map); //将map集合中的映射关系取出,存入到Set集合中 Set<Map.Entry<String, String>> mapEntries=map.entrySet(); Iterator<Map.Entry<String, String>> iterator=mapEntries.iterator(); while(iterator.hasNext()) { Map.Entry<String, String> meEntry=iterator.next();//获取Set集合中的映射关系 String key=meEntry.getKey();//获取映射关系中的key值 String value=meEntry.getValue();//获取映射关系中的value值 System.out.println(key+" : "+value); } // Map.Entry其实也是一个接口,是Map接口中的内部接口 /* //keySet()方法,获取所有的key集合,并存入到set集合中 Set<String> set=map.keySet(); Iterator<String> iterator=set.iterator(); while(iterator.hasNext()) { String key=iterator.next(); System.out.println("key:"+key+" value: "+map.get(key)); }*/ /* 是否包含指定的键 System.out.println(map.containsKey("02")); 是否包含指定的值 System.out.println(map.containsValue("张三")); 通过key获取value。可以通过get来判断值是否存在 System.out.println(map.get("03")); 获取集合的长度 System.out.println(map.size()); 获取集合的所有值 System.out.println(map.values()); 通过key删除元素 注意:删除后返回删除成功后的值 System.out.println("remove:"+map.remove("03"));//返回王五 清除集合中的所有元素 map.clear(); System.out.println(map.values()); map.putAll(map2); System.out.println(map.values()); } }
相关推荐
黑马程序员——Android移动开发源码
黑马程序员入学Java知识——精华总结
NULL 博文链接:https://xianglachigen.iteye.com/blog/1564376
月薪过万的入门必知知识,黑马程序员入学Java精华总结
编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 Java是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级语言。是一种面向Internet的编程...
Java 黑马程序员入学Java知识(精华总结)
|--Activity不允许横竖屏切换 |--Activity常用小技巧 |--Activity按返回直接回到桌面 |--aidl之结合反射获取应用缓存大小等空间占用 |--aidl调用系统service未公开的方法挂电话 |--aidl调用系统未公开的方法代码示例...
正在自学黑马程序员Java全套,目前只学了Javase,接下来是Javaweb,把自己整理的笔记分享一下。
黑马程序员Javaweb教材源代码,适合学习配套使用
黑马程序员 C语言提高课程配套课件 黑马程序员 C语言提高课程配套课件
黑马程序员c++配套课件 《轻松搞定c++语言》 黑马程序员c++配套课件 《轻松搞定c++语言》
《JavaWeb程序设计任务教程》一书源代码,中国工信出版社出版,黑马程序员编著,传智播客旗下高端教育品牌“黑马程序员”项目实战配套用书
黑马程序员,C++核心编程
Javaweb基础全课程笔记,黑马程序员上课笔记,主要涉及前端 jsp和servlet等
layui ajax 没有node.js功能都可用,高度类似。 黑马刘龙彬老师主讲的大事件项目,整体看完,给...最后,再次给黑马程序员和刘老师点个赞。 说明--ShowDoc https://www.showdoc.com.cn/escook?page_id=3707158761215217
黑马程序员入学面试题,复习必备,事半功倍。
本人参加黑马程序员考试的题目加上本人的解答!不是让谁作弊,因为题库的题目对每个人会有些许的变化。题库题目的难度很类似,就当是你参加模拟考试了!哈哈,附本人的详解的哦!