首页 > 精品范文库 > 14号文库
黑马程序员:Java集合简单总结
编辑:雨声轻语 识别码:23-340616 14号文库 发布时间: 2023-04-07 09:34:58 来源:网络

第一篇:黑马程序员:Java集合简单总结

黑马程序员:Java集合简单总结

在Java语言中,学好集合是非常重要的,下面简单的对集合进行总结,以便大家学习,有

问题再相互交流。

集合框架图

在集合框架图中可以看出,Collection接口中主要有两个子接口,分别是List和Set。List集合的特点是元素有序、包含重复元素,Set集合的特点是元素无序、不包含重复元素。Map集合中存储的是键值映射关系,元素都是成对出现的。Map接口的主要子接口有HashMap和TreeMap。

总结ist有顺序有重复没有排序,set无重复有排序,map的key也和set一样。

List接口

List : 特点是元素有序、可以包含重复元素。它有两个实现类分别是:ArrayList和LinkedList。

ArrayList : 内部维护一个数组结构,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。

LinkedList : 内部维护了一个双向链表结构,即通过节点之间彼此连接来实现的,每一个节点都包含前一个节点和后一个节点的引用。当一个新节点插入时,只需要修改其中保持先后关系的节点引用即可,这样的存储结构保证了LinkedList集合在增删元素时效率非常高。

Set接口

Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面的List。实际上Set就是Collection只是行为不同,也就是说Set集合并没有对Collection接口进行扩充,只是比collection接口要求更加严了。

Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。

HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。

TreeSet : 保存有序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

Map接口

Map用于保存具有映射关系的数据,因此Map集合里存储两组值,一组用于保存Map里的key,另一组用于保存Map中的value,key和value都可以是任意引用类型数据,其中,作为key的值是不允许重复的,而value中可以出现重复。Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”。

HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。HashMap集合是基于哈希表的Map接口实现,并允许使用null键null值,但必须保证键的唯一性。

LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序。而在迭代访问时发而更快,因为它使用链表维护内部次序。

TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(顺序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。

Hashtable线程安全,但是存取速度很慢,且不允许存放null键null值,目前基本上被hashMap类所取代。Hashtable有一个重要的子类Properties。

Properties:java.util.Properties;key和value都是String类型,用来读配置文件。继承自Hashtable,比 Hashtable 更严格 属性列表中每个键及其对应值都是一个字符串。常用方法 String getProperty(String?key)和 setProperty(String key,String value);

用法:我在D盘下建了一个名为 AA.dat 的文件,文件的内容为:

name=ch

password=12345

执行以下程序,输出 ch,可见用 Properties 可以很方便的解析配置文件 Properties p = new Properties();p.load(new FileInputStream(“D:AA.dat”));System.out.println(p.getProperty(“name”))

第二篇:【黑马程序员】Java基础总结

【黑马程序员】Java基础总结

黑马程序员的javaEE课程主要分为2个部分:java基础+java就业。今天就简单的给大家总结一下咱们java基础的知识。

注:Java采用Unicode符号集,每个字符占2个字节,无论英文还是中文还是其他字符。

标识符

为变量、类或方法起的名称 以字母,下划线、或者$符号开头 由字母、数字、下划线或者$符号开头 区分大小写,没有长度限制,不能使用关键字 尽量取得容易辨识,见名知意

如:identifier、userName、user_Name、_sys_varl、$change

基本数据类型

Java定义了8中基本数据类型

[AppleScript] 纯文本查看 复制代码

?

/**

* @author 传智播客 1 */ 2 布尔值----boolean(只有true和false两种类型)3 字符-------char(16 位的Unicode字符 用单引号('')标注;'a'表示字母4 a

't' 表示制表符

'u'中?用确切的代替

申明5 并且初始化: char c = 'A'

申明变量 char ch1,ch2)6 整数--------byte(8位)short(16)int(32)long(64)【以0开7 头表示八进制 ;以0x开始表示16进制】 浮点型-----float double

变量

必须在类的内部【可以在方法外也可以在方法类】 在方法类定义的变量叫做局部变量,需要显示的初始化

黑马程序员合肥中心 编著

成员变量和类变量【对象】自动初始化【数字初始化为0,对象初始化为null】

常量

在程序运行中,其值保持不变的量

不同数据类型间的相互转换【封装Wrapper类】 Java中类的定义:

[AppleScript] 纯文本查看 复制代码

? /**

2* @author 传智播客

3*/ 4 <修饰符> Class <类名>{ <属性申明>;6

<构造器申明>;7

<方法申明>;8 }

成员变量申明:

[AppleScript] 纯文本查看 复制代码

? <修饰符> <类型> <名称>;修饰符:

[AppleScript] 纯文本查看 复制代码

? /** 2

* @author 传智播客 3

*/ 4 final:修饰常量,常量的值不能被修改【例如 final int CONSTANT = 50;】 5 static:申明静态变量[类变量] static int nCount;方法的申明:

[AppleScript] 纯文本查看 复制代码

? /** 2

* @author 传智播客

黑马程序员合肥中心 编著

3*/ 4 <修饰符> <返回值类型> <名称>[参数列表]{ 5

语句;6 }

方法参数的传递方式:

1、值传递:形参是基本数据类型,方法调用时,实际参数把值传递给形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容;是两个不同的存储单元,所以方法执行中,形式参数值的改变不会影响实际参数的值。

2、引用传递:形参类型是引用数据类型【传递地址】,方法调用时,实际参数是对象或者数组,这时,形式参数和实际参数指向的是同一地址,方法执行中,对形式参数的操作实际上是对实际参数的操作,这个结果在方法结束后被保留了下来,所以对形式参数的操作实际上就是对实际参数的操作。构造器申明:

[AppleScript] 纯文本查看 复制代码

?

/** 1 * @author 传智播客 2 */ 3 <修饰符> <类名>[参数列表]{ 4

语句;5 } 6 注释:构造器没有返回值,void也不行;如果有返回值,方法会被当做普通函7 数执行; 构造器函数特点:

1、作用:完成对类对象的初始化

2、名称必须和类名相同

3、不能有返回值,不能有 return 语句

4、一般申明为Public类型 构造器的使用:

黑马程序员合肥中心 编著

1、不能现实的调用

2、在创建一个类的对象时,系统自动调用构造器为该对象初始化

3、构造器只能和new关键字一起使用

格式:

类名 对象名 = new 构造函数名称(成员变量的初始值);

默认构造器:

1、每个类至少有一个构造器

2、如果不编写构造函数,系统自动添加默认的构造函数【默认构造函数不带参数,默认构造函数函数体为空】

3、不必编写构造函数就能使用new XXX()

创建实例

对象创建格式:

<对象名> = new <类名>(实参)

对象的清除:

对象为null时,Java自动调用垃圾回收机制清除对象,释放对象占用的内存空间 手动编写finalize()方法撤销对象--不提倡

对象的内存模型:

栈内存:方法中定义的变量(基本类型和引用类型)。超过变量的作用域,自动释放变量的内存

堆内存:new 创建的对象(包括数组),由系统自动回收

类的继承【仅支持单继承】

[AppleScript] 纯文本查看 复制代码

? /**

2* @author 传智播客

3*/ 4 <修饰符> class <名称> extends <父类>{ 申明;6 }

黑马程序员合肥中心 编著

子类可以继承父类中非private的方法和属性;子类可以添加新的属性和方法;【程序代码重,减少冗余】 方法的重载(overload):

1、一个类中有多个同名的方法

2、条件:参数的个数不同;参数的类型不同

3、如果两个方法只有返回值不一样,不是重载,会报错

方法的覆盖(override):

1、子类可以修改父类继承过来的行为

2、子类可以创建和父类的方法不同功能的方法,但是下面必须相同:【方法名、返回值、参数列表】

super关键字:

往往在覆盖方法时,真正不目的不是代替现有的行为,而是在某些方面扩展那些行为; 类中使用super关键字指向父类的成员 包括数据和方法; 3中使用方法:

super.方法名([参数表]);----调用父类的方法 super.成员变量名;----访问父类的成员变量 super([参数表]);----调用父类的构造函数

构造函数不能被继承:

子类从父类继承所有的方法和变量 子类不能继承父类的构造函数

有两种方式可以获取构造函数:

1、使用默认的构造函数

2、编写1个或者多个构造函数

调用父类的构造函数:

要调用父类的构造函数,必须在子类构造函数的第一行使用super关键字

黑马程序员合肥中心 编著

要调用特定的父类的构造函数,必须为super提供参数

如果没有this或者super调用,编译器会插入一个对父类无参数构造函数的隐式调用: super();

变量的多态:

类型为X的参考变量,指向的对象类型既可以是X,也可以是X的子类; 如: Employee x = new Manager();Employee y = new Employee();

实例方法能够被覆盖,静态(static)方法不能被覆盖 原因:

静态方法在编译时候,根据调用该方法的类或者对象所属的类决定 实例方法在运行时根据对象所属的类决定

如:Super s = new Sub();编译时候S是Super类的对象,运行时 S 指向Sub类的对象;

instanceof操作符:

可以根据对象所属的类进行不同的处理 抽象类:只能被继承,不能被实例化的类 定义格式:

[AppleScript] 纯文本查看 复制代码

? /**

2* @author 传智播客

3*/ 4 abstract class 类名{ abstract 返回值类型

方法名[参数列表];6

...7 } 说明:

抽象类中可以包含抽象方法和非抽象方法,也可以不包含抽象方法和非抽象方法;只要有一个抽象方法,就属于抽象类;

[AppleScript] 纯文本查看 复制代码

黑马程序员合肥中心 编著

?

01 /** 02

* @author 传智播客 03

*/ 04 abstract class Animal{ 05

public abstract void eat();06

} 07

class Dog extends Animal{ 08

public void eat(){System.out.println(“狗吃骨头”);} 09

} 10class Cat extends Animal{ 12

public void eat(){System.out.println(“猫吃老鼠”);} 13 } 115 class Wolf extends Animal{ 16

public void eat(){System.out.println(“狼吃羊”);} 17 } 说明:不能创建抽象类的对象,即不能被实例化;

使用时,必须用起创建子类

子类可以定义自己的成员变量和方法,但是必须将父类的所有抽象方法代码写完;

如果子类只是实现了部分抽象的方法,那么,该类仍然是抽象类; 最终类:

final 类不能被子类化;如Java.lang.String 是final 类,这样做是基于安全的考虑; 标记为final的方法不能被覆盖;处于安全的考虑,如果方法的实现不应改变,而且对对象的一致性要求比较高,则可以创建一个final方法。

标记为final的变量代表常量,只能一次赋值; 接口:

使用interface关键字申明,可以支持多重继承 接口中只能包含: 抽象方法;

黑马程序员合肥中心 编著

常量(默认为 public static final)【用得较少】 说明:

1、接口本身只是提供定义,使用时,必须通过类实现接口(implements)实现接口时,必须实现所有的方法。否则该类还是抽象类(abstract class)。

2、一个雷尅实现多个接口。

3、扩展子句(extends)必须在实现子句(implements)之前

包:

package <顶层包名>[.<子包名>]*;

如:package shipping.domain;说明:

1、如果有包申明,必须在源文件开始处申明。他的前面只能有空白和注释,不能有其他语句;

2、每个源文件只能有一个包申明;

3、如果没有包申明,则该类属于“默认”包(没有名称的包)

4、包的名称有层次,且用.分开;

import语句: 基本语法:

import <包名>[.<子包名>].<类名> 或者import <包名>[.<子包名>].*;

其实在学习java过程中基础还是比较容易,如果大家想学习java基础的知识,欢迎大家可以去传智播客官网http://www.teniu.cc/去了解java基础知识!

黑马程序员合肥中心 编著

第三篇:【黑马程序员】Java之debug总结三

【黑马程序员】Java之debug总结三

之前写了“Java之debug总结一”,“Java之debug总结二”共总结了5种debug方式,现在简绍第6种,不足之处,敬请指正:(源码在文章末尾处)本文以chrome浏览器为例

六.前台debug 主要:debug js代码(1.jsp中嵌入的js代码 2.js文件中的js代码)第一步:首先创建一个web项目,需要有一个jsp页面和js,如下图:

第二步:在test.js,index.jsp中填充内容,如图示: index.jsp

黑马程序员济南中心 编著

test.js

第三步:把项目发布到tomcat服务器中,并启动tomcat服务器

第四步:在浏览器上访问index.jsp,使用“F12”打开chrome开发者工具,如下图:

黑马程序员济南中心 编著

选中“Source”,点击,出现如下界面

黑马程序员济南中心 编著

点击“[url=]encode测试[/url]”按钮进行测试

以上为外部js代码测试,测试过程中可以修改js的内容,“Ctrl+s”保存后,可以立马生效,断点会从第一行从新开始.黑马程序员济南中心 编著

内部js测试步骤类似于上面的步骤,只是在选择资源的时候不是选择“test.js”,而是选择“index”,选择后页面如下图:

测试步骤和外部js一样

比较外部js和内部js的区别: 外部js,可以进行动态的修改, 修改之后立马生效,并且可以立马进行测试.内部js,不可以动态修改,用起来有点不方便

以上以我用过的所有debug方式,希望对大家有所帮助

黑马程序员济南中心 编著

第四篇:【黑马程序员】Java之debug总结二

【黑马程序员济南】Java之debug总结二

之前详细描述了4种debug方式,现在简绍第5种,不足之处,敬请指正:(源码在文章末尾处)五.maven项目debug

第一步:首先创建一个maven项目,如图所示:

第二步:debug运行前设置

黑马程序员济南中心 编著

执行完上面的步骤,会出现如下弹出框

黑马程序员济南中心 编著

Source配置如下

黑马程序员济南中心 编著

黑马程序员济南中心 编著

黑马程序员济南中心 编著

第三步:Debug运行,上面配置完成后,直接debug运行即可,如下图

第四步:打断点测试结果

黑马程序员济南中心 编著

希望能对不会使用maven进行debug的猿友们有所帮助,第六种方式我会尽快补上

maven-debug.zip

黑马程序员济南中心 编著

第五篇:【黑马程序员】Java基础 : Java语句笔记

【黑马程序员】Java基础 : Java语句笔记

摘要: Java基础—java语句这些是黑马程序员java基础入门的一个很重要的内容。今天主要给大家简单讲解一下Java基础—java语句,以后会慢慢讲解黑马程序员的课程内容!

关键语句介绍

一、while 语句 一般形式:

whi l e(条件表达式){ 语句体 ……… } 执行过程:

条件表达式为真,执行语句体。否则,退出!

二、do while 语句 一般形式: do { 语句体 …….} while(条件表达式);执行过程:

先执行一次语句体,判断 条件表达式是否为真,为真再执行do语句中的语句体。为假,退出。

需要注意:与whi l e语句区别

黑马程序员合肥中心 编著

1.while(条件表达式)后面有分号;2.不管条件表达式是否为真,语句体均会执行一次。

三、for 语句 一般形式:

for(子句 1;子句 2;子句 3){ 语句体 …… } 执行过程:

四、break、cont inue 语句 break 退出所在循环 : int stopHere = 5;for(int i=1;i<8;i++){ if(i == stopHere){ break;} System.out.println(“i = ” + i);

黑马程序员合肥中心 编著

} //打印结果:5,6,7,8均没有打印出来。

需要注意的一个问题: int stopHere = 5;for(int i = 1;i < 8;i + +){ if(i = = stopHere){ / /语句体 } break;System.out.println(“i = ” + i);} 这个时候编译器会报错:无效的 System.out 输出语句。冷静分析一下:

break 语句会结束循环,所以不会再去执行 System.out 输出语句。编译会认为你在多此一举,sorry 报个错!

continue 退出本次循环,不会退出整个循环: int skipHere = 5;for(int i = 1;i < 8;i + +){ if(i = = skipHere){ continue;}

黑马程序员合肥中心 编著

System.out.println(“i = ” + i);} / /打印结果:除了5没有打印出来。

i = 1 i = 2

五、switch 语句 一般形式: switch(常量){ case 表达式1:语句体1;break;case 表达式2:语句体2;break;.....default : 语句体n;break;}

执行过程: 执行过程:

case 根据自己的表达式看是否匹配常量,如果匹配就执行语句体,否则执行 default 语句。

case 执行类似于并行操作,不是顺序操作。所以各个表达式的值不可以相同。

黑马程序员合肥中心 编著

哪个 case 匹配常量就会执行自己的语句体,不会再去寻找其他 case 语句。注意:

<1> case 穿透:省去break关键字

[AppleScript] 纯文本查看 复制代码 ?

01 /**

02 * @author 传智播客 03 */

04 int i = 10;05 switch(i){ 06 case 10:

07 System.out.println(“ A”);08 //break;09 case 5: System.out.println(“ B”);11 //break;12 case 7: System.out.println(“ C”);14 //break;15 default : System.out.println(“ error”);17 break;18 }//打印结果:A B C error

<2> 在 Java 编程中 switch 括号中的常量的数据类型只可以为 int 类型或者是 byte、char、short(因为 byte、char、short 可以自动提升为 int),常量类型不可以是 long、float 和 double 等数据类型。<3> 多个 case 可以合并 , 相当于 “ 或 ”,例如下面 i 等于 10、5、7 都可以执行打印语句。

[AppleScript] 纯文本查看 复制代码 ?

01 /**

02 * @author 传智播客 03 */

04 int i = 5;05 switch(i){ 06 case 10: 07 case 5: 08 case 7:

09 System.out.println(“ C”);10 break;11 default : System.out.println(“ error”);13 break;

黑马程序员合肥中心 编著 }//打印结果:C <4> default 语句可以省,但是不推荐,他后面的 break 可省 <5> case 或者 default 子句中可以写多条语句 case 7: System.out.println(“ C”);if(i == 5){ System.out.println(“ i = ” +i);} break;<6> case 或者 default 子句中还可以嵌套 switch 或者其他语句

六、return 语句

终止方法的运行并指定要返回的数据。两种形式:

<1> return 表达式;

<2> return ;没有任何数据直接返回,结束函数(方法)的执行。

七、if 语句

一般形式:

1.if(条件表达式){ 语句体} 2.if(条件表达式){ 语句体} else{语句体 } 3. if(条件表达式1){ 语句体} else if(条件表达式2){语句体 } else {语句体 }

特别注意:形式3,else与其最近的上个if 配对。例子:

[AppleScript] 纯文本查看 复制代码 ?

黑马程序员合肥中心 编著

01 /**

02 * @author 传智播客 03 */

04 public class TestIF {

05 public static void main(String[] args){ 06 int i = 30;07 if(i < 20){

08 System.out.println(“<20”);09 } else if(i < 50){ System.out.println(“<50”);11 } else if(i < 80){ System.out.println(“<80”);13 } else System.out.println(“>=80”);15 System.out.println(“黑马程序员!”);16 }

如果大家想学习java基础的知识,欢迎大家可以去传智播客官网http://www.teniu.cc/去了解java基础知识!

黑马程序员合肥中心 编著

黑马程序员:Java集合简单总结
TOP