版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java中集合框架: Collection接口和Map接口,集合框架图,。集合框架中的核心接口是:List接口、Set接口和Map接口。List接口和Set接口都是继承了Collection接口的,而Map接口是单独存在的。,我们学了知识是拿来应用的,那么对于初学者来说怎样才能很好地应用集合框架呢!给我感受最深的,也是最重要的,那就是要知道集合框架中各个接口和实现类的特征和他们的方法。如果知道了他们的特征和方法,那我我们在应用中就能得心应手了。好,下面就让我们一起学习集合框架中几个常用的接口和实现类的特征:,List:List是一个接口,它继承于Collection接口。它定义了一个允许有重复
2、项的有序集合。那么,它的特征就是:允许有重复项,有序。 Set:Set是一个接口,它也是继承于Collection接口。它不允许集合中存在重复项,无序。每个具体的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。,Map:Map也是一个接口,Map接口不是Collection接口的继承。Map接口用于维护键/值对(key/value)。它描述了从不重复的键到值的映射。,重要的实现类: 1 ArrayList :ArrayList是一个类,他实现了List接口,它封装了一个动态再分配的Object数组。 它的特点是:有序,可以重复的数组。 ArrayList类中最常用的方法有:
3、add(),get(),remove(),size()等方法。 例如: List list = new ArrayList();/实例化一个对象 list.add(user);/在list中添加元素,2 LinkedList:LinkedList也是一个类,它实现了List接口,它是一个双向链表结构的集合。 LinkedList类中最常用的方法有:add(),get(),remove(),size(),clear()等方法。这些方法在javaAPI中都有详细说明。,总结: 1 ArrayList、 LinkedList两个类都实现了 List接口 2 ArrayList的特点是有序可以重复的,
4、LinkedList是一个双向链表结构的。 3 特点来选择:对这个集合经常进行查找操作,那么你最好用ArrayList; 经常增加,删除操作,那么最好用LinkedList来存放。这些都是根据他的一个特点来选择应用的。,ArrayList = Object + 线性表操作(增删改查) StringBuilder = char + 操作(增删改查) ArrayList(1.2以后新的) 是使用变长数组算法实现的 List (线性表方法) Vector(1.0) 是使用变长数组算法实现是 List 矢量 向量 LinkedList 是采用双向循环链表实现的List,List 集合的实现 1 Lin
5、kedList 采用双向循环链表实现 2 ArrayList 变长数组算法实现 新的 快 非线程安全 3 Vector 变长数组算法实现 早期提供 慢 线程安全,Map 1 HashMap 新 2 Hashtable 旧 (1.2以前) 散列表概念 1 容量: 散列表中散列数组大小. 2 散列运算: key-散列值(散列数组下标)的算法, 如: mm.hashCode()%10-8 3 散列桶: 散列值相同的元素的线性集合 4 加载因子: 就是散列数组加载率, 一般小于75%性能比较理想 就是:元素数量/散列数组大小, 如: 7/10=70% 5 散列查找: 根据Key计算散列值, 根据散列值
6、(下标找到散列桶,在散列桶中顺序比较Key, 如果一样, 就返回value 6 散列表中Key不同, Value可以重复,HashMap = Entry(key:value)(散列表)+散列算法(方法)(get/put) ArrayList = Object + 线性算法(方法) LinkedList = 双向循环链表 + 线性操作(方法) StringBuilder = char + 数组的操作,HashMap:HashMap是一个类,它实现了Map这个接口。中文也叫散列表。它的特点就是:键值对的映射关系。一个Key对应一个Value。 例如:我们在做一个简单的ATM实现的时候,一个卡号对应
7、一个用户,每一张卡的卡号是唯一的,而一个用户可以有几张卡。这种情况,我们就可以用HashMap来存放数据了。,HashMap(关键字:值), 关键字key是唯一不重复的, 查找表 1) key可以是任何对象, Value可以任何对象, 2) key:value 成对的放置到集合中 3) 重复的key算一个, 重复添加是替换操作 4) 根据key的散列值计算散列表, 元素按照散列值(不可见)排序 5) 默认的容量: 16 默认加载因子(加载率) 0.75 6) 根据key检索查找value值 7) 用于查找场合, 可以提高根据key查找效率,put(Object key,Object value
8、):根据给定key值存放value值 get(Object key):根据给定的key值查找并返回对应的value值若没有找到对应的key,返回null clear():清空散列表,containsKey(Object key):查看当前散列表中是否包含给定的key值 containsValue(Object value):查看当前散列表中是否包含给定的value值 isEmpty():散列表有无元素 keySet():返回当前散列表中所有的key(以 Set集合返回) remove(Object key):根据key值删除这一项 size():返回当前散列表中的元素总数,例如: HashMa
9、p map = new HashMap();/实例化一个HashMap对象 map.put();/在map集合中添加元素,8) HashMap VS Hashtable A HashMap 新, 非线程安全, 不检查锁, 快 B Hashtable 旧 (1.2以前) 线程安全, 检查锁, 慢一点,HashMap中常用的方法有:put(),get(),clear(),containsKey()等方法。 例如: HashMap map = new HashMap();/实例化一个HashMap对象 map.put();/在map集合中添加元素,Java泛型简介 1) Java5 以后提出的语法现
10、象, 在编译期间期检查的类型约束. 运行期不检查泛型! 2) 可以用来约束类中元素的类型,Java泛型简介 1) Java5 以后提出的语法现象, 在编译期间期检查的类型约束. 运行期不检查泛型! 2) 可以用来约束类中元素的类型,集合的迭代Iterate(遍历算法)(模仿了数鸡蛋的方式) 1) 迭代操作: 播放列表 的 全部播放, 将扑克牌全部发放 2) java使用Iterator 接口描述了迭代模式操作 Iterator 中的方法模式化设计, 专门配合while循环操作,集合的迭代Iterate(遍历算法)(模仿了数鸡蛋的方式) 1) 迭代操作: 播放列表 的 全部播放, 将扑克牌全部发
11、放 2) java使用Iterator 接口描述了迭代模式操作 Iterator 中的方法模式化设计, 专门配合while循环操作,3) Iterator 的实例可以从集合对象获得, 是这个集合的一个元素序列 视图, 默认包含一个操作游标, 在第一个元素之前, hasNext() 方法 可以检查游标是否有下一个元素, next() 方法移动游标到下一个元素 并且返回这个元素引用. 使用while配合这个两个方法, 可以迭代处理 集合的所有元素,4) 迭代时候可以使用迭代器remove() 方法删除刚刚迭代的元素( remove() 一定要在next()方法后执行,删除的是next()返回的元素
12、) 在迭代过程中, 不能使用集合方法(add, remove, set) 更改集合 元素,Collections 集合的工具类, Arrays 数组的工具类 1) 排序(sort(), 二分查找(binarySearch(), 打乱(shuffle(), 填充(fill()等操作 例如: Collections .sort(); Collection和Collections Collections:是集合的工具类 Collection:是集合的接口,它有两个子接口分别为:List和Set,比较大小 1) Comparable 可以比较的 用于类实现, 实现这个接口表示: 这个 类的实例可以比较
13、大小的. 可以进行自然排序. CompareTo()返回正数表示大,返回负数表示小,返回0表示相等Comparable的实现必须与equals() 的结果一致, 就是相等的对象比较结果一定是0! 2) Comparator 比较工具, 用于临时定义比较规则, 不是默认比较规则,Collections的sort方法默认使用集合中元素的compareTo()方法比较 * 后进行排序,若想改变规则,可以使用Collections的sort的重载方法, * 传入一个比较器,来使用临时比较规则进行排序( 用Comparator比较工具 ),java中的包装类 1) 包装类可以把基本类型包装为对象类型 2
14、) 有八种包装类 int Integer long Long byte Byte short Short float Float double Double boolean Boolean char Character,3 包装类提供了 对应数据类型的工具方法 Integer.toHexString() Integer.toString(int) Integer.toBinaryString() Integer.parseInt(String) 3f-int Integer.parstInt(String, int) 2.718 - 2.718 Double.parseDouble(Strin
15、g str);,应该将int这个基本类型转换为一个对象类型(顶级父类是Object) 使用简单类型对应的包装类的构造方法创建一个对应的包装类对象 int a = 10; Integer num = new Integer(a);/将基本类型转为对应的包装类 ArrayList al = new ArrayList(); al.add(num); 将基本类型数据转变为其包装类的过程称之为: 装箱 将包装类的对象转变为基本类型称之为:拆箱,自动包装(auto boxing / unboxing)(java5 以后可以): Integer i = 2;/ i=new Integer(2); Obje
16、ct o = 3.5; System.out.println(o instanceof Double); /true int a = i+1;/ a = Value() + 1;,注意 1 包装类是final的类 2 包装类对象是不变的, 与字符串类似(不变模式) Integer a = 1; Integer b = 2; a = a+b; /a = new Integer(Value() + Value() 3 包装类覆盖了 toString equals hashCode compareTo,1) 集合复制, 默认的复制规则是浅表(浅层)复制 A clone(
17、) 方法 B 使用复制构造器! Map map = new HashMap(); Map map2 = new HashMap(map); List list1 = new ArrayList(); List list2 = new LinkedList(list1); 注意:集合Collection不能直接转换为Map,2) 同步化(线程安全的) List list = new ArrayList(); /synchronizedList 可以将非线程安全的list包装为线程安全的 list = Collections.synchronizedList(list); 转换以后就相当于 Vec
18、tor HashMap map = new HashMap(); /synchronizedMap 可以将非线程安全的map包装为线程安全的 map = Collections.synchronizedMap(map);,3) 数组与集合的转换 a 数组转List(只读的) String names = A,B,C; List list = Arrays.asList(names);/只读list list = new ArrayList(list);/复制为全功能List Set set = new HashSet(list);/复制为Set集合,b 集合转数组 Object ary1 = list.toArray();/集合转Object String ary2 = (String) list.toArray(new String);/集合转制定类型数组,5) Map的迭代, Map 是 Key:Value 组成的集合 A 对key:value 进行迭代 map.entrySet();返回一个Set B 对Key进行迭代 map.keySet();返回一个Set C 对Value进行迭代 map.values();返回Collection,什么
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 20262026甘肃酒泉肃州区东南街街道南苑社区现招聘公益性岗位工作人员考试参考题库及答案解析
- 2026年广西制造工程职业技术学院单招职业倾向性考试题库带答案详解(模拟题)
- 2026年广西国际商务职业技术学院单招职业技能测试题库含答案详解(培优b卷)
- 2026年嵩山少林武术职业学院单招职业倾向性测试题库及参考答案详解
- 2026年广西体育高等专科学校单招职业倾向性考试题库附参考答案详解(研优卷)
- 2026年广西工业职业技术学院单招职业技能测试题库附答案详解(b卷)
- 2026年广东环境保护工程职业学院单招职业倾向性考试题库及1套参考答案详解
- 2026年广东环境保护工程职业学院单招职业适应性考试题库附答案详解(综合卷)
- 2026年广西体育高等专科学校单招职业倾向性测试题库及答案详解一套
- 2026年广东机电职业技术学院单招职业适应性测试题库附答案详解(基础题)
- 2024年江苏信息职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 板材行业销售渠道分析
- 2024地面用晶体硅光伏组件环境适应性测试要求第1部分:一般气候条件
- 教科版四年级下册科学全册教案
- 苏教版五年级下册数学 列方程解决两步实际问题 教案(教学设计)
- 洼田饮水试验评定量表
- 《煤气安全作业》培训教材
- 概率论与数理统计期末考试卷附答案
- 穴位注射水针专题宣讲
- 《髋臼骨缺损分型》
- GA/T 652-2017公安交通管理外场设备基础设施施工通用要求
评论
0/150
提交评论