- 浏览: 222249 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
junzi2013:
df
黑马程序员:MyEclipse9 常用快捷键 中英文对照 及 快速get set方法 -
junzi2013:
dfsdafadsfsd
黑马程序员:MyEclipse9 常用快捷键 中英文对照 及 快速get set方法 -
idealab:
博主说的OpenCSV, JavaCSV, SuperCSV都 ...
csv调研 -
tanxin:
楼主怎么解决这个问题的呢?
坑爹的zookeer -
yy22258867:
:twisted:
黑马程序员19-7:foreach遍历核心源码,遍历HashMap需要用map.keySet()或map.entrySet()
day19 学习结果:
1,Map和Collection的区别?
2,Map的练习(字母次数),明确查表的应用,注重思想?
3,Collecitons中常见方法举例?
4,Collection和Collections的区别?
5,Arrays常见方法?
6,数组和集合转换,数组转集合为什么?集合转数组为什么?要注意什么?
7,增强for循环和传统for循环的区别?foreach可以遍历map吗?
8,可变参数的使用方式,和注意事项,并举例?
9,System类中获取本地系统信息的方法。
10,Runtime api查阅时,你看到了什么,想到了什么?
11,Math中的常见方法使用?
集合类的由来:
对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。
就使用集合容器进行存储。
集合特点:
1,用于存储对象的容器。
2,集合的长度是可变的。
3,集合中不可以存储基本数据类型值。
集合容器因为内部的数据结构不同,有多种具体容器。
不断的向上抽取,就形成了集合框架。
框架的顶层Collection接口:
Collection的常见方法:
1,添加。
boolean add(Object obj):
boolean addAll(Collection coll):
2,删除。
boolean remove(object obj):
boolean removeAll(Collection coll);
void clear();
3,判断:
boolean contains(object obj):
boolean containsAll(Colllection coll);
boolean isEmpty():判断集合中是否有元素。
4,获取:
int size():
Iterator iterator():取出元素的方式:迭代器。
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,
也就是iterator方法。
Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
其实就是抓娃娃游戏机中的夹子!
5,其他:
boolean retainAll(Collection coll);取交集。
Object[] toArray():将集合转成数组。
-------------------------------
Collection
|--List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
|--Set:元素不能重复,无序。
List:特有的常见方法:有一个共性特点就是都可以操作角标。
1,添加
void add(index,element);
void add(index,collection);
2,删除;
Object remove(index):
3,修改:
Object set(index,element);
4,获取:
Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);
list集合是可以完成对元素的增删改查。
List:
|--Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
|--ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
|--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。
LinkedList:
addFirst();
addLast():
jdk1.6
offerFirst();
offetLast();
getFirst();.//获取但不移除,如果链表为空,抛出NoSuchElementException.
getLast();
jdk1.6
peekFirst();//获取但不移除,如果链表为空,返回null.
peekLast():
removeFirst();//获取并移除,如果链表为空,抛出NoSuchElementException.
removeLast();
jdk1.6
pollFirst();//获取并移除,如果链表为空,返回null.
pollLast();
作业:
1,自己去查文档演示Vector中的elements()方法。
2,LinkedList中的,addFirst addLast getFirst,getLast removeFirst removeLast。
3,既然集合是存储对象的,请定义ArryaList集合,并存储Person对象。如new Person("lisi",20);
并取出。将姓名和年龄打印出来。
---------------------------------------------
Set:元素不可以重复,是无序。
Set接口中的方法和Collection一致。
|--HashSet: 内部数据结构是哈希表 ,是不同步的。
如何保证该集合的元素唯一性呢?
是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。
建立对象判断是否相同的依据。
|--TreeSet:可以对Set集合中的元素进行排序。是不同步的。
判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元就需要实现Comparable接口。覆盖compareTo方法。
如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
将该类对象作为参数传递给TreeSet集合的构造函数。
if(this.hashCode()== obj.hashCode() && this.equals(obj))
哈希表确定元素是否相同
1,判断的是两个元素的哈希值是否相同。
如果相同,在判断两个对象的内容是否相同。
2,判断哈希值相同,其实判断的是对象的hashCode的方法。判断内容相同,用的是equals方法。
注意:如果哈希值不同,是不需要判断equals。
-------------------------------------------------------
泛型:
jdk1.5出现的安全机制。
好处:
1,将运行时期的问题ClassCastException转到了编译时期。
2,避免了强制转换的麻烦。
<>:什么时候用?当操作的引用数据类型不确定的时候。就使用<>。将要操作的引用数据类型传入即可.
其实<>就是一个用于接收具体引用数据类型的参数范围。
在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型 。
泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。
运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。
为什么擦除呢?因为为了兼容运行的类加载器。
泛型的补偿:在运行时,通过获取元素的类型进行转换动作。不用使用者在强制转换了。
泛型的通配符:? 未知类型。
泛型的限定:
? extends E: 接收E类型或者E的子类型对象。上限
一般存储对象的时候用。比如 添加元素 addAll.
? super E: 接收E类型或者E的父类型对象。 下限。
一般取出对象的时候用。比如比较器。
===========================================================
集合的一些技巧:
需要唯一吗?
需要:Set
需要制定顺序:
需要: TreeSet
不需要:HashSet
但是想要一个和存储一致的顺序(有序):LinkedHashSet
不需要:List
需要频繁增删吗?
需要:LinkedList
不需要:ArrayList
如何记录每一个容器的结构和所属体系呢?
看名字!
List
|--ArrayList
|--LinkedList
Set
|--HashSet
|--TreeSet
后缀名就是该集合所属的体系。
前缀名就是该集合的数据结构。
看到array:就要想到数组,就要想到查询快,有角标.
看到link:就要想到链表,就要想到增删快,就要想要 add get remove+frist last的方法
看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法。
看到tree:就要想到二叉树,就要想要排序,就要想到两个接口Comparable,Comparator 。
而且通常这些常用的集合容器都是不同步的。
============================================
Map:一次添加一对元素。Collection 一次添加一个元素。
Map也称为双列集合,Collection集合称为单列集合。
其实map集合中存储的就是键值对。
map集合中必须保证键的唯一性。
常用方法:
1,添加。
value put(key,value):返回前一个和key关联的值,如果没有返回null.
2,删除。
void clear():清空map集合。
value remove(key):根据指定的key翻出这个键值对。
3,判断。
boolean containsKey(key):
boolean containsValue(value):
boolean isEmpty();
4,获取。
value get(key):通过键获取值,如果没有该键返回null。
当然可以通过返回null,来判断是否包含指定键。
int size(): 获取键值对的个数。
Map常用的子类:
|--Hashtable :内部结构是哈希表,是同步的。不允许null作为键,null作为值。
|--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
|--HashMap : 内部结构是哈希表,不是同步的。允许null作为键,null作为值。
|--TreeMap : 内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。
List list = new ArrayList();//非同步的。
list = MyCollections.synList(list);//返回一个同步的list.
给非同步的集合加锁。
class MyCollections{ public static List synList(List list){ return new MyList(list); } private class MyList implements List{ private List list; private static final Object lock = new Object(); MyList(List list){ this.list = list; } public boolean add(Object obj){ synchronized(lock) { return list.add(obj); } } public boolean remove(Object obj){ synchronized(lock) { return list.remove(obj); } } } }
详细请查看:http://edu.csdn.net/heima -------
发表评论
-
Java中的IO整理完整版
2013-02-15 17:23 704http://developer.51cto.com/art/ ... -
Myeclipse中导入zip文件查看源代码
2012-09-21 23:35 1051用Myeclipse的时候,出现无法查看源码的话,导入jdk文 ... -
==与equals
2012-09-13 20:15 651一般基本数据类型的比较用 == 当涉及到对象、字符串的时候,就 ... -
多线程课程002:线程范围内的共享变量
2012-09-13 16:47 950package cn.itcast.heima2; ... -
多线程课程001:线程安全的问题
2012-09-13 14:37 810下面的做法,会发现输出结果被打断了。 package co ... -
多线程课程001:线程安全的问题
2012-09-13 11:14 791package com.lee.thread; pu ... -
内部类的实际应用
2012-09-13 11:01 664public class TraditionalThreadS ... -
Java接口
2012-09-11 12:07 762Java接口的方法只能是抽象的和公开的,Java接口不能有构造 ... -
移位运算符
2012-09-11 09:31 842移位运算符 <<左移 a<<b,a转 ... -
【总结】gridbaglayout布局管理器
2012-08-15 11:19 691http://blog.sina.com.cn/s/blog_ ... -
【练习_00010】java不重复随机数
2012-08-14 01:26 694package com.heima.test; impo ... -
【练习】判断一个字符串中某些字段出现的次数
2012-08-14 01:08 973package com.heima.test; im ... -
选择、冒泡、折半排序查找方法
2012-08-13 15:06 1216import java.util.Arrays; i ... -
自己写的杨辉三角
2012-08-12 16:41 805package com.lee.graphic; p ... -
交换两个数的位置,不用中间变量
2012-08-06 02:28 1111a ^= b; b ^= a; a ^= b; 1 ... -
未解问题,定时器无法自定义切换时间
2012-07-30 18:08 1007package com.heima.test004.enu ... -
黑马程序员:设计模式,享元模式flyweight
2012-07-23 02:13 0如果有很多很小的东西,对象,当他们有很多属性是相同的,就可以把 ... -
黑马程序员:for综合图形整合结晶
2012-07-23 01:16 798package Graph; public clas ... -
JS: js获取字符串长度
2012-07-20 18:01 0<SCRIPT LANGUAGE="Jav ... -
传智27-2: 模拟Tocat浏览器,写网页蜘蛛爬虫,抓取网页信息
2012-07-12 17:03 0package cn.itcast.net.p2.ie_s ...
相关推荐
黑马程序员java培训就业班笔记:day10总结
57春节7天练---Day-1:数组和链表 数组和链表.pdf
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、...day10_缓冲流、转换流、序列化流、Files day11_网络编程 day12_函数式接口 day13_Stream流、方法引用 Java基础小节练习题答案
黑马程序员java培训就业班笔记:day06总结
信息安全_数据安全_The-elf-in-ELF:how-we-use-0-day- 企业安全 APT 金融安全 业务风控 金融安全
6.1 案例分析:结合黑马程序员的day1至day4的讲义和笔记,深入理解在实际项目中如何应用Hibernate,解决具体问题。 总结,Hibernate作为强大的ORM框架,为Java开发者提供了便利,通过理解并熟练掌握其核心概念、...
在本教程“06-1:Python课程 教程 进阶 实战 集合:基础操作、内存分配、数据运算、固定集合”中,我们将深入探讨Python编程中的一个重要概念——集合(Set)。集合是Python标准库中的一个内置数据结构,它提供了...
黑马程序员java培训就业班笔记:day16(集合框架基础总结)
为了提高代码的编写效率和保证命名的一致性,程序员们通常会采用一系列常用的英文单词缩写来代表某些含义,这些缩写涵盖了各种编程场景中的结构、变量和函数名。 以下是一些编程中常见的英文单词缩写及其含义: 1....
黑马程序员java培训就业班笔记:day05总结
通过本单元的学习,学生将掌握这些词汇、短语及其用法,了解不同动词在生产制造中的应用,并能熟练运用被动语态和形容词的区别。同时,学习英语中关于生命和活力的不同表达,增强对语言的感知力和表达能力。
黑马程序员java培训就业班笔记:day09总结
2015年Abletech团队培训日 ##议程 9:00 am-9:30 am:抵达,含咖啡因 9:30 am-9:45 am:当天的简要介绍 9:45 am-11:00 am:挑战一(Ruby) ...尽管我们有一个理想的议程,但今天是关于学习,探索和团
:dog_face: :hamster: :rabbit_face: :cat_face:Pet-a-Day GitHub动作这个动作每天都会将您的GitHub头像更改为不同的可爱动物...要求必须有一个帐户确保您在GitHub上使用的主要电子邮件与您的Gravatar帐户相关联如果...
day.js 下拉刷新: JavaScript-Garden: javascript30 material design相关 material-design-icons: jQuery chart React相关 深入 React 技术栈: React 学习之道: 深入浅出React和Redux: React模
【英语六级翻译中国风汇总】是针对英语学习者,特别是备考英语六级考试的学生而设计的资料,其中涵盖了丰富的中国文化元素,特别是中国传统节日和节气的英文表达。以下是相关知识点的详细说明: 1. **春节(Spring ...
web-day-3-git-and-github: : web-day-4-project-portfolio: : web-day-5-Revision Day web-day-6-Assignment-portfolio: : //github.com/Ahsanul-kabir/web-day-6-Assignment-portfolio 直播: https : //...
在您的GitHub .github/workflows/someday-i-learn.yml库中创建一个.github/workflows/someday-i-learn.yml文件。 将以下代码添加到someday-i-learn.yml文件。 name : Send someday, i learn cheatsheet at 11:am ...
- 情态动词shall的用法,如"Aunt: Millie, when shall you go to school every day?"表示询问计划或建议。 - 介词短语的应用,如"In the morning, we usually do morning exercises." 5. 文化背景: - 英国学校...
微软的补丁和安全指导可以在官方链接(fireeye.com/blog/threat-research/2017/09/zero-day-used-to-distribute-finspy.html)中找到。火眼的电子邮件、端点和网络产品能够检测到这些恶意文档。 **针对俄语使用者的...