- 浏览: 10003 次
- 性别:
- 来自: 北京
文章分类
最新评论
集合
1.集合是什么
集合是容器, 长度可变, 可以保存任意类型对象.
通常我们需要一个长度可变的容器时就可以使用集合.
2.集合分类
Collection: 单列集合
List: 有存储顺序, 可重复
ArrayList: 数组实现, 查找快, 增删慢
LinkedList: 链表实现, 增删快, 查找慢
Vector: 同ArrayList, 但线程安全, 效率低, 已被淘汰
Set: 无存储顺序, 不可重复
Map: 键值对
3.集合迭代
List集合迭代有4种方式:
普通for循环, Iterator迭代器, 增强for循环, Vector特有的Enumeration
4.在迭代List的时候删除元素
使用普通for循环时, 删除数据需要将循环变量-1
使用迭代器时, 必须使用迭代器的remove()方法, 否则会抛出ConcurrentModificationException
使用增强for循环时, 不能修改集合, 否则会抛出ConcurrentModificationException
JDK5新特性
* 1.增强for循环
for(元素类型 变量 : 容器){ 循环体 }
* 2.泛型
在集合类型后面加上<类型>就是指定集合中只能存储该类型的对象, 如果存储其他类型时编译报错
在获取元素的之后返回值就是该类型, 省去了强转的麻烦
3.可变参数
类型... 数组名
可以接收同一类型的数据, 0个, 1个, 多个或整个数组
可变参数必须是参数列表的最后一个形参
Set
* 1.HashSet
使用哈希算法去重复, 速度快
在存储对象的时候, 先使用对象的hashCode()方法计算一个哈希值, 然后在集合中查找是否有哈希值相同的对象
如果没有哈希值相同的对象, 直接存入. 如果有哈希值相同的对象, 和哈希值相同的对象逐个equals()比较
如果equals()比较结果为false就存入, 结果为true则不存.
如果想将一个对象存入HashSet去重复, 就要重写hashCode()和equals()
我们在象HashSet中存储对象的时候,如果想要去重复, 就要重写hashCode()和equals().
在Person中重写
public int hashCode() { final int num = 31; int result = 1; result = num * result + age; result = num *result +((name == null)? 0 :name.hashCode()); return result; }
* 2.TreeSet
使用二叉树算法进行排序, 可自定义顺序(小的值就放在左边,大的放在右边,取得时候遵循 左 中 右 )
需要指定比较算法:
自然顺序:在Person中实现Comparable接口, 重写compareTo方法, 在该方法中定义比较算法
对应代码:
public int compareTo(Person o) { int nameTest = this.name.compareTo(o.name); return nameTest != 0 ? nameTest : this.age - o.age; }比较器顺序: 可以在TreeSet的构造函数中传入一个Compartor, TreeSet就会调用Compartor的compare方法比较
对应代码:
TreeMap<Person, Integer> tm = new TreeMap<Person,Integer>(new Comparator<Person>(){ @Override public int compare(Person o1, Person o2) { int nameTest = o1.getName().compareTo(o2.getName()); return nameTest != 0 ? nameTest : o1.getAge() - o2.getAge(); }});3.LinkedHahSet
HashSet的子类, 原理和HashSet相同, 但保留存储顺序
* 4.迭代Set集合
通过iterator()方法得到Iterator, 调用其hasNext()判断是否有下一个元素, 调用next()获取下一个元素
通过增强for循环进行迭代 for(类型 变量 : 容器){循环体}
5.Collection总结:
如果要保存多个元素, 那么就用List. 如果增加和删除比查询要多就用LinkedList, 如果查询较多就用ArrayList
如果要对多个对象去重复就使用HashSet, 因为速度最快
如果要对多个对象去重复而且保留原有顺序, 就用LinkedHashSet
如果要对多个对象按照指定顺序排序, 就用TreeSet
三.Map
1.什么是Map
Map是一种保存键值对的容器, 键唯一, 可以根据键来查找值.
* 2.HashMap
使用哈希算法对Key对象去重复, 和HashSet原理相同
当存入一个键值对的时候, 先对Key对象调用hashCode方法获取一个哈希值, 在集合中查找是否有哈希值相同的对象
如果没有相同的, 直接将键值对存入. 如果有哈希值相同, 则和哈希值相同的Key对象进行equals比较
比较结果为false就直接存入, 如果比较结果为true, 那么用新的Value替换旧的Value
3.LinkedHashMap
HashMap的子类, 原理和HashMap相同, 可以保留存储顺序
4.Hashtable
和HashMap原理相同, 线程安全, 效率低, 已被淘汰
* 5.TreeMap
使用二叉树算法对Key对象进行排序, 和TreeSet原理相同
有两种指定排序算法的方式:
默认使用自然顺序: 使用Key对象的compareTo方法来比较
传入比较器顺序: 在TreeMap的构造函数中传入Comparator之后, 就会使用Comparator的compare方法
* 6.迭代Map集合
a.keySet():
先调用Map的keySet()获得所有Key对象组成的Set
然后遍历这个Set得到每一个Key
再用Key对象从Map中获取Value
对应代码:
Set<Person> s = tm.keySet(); for (Person p : s) { System.out.println(p+"===="+tm.get(p)); } b.entrySet():先调用Map的entrySet()方法获得所有Entry组成的Set
循环遍历这个Set得到每一个Entry
再获取每个Entry的Key和Value
对应代码:
Set<Entry<Person,Integer>> s = tm.entrySet(); for (Entry<Person, Integer> ent : s) { System.out.println(ent.getKey()+" :"+ent.getValue()); }
*在EntrySet()中有以下的几个方法:
Equals(),getKey(),getValue,hashcode(),setValue()
---------------------- android培训、java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima
发表评论
-
黑马程序员----多线程
2011-12-26 20:01 632多线程 ---------------------- and ... -
黑马程序员----交通灯管理系统
2011-12-25 02:01 579交通灯管理系统 ---------------------- ... -
黑马程序员----银行业务调度系统
2011-12-25 01:54 581银行业务调度系统 --------------------- ... -
黑马程序员----类加载器
2011-12-25 01:43 713类加载器 ---------------------- a ... -
黑马程序员----反射
2011-12-25 01:41 629反射 ---------------------- ... -
黑马程序员----单态和垃圾回收
2011-12-19 19:53 693单态和垃圾回收 ---------------------- ... -
黑马程序员----数组
2011-12-17 23:05 420数组 ---------------------- ... -
黑马程序员----函数
2011-12-17 22:55 587函数 ---------------------- andr ... -
黑马程序员----break和continue
2011-12-17 22:51 661break和continue --------------- ... -
黑马程序员-----循环
2011-12-17 22:46 528java循环的实现方式 ---- ... -
黑马程序员---switch
2011-12-17 22:21 572一. Switch ------------------ ...
相关推荐
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 ...
集合—黑马程序员Java学习笔记
Java集合例题、例题源码、PPT教学文档(黑马程序员详细版)
马程序员_黎活明__Spring如何装配各种集合类型的属性.ppt )
含面向对象,异常处理和常用类,线程技术,集合框架,IO操作,网络编程,文件操作,反射机制,
黑马程序员java培训就业班笔记:day16(集合框架基础总结)
Javaweb程序设计任务教程课后习题及答案 黑马程序员【传智播客】 集合整理不易,如果文档有错误请见谅,此次整理只有1、2、3、4、5、6、8、9
。。。
观看黑马程序员Java零基础视频教学,从60P方法开始总结的知识集合,请使用Xmind打开,如果需要学习请配合视频打开:https://www.bilibili.com/video/BV17F411T7Ao
逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何...
TPshop是用thinkphp开发的一款免费开源网店系统,适合企业及个人,包含(微信商城 wap android ios pc)二次开发非常方便,代码清晰简洁,通俗易懂,丰富的插件和多套模板支持,易扩展,是目前国内首家最为完善的开源...
Ⅲ.Collection集合和Map集合的设计和API使用,以及集合的嵌套 Ⅳ.lambda表达式遍历集合,以及比较器comparator()匿名内部类的使用 V.使用Stream流操纵集合 功能: ①日志框架搭建、系统角色设计 ②首页、登录、商家...
库是 ⼀个抽象的概念,它是指具有相关功能模块的集合。 编程题 省略,代码详见教材。 1. Python基础 填空题 1. 4 2. True False 3. type 4. 浮点 5. 1 判断题 1. × 2. × 3. × 4. × 5. 选择题 1. A 2. A 3. D 4. ...
传智播客-冯威 javascript,ajax,jquery课件集合
•特征1:是一堆代码的集合; •特征2:一个半成品的应用; •特征3:包含了一些优秀的设计模式; 定义:框架是一堆包含了常量、方法和类等代码的集合,它是一个半成品的应用,只包含了一些项目开发的时候所使用的...
WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。2005年8月,在第11届ACM SIGKDD国际会议上...
在本套课程中,将会非常深入、非常详细、非常全面的解读HashMap以及...从底层的数据结构到底层源码分析以及怎样使用提高HashMap集合的效率问题等进行分析。如果掌握本套课程,那么再看其他javase的源码时会觉得很简单。
给大家分享一篇我在学习java过程中...包含常见的面试题:JVM、Java集合、多线程并发、java基础、SSM框架原理、微服务、Netty和RPC、网络、日志、算法、数据结构、加密、分布式算法、机器学习、大数据等知识点,都是干货
java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc ...黑马程序员入学Java精华总结.pdf
java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc ...黑马程序员入学Java精华总结.pdf