java 8 新特性

java 8 新特性
java 8 新特性

1 Stream操作:

1.Map与distinct 方法

Listresult=ocrResultService

.getOcrByArtificialScoring(startTime, endTime, letterTypes);

ListpeerIds=result.stream().map(TJcArtScore::getPeerLetterId ).distinct().collect(Collectors.toList());

其中map 方法可以调用list泛型对象中的方法获得返回值(必须有返回); distinct 方法可以将map 或者循环的泛型去重,如果泛型对象是对象类型去重需要重写equals 方法和hashCode 方法; 将过滤后的值转换成list 需要用到collect(Collectors.toList())方法,set 则是Collectors.to Set()方法!

2.Collectors.groupingBy 分组方法

Map>groupPeerId=result.stream()

.collect(Collectors.groupingBy(TJcArtScore::getPeerLetterId));

方法:Collectors.groupingBy 可以把 result 这个list 按照 peerLetterid 进行分组;

3.循环Map方法

Map>gropPeerIds 改对象可以用gropPeerIds.forEach((k, v) -> {}) 方法进行循环map 其中k 是键,v是value

4.使用filter 和flatMap方法筛选和数组降维

样例1:

List desPaths = v.stream()

.filter(path->StringUtils.isNotBlank(path.getPdfPath()))

.flatMap(path->(JSON.parseArray(path.getPdfPath(),String.clas s)).stream()).collect(Collectors.toList());

这段代码中 filter 方法可以在循环 v 这个list 时通过filter 条件过滤掉某些

无用对象,flatMap 方法可以将v list中子集对象 path 中的某个是集合的属性,

或者可以转换成集合的属性进行降维,把2维数组换成一维数组;

样例2:

List splitHotWord = groupHotWord.stream().flatMap(group -> Stream.of(group.split(","))).collect(Collectors.toList());

5.使用sorted方法组合排序(注意别踩reversed() 坑)

使用年龄进行降序排序,年龄相同再使用身高升序排序:

//排序前输出

StudentInfo.printStudents(studentList);

//按年龄排序(Integer类型)

List studentsSortName = studentList.stream()

.sorted(https://www.360docs.net/doc/6413087770.html,paring(StudentInfo::getAge).reversed().thenComparing(StudentInfo: :getHeight))

.collect(Collectors.toList());

//排序后输出

StudentInfo.printStudents(studentsSortName);

使用年龄进行降序排序,年龄相同再使用身高降序排序:

List studentsSortName = studentList.stream()

.sorted(https://www.360docs.net/doc/6413087770.html,paring(StudentInfo::getAge).thenComparing(StudentInfo::getHeight) .reversed())

.collect(Collectors.toList());

使用年龄进行升序排序,年龄相同再使用身高降序排序:

List studentsSortName = studentList.stream()

.sorted(https://www.360docs.net/doc/6413087770.html,paring(StudentInfo::getAge).reversed().thenComparing(StudentInfo: :getHeight) .reversed())

.collect(Collectors.toList());

2CompletableFuture 组合式异步编程:

?创建异步计算并获取计算结果.

?使用非阻塞操作提升吞吐量.

?设计和实现异步API.

?如何以异步的方式使用同步的API.

?如何对两个或多个异步操作进行流水线和合并操作.

?如何处理异步操作的完成状态.

现在,很少有网站或者网络应用会以完全隔离的方式工作。更多的时候,我们看到

的下一代网络应用都采用“混聚”(mash-up)的方式:它会使用来自多个来源的内容,将这些内容聚合在一起,方便用户的生活。

可是,你并不希望因为等待某些服务的响应,阻塞应用程序的运行,浪费数十亿宝贵的CPU时钟周期。

那么其实你真正想做的是避免因为等待远程服务的返回,或者对数据库的查询等,而阻塞当前线程的执行,浪费宝贵的CPU资源,因为这种等待的时间很坑相当长.

通过本文你将会了解到java5中的Future接口和jav8中对它更加完善的CompletableFuture接口.

2.1 使用CompletableFuture 构建异步应用:

接下来,你会了解新的CompletableFuture 类(它实现了Future 接口)如何利用Java 8 的新特性以更直观的方式将上述需求都变为可能。Stream 和CompletableFuture 的设计都遵循了类似的模式:它们都使用了Lambda表达式以及流水线的思想。从这个角度,你可以说 CompletableFuture 和Future 的关系就跟Stream 和Collection 的关系一样。

2.2 使用CompletableFuture作为简单的Future:

首先,CompletableFuture类实现Future接口,因此您可以将其用作Future实现,但具有额外的完成逻辑。

例如,您可以使用no-arg构造函数创建此类的实例,以表示Future的某些结果,将其交给使用者,并在将来的某个时间使用complete方法完成。消费者可以使用get方法来阻止当前线程,直到提供此结果。

在下面的示例中,我们有一个创建CompletableFuture实例的方法,然后在另一个线程中旋转一些计算并立即返回Future。

计算完成后,该方法通过将结果提供给完整方法来完成Future:

public Future calculateAsync() throws InterruptedException { CompletableFuture completableFuture =new CompletableFuture<>();

Executors.newCachedThreadPool().submit(() -> {

Thread.sleep(500);

https://www.360docs.net/doc/6413087770.html,plete("Hello");

return null;

});

return completableFuture;

}

为了分离计算,我们使用了“Java中的线程池简介”一文中描述的Executor API ,但是这种创建和完成CompletableFuture的方法可以与任何并发机制或API(包括原始线程)一起使用。

请注意,该calculateAsync方法返回一个Future的实例。

我们只是调用方法,接收Future实例并在我们准备阻塞结果时调用它的get方法。

另请注意,get方法抛出一些已检查的异常,即ExecutionException(封装计算期间发生的异常)和InterruptedException(表示执行方法的线程被中断的异常):

Future completableFuture =calculateAsync();

// ...

String result = completableFuture.get();

assertEquals("Hello", result);

作为替代方案,您可能希望取消Future的执行。

假设我们没有设法找到结果并决定完全取消异步执行。这可以通过Future的取消方法(cancel)完成。此方法接收布尔参数mayInterruptIfRunning,但在CompletableFuture的情况下,它没有任何效果,因为中断不用于控制CompletableFuture的处理。

这是异步方法的修改版本:

public Future calculateAsyncWithCancellation() throws InterruptedException{ CompletableFuture completableFuture =new CompletableFuture<>();

Executors.newCachedThreadPool().submit(() -> {

Thread.sleep(500);

completableFuture.cancel(false);

return null;

});

return completableFuture;}

当我们使用Future.get()方法阻塞结果时,如果取消Future的cancel,它将抛出CancellationException:

Future future =calculateAsyncWithCancellation();

future.get(); // CancellationException

其中get (long timeout, TimeUnit unit)方法可以设置超时时长,超过时间没有结果则报错中断

2.3 具有封装计算逻辑的CompletableFuture

静态方法runAsync和supplyAsync允许我们相应地从Runnable和Supplier功能类型中创建CompletableFuture实例。

双方可运行和供应商的功能接口,允许得益于通过他们实例作为lambda表达式新的Java 8的功能。

该Runnable的接口是在线程使用相同的旧的接口,它不允许返回值。

的供应商接口与不具有参数,并返回参数化类型的一个值的单个方法的通用功能接口。

这允许将Supplier的实例作为lambda表达式提供,该表达式执行计算并返回结果。这很简单

CompletableFuture future = CompletableFuture.supplyAsync(() ->"Hello");

// ...

assertEquals("Hello", future.get());

"Hello" 可以是一个对象也可以是一个方法supplyAsync 方法入参中包含一个

@FunctionalInterface和一个Executor可以说明该方法能调用业务方法被线程池统一管理2.4 处理异步计算的结果

处理计算结果的最通用方法是将其提供给函数。该thenApply方法正是这么做的:接受一个函数实例,用它来处理结果,并返回一个future的保存函数的返回值:

thenApply:接受一个Function参数用来转换CompletableFuture CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello");

CompletableFuture future = completableFuture.thenApply(s -> s +" World");

assertEquals("Hello World", future.get());

如果您不需要在Future链中返回值,则可以使用Consumer功能接口的实例。它的单个方法接受一个参数并返回void。

在CompletableFuture中有一个用于此用例的方法- thenAccept方法接收Consumer并将计

算结果传递给它。最后的future.get()调用返回Void类型的实例。

CompletableFuture completableFuture = CompletableFuture.supplyAsync(() ->"Hello");

CompletableFuture future = completableFuture.thenAccept(s -> System.out.println("Computation returned: "+ s));

future.get();

最后,如果您既不需要计算的值也不想在链的末尾返回一些值,那么您可以将Runnable lambda 传递给thenRun方法。在下面的示例中,在调用future.get()方法之后,我们只需在控制台中打印一行

CompletableFuture completableFuture = CompletableFuture.supplyAsync(() ->"Hello");

CompletableFuture future = completableFuture.thenRun(()->System.out.println("Computation finished."));

future.get();

组合

thenCombineAsync(CompletionStage other, BiFunction fn, Executor executor)

以下是源码:

public CompletableFuture thenCombine(

CompletionStage other,

BiFunction fn) { return biApplyStage(null, other, fn);

}

可见该方法入参是一个CompletableFuture 和一个函数,函数的第一个入参为thenCombine 所持有的CompletableFuture 结果,第二个入参是 other 对应的 CompletableFuture 结果,返回一个任意自定义类的V结果

代码样例1:

@Autowired

@Qualifier("textCorrectExecutor")

private Executor textCorrectExecutor;

@Value("${zhxf.text.correct.timeout}")

private long textCorrectTimeout;

// 二个 CompletableFuture的组合使用

public List checkText(String summary, String id)

throws Exception {

CompletableFuture> correctApiAndAnalyse = CompletableFuture.supplyAsync(() -> { try {

return invokeAndAnalyse(summary, id);

} catch (MyException e) {

return Collections.emptyList();

}

}, textCorrectExecutor);

CompletableFuture> firstPersonFun = CompletableFuture.supplyAsync(() ->

getFirstPerson(summary), textCorrectExecutor);

//merge两个list并排序

CompletableFuture> f3 = correctApiAndAnalyse.thenCombineAsync(firstPersonFun, (textDetail, firstPersonDetail) -> {

firstPersonDetail.forEach(firstPersonDetailInfo ->

mergeList(textDetail, firstPersonDetailInfo.getPosbegin(),

firstPersonDetailInfo.getDetailInfo().get(0)));

//textDetail 进行排序

textDetail.sort(https://www.360docs.net/doc/6413087770.html,paring(TextDetailInfo::getPosbegin));

return textDetail;

}, textCorrectExecutor);

//10s没有收到返回结果,直接抛错设置为可配置。

return f3.get(textCorrectTimeout, TimeUnit.SECONDS);

}

代码样例2:

// 第一个 CompletableFuture

CompletableFuture completableFuture = CompletableFuture .supplyAsync(() -> {

try {

return asynchSupportService.addResultByPic(vo);

} catch (UnsupportedEncodingException | MyException e) {

e.printStackTrace();

}

return null;

});

//第二个 CompletableFuture

CompletableFuture completableFuture1 = CompletableFuture .supplyAsync(() -> {

try {

return asynchSupportService.addResultByPic(vo);

} catch (UnsupportedEncodingException | MyException e) {

e.printStackTrace();

}

return null;

});

// 第三个 CompletableFuture

CompletableFuture completableFuture2 = CompletableFuture .supplyAsync(() -> {

try {

return asynchSupportService.addResultByPic(vo);

} catch (UnsupportedEncodingException | MyException e) {

e.printStackTrace();

}

return null;

});

// 组合多个 CompletableFuture

CompletableFuture> comp =

completableFuture2.thenCombine(completableFuture1, (f2,f1)->{

List ee = new ArrayList<>();

ee.add(f2);

ee.add(f1);

return ee;

}).thenCombine(completableFuture, (fs,f0) ->{

fs.add(f0);

return fs;

});

/**

* 获取图片判重列表

* @param vo

* @param litters

* @throws UnsupportedEncodingException

* @throws MyException

*/

public SimLettersEntity addResultByPic(SimilarVo vo) throws UnsupportedEncodingException, MyException {

return new SimLettersEntity();

}

Java 8新特性探究(4)-类型注解 复杂还是便捷

Java 8新特性探究(4):类型注解复杂还是便捷 注解大家都知道,从java5开始加入这一特性,发展到现在已然是遍地开花,在很多框架中得到了广泛的使用,用来简化程序中的配置。那充满争议的类型注解究竟是什么?复杂还是便捷? AD: 注解大家都知道,从java5开始加入这一特性,发展到现在已然是遍地开花,在很多框架中得到了广泛的使用,用来简化程序中的配置。那充满争议的类型注解究竟是什么?复杂还是便捷? 什么是类型注解 在java 8之前,注解只能是在声明的地方所使用,比如类,方法,属性;java 8里面,注解可以应用在任何地方,比如: 创建类实例 new @Interned MyObject(); 类型映射 myString = (@NonNull String) str; implements 语句中 class UnmodifiableList T implements @Readonly List @Readonly T { ... } throw exception声明 void monitorTemperature() throws @Critical TemperatureException { ... } 需要注意的是,类型注解只是语法而不是语义,并不会影响java的编译时间,加载时间,以及运行时间,也就是说,编译成class文件的时候并不包含类型注解。 类型注解的作用 先看看下面代码 Collections.emptyList().add( One );inti=Integer.parseInt( hello );System.console ().readLine(); 上面的代码编译是通过的,但运行是会分别报UnsupportedOperationException;NumberFormatException;NullPointerException异常,这些都是runtime error; 类型注解被用来支持在Java的程序中做强类型检查。配合插件式的check framework,可以在编译的时候检测出runtime error,以提高代码质量。这就是类型注解的作用了。 check framework check framework是第三方工具,配合Java的类型注解效果就是1+1 2。它可以嵌入到javac 编译器里面,可以配合ant和maven使用,也可以作为eclipse插件。地址是checker-framework。 check framework可以找到类型注解出现的地方并检查,举个简单的例子: importcheckers.nullness.quals.*;publicclassGetStarted{voidsample(){@NonNullObjec tref=newObject();}} 使用javac编译上面的类 javac-processorcheckers.nullness.NullnessCheckerGetStarted.java 编译是通过,但如果修改成 @NonNullObjectref=null; 再次编译,则出现 GetStarted.java:5:incompatibletypes.found:@Nullable nulltype

公务员考试十大数字推理规律详解

公务员考试十大数字推理规律详解 (2009-6-11 上午 07:55:46) 备考规律一:等差数列及其变式 【例题】7,11,15,( ) A 19 B 20 C 22 D 25 【答案】A选项 【广州新东方戴斌解析】这是一个典型的等差数列,即后面的数字与前面数字之间的差等于一个常数。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间也满足此规律,那么在此基础上对未知的一项进行推理,即15+4=19,第四项应该是19,即答案为A。 (一)等差数列的变形一: 【例题】7,11,16,22,( ) A.28 B.29 C.32 D.33 【答案】B选项 【广州新东方戴斌解析】这是一个典型的等差数列的变形,即后面的数字与前面数字之间的差是存在一定的规律的,这个规律是一种等差的规律。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间的差值是5;第四个与第三个数字之间的差值是6。假设第五个与第四个数字之间的差值是X,我们发现数值之间的差值分别为4,5,6,X。很明显数值之间的差值形成了一个新的等差数列,由此可以推出X=7,则第五个数为22+7=29。即答案为B选项。 (二)等差数列的变形二: 【例题】7,11,13,14,( ) A.15 B.14.5 C.16 D.17 【答案】B选项 【广州新东方戴斌解析】这也是一个典型的等差数列的变形,即后面的数字与前面数字之间的差是存在一定的规律的,但这个规律是一种等比的规律。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间的差值是2;第四个与第三个数字之间的差值是1。假设第五个与第四个数字之间的差值是X。 我们发现数值之间的差值分别为4,2,1,X。很明显数值之间的差值形成了一个新的等差数列,由此可以推出X=0.5,则第五个数为14+0.5=14.5。即答案为B选项。 (三)等差数列的变形三: 【例题】7,11,6,12,( ) A.5 B.4 C.16 D.15 【答案】A选项 【广州新东方戴斌解析】这也是一个典型的等差数列的变形,即后面的数字与前面数字之间的差是存在一定的规律的,但这个规律是一种正负号进行交叉变换的规律。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间的差值是-5;第四个与第三个数字之间的差值是6。假设第五个与第四个数字之间的差值是X。 我们发现数值之间的差值分别为4,-5,6,X。很明显数值之间的差值形成了

Java 1.7的新特性

内容如下: 下面是Java 1.7里新出现的功能的一些用法例子: 对集合的支持 创建List / Set / Map 时写法更简单了。 1.Listlist = ["item"]; 2.String item = list[0]; 3.Setset = {"item"}; 4.Mapmap = {"key" : 1}; 5.int value = map["key"]; 对资源的自动回收管理 下面的代码看起来有点麻烦… 不是吗 1.BufferedReader br = new BufferedReader(new FileReader(p ath)); 2.try { 3. return br.readLine(); 4.} finally { 5. br.close(); 6.} 相信你一定会喜欢下面这种写法 1.try (BufferedReader br = new BufferedReader(new FileRea der(path)) { 2. return br.readLine(); 3.} 泛型实例创建过程中类型引用的简化当声明你的对象的接口是,你肯定是不想重复指明泛型类型 看看下面的这种写法多好呀… 1. 2.Maphello = new Map<>(); 在数字中使用下划线

1.int billion = 1_000_000_000; 我不知道这个能有多少用处 对字符串进行switch case 1.String availability = "available"; 2.switch(availability) { 3. case "available": 4. //code 5. break; 6. 7. case "unavailable": 8. //code 9. break; 10. 11. case "merged": 12. //code 13. 14. default: 15. //code 16. break; 17.} 注意:在把字符串传进Switch case之前,别忘了检查字符串是否为Null。 二进制符号 你可用作二进制字符前加上0b 来创建一个二进制类型。 1.int binary = 0b1001_1001; 一个catch里捕捉多个异常类型 1.try { 2.Here comes your code.... 3.} 4.catch(IOException | NullPointerException | ..........) { 5.} 如果有人能说出更多的新特征,那就更好了。我相信里面有更多的很酷的新东西。

JAVA8-新特性总结及案例

一 Lambda函数(箭头函数) Lambda 表达式,也可称为闭包,它是推动Java 8 发布の最重要新特性。Lambda 允许把函数作为一个方法の参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变の更加简洁紧凑。 (parameters) ->expression或(parameters) ->{ statement1; statement2; ...... } lambda表达式の重要特征: 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选の参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选の大括号:如果主体包含了一个语句,就不需要使用大括号。 可选の返回关键字:如果主体只有一个表达式返回值则编译器会自动返回,大括号需指定表达式返回数值。 本质上,Lambda函数是对匿名内部类对象の简写。 应用举例1(比较JAVA7与JAVA8):Lambda函数做类の属性 运行结果: 应用举例2(比较JAVA7与JAVA8):Lambda函数做main函数变量

应用举例3: 应用举例4:多线程启动时使用Lambda函数

应用举例5:在 1.7中,匿名内部类只能使用定义为finalの外部变量,1.8会自动为Lambda函数使用の外部变量加上final,因此final可以省略不写。

二方法引用(::方法名 ----》调用了方法对象)应用举例1:

应用举例2:

三函数式接口 函数式接口(Functional Interface)就是一个具有一个方法の普通接口。函数式接口可以被隐式转换为lambda表达式。 函数式接口可以现有の函数友好地支持 lambda。 JDK 1.8之前已有の函数式接口: https://www.360docs.net/doc/6413087770.html,ng.Runnable java.util.concurrent.Callable java.security.PrivilegedAction https://www.360docs.net/doc/6413087770.html,parator

总结数字推理十大规律1

总结数字推理十大规律(四) 2010-01-14 安徽公务员考试网【字体: 】 备考规律七:求差相减式数列 规律点拨:在国考中经常看到有“第一项减去第二项等于第三项”这种规律的数列,以下李老师和大家一起来探讨该类型的数列 【例题】8,5,3,2,1,() A.0 B.1 C.-1 D.-2 备考规律八:“平方数”数列及其变式 【例题】1,4,9,16,25,() A.36 B.28 C.32 D.40 (一)“平方数”数列的变形一: 【例题】0,3,8,15,24,() A.35 B.28 C.32 D.40 【例题变形】2,5,10,17,26,() A.37 B.38 C.32 D.40 (二)“平方数”数列的变形二: 【例题】2,6,12,20,30,() A.42 B.38 C.32 D.40 更多详情请查询:安徽公务员考试网(https://www.360docs.net/doc/6413087770.html,/) 【答案】B选项 解析】这题与“求和相加式的数列”有点不同的是,这题属于相减形式,即“第一项减去第二项等于第三项”。我们看第一项8与第二项5的差等于第三项3;第二项5与第三项3的差等

于第三项2;第三项3与第四项2的差等于第五项1; 同理,我们推敲,第六项应该是第四项2与第五项1的差,即等于0;所以A选项正确。【答案】A选项 【解析】这是一个典型的“平方数”的数列,即第一项是1的平方,第二项是2的平方,第三项是3的平方,第四项是4的平方,第五项是5的平方。同理我们推出第六项应是6的平方。所以A选项正确。 【答案】A选项 【解析】这是一个典型的“立方数”的数列,其规律是每一个平方数减去一个常数,即第一项是1的平方减去1,第二项是2的平方减去1,第三项是3的平方减去1,第四项是4的平方减去1,第五项是5的平方减去1.同理我们推出第六项应是6的平方减去1.所以A选项正确。 题目规律的延伸:既然可以是“每一个立方数减去一个常数”,李老师认为就一定可以演变成“每一个立方数加上一个常数”。就上面那道题目而言,同样可以做一个变形: 【答案】A选项 【解析】这是一个典型的“平方数”的数列,其规律是每一个平方数减去一个常数,即第一项是1的平方加上1,第二项是2的平方加上1,第三项是3的平方加上1,第四项是4的平方加上1,第五项是5的平方加上1.同理我们推出第六项应是6的平方加上1.所以A选项正确。 【答案】A选项 【解析】这就是一个典型的“平方数”的数列变形,其规律是每一个立方数加去一个数值,而这个数值本身就是有一定规律的。即第一项是1的平方加上1,第二项是2的平方加上2,第三项是3的平方加上3,第四项是4的平方加上4,第五项是5的平方加上5.同理我们假设推出第六项应是6的平方加上X.而把各种数值摆出来分别是:1,2,3,4,5,X.由此我们可以得出X=6,即第六项是6的平方加上6,所以A选项正确。

史上最全Java基础知识点归纳

史上最全Java基础知识点归纳 写这篇文章的目的是想总结一下自己这么多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java 程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE 相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资

深开发者来说,不会JVM几乎是不可接受的。 JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump,分析内存结构 class二进制字节码结构,class loader体系,class加载过程,实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2.Java的运行(基础必备) 这条可能出看很简单,Java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行Java程序,底层IDE又是如何执行Java程序呢?很多人并不了解。

JAVA发展史详细版

JAVA发展史 从JDK诞生到现在已经有15年的时间了。沧海桑田一瞬间。转眼15年过去了,JDK已经发布了6个版本。在这15年里诞生了无数和Java相关的技术和标准。现在让我们进入时间隧道,重新回到1995年,再来回顾一下Java的发展轨迹和历史变迁。 一、 JDK前传 在这个世界上,熟悉Java历史的人非常多,如果要问一个人Java是从哪年诞生的,也许大多数人都会回答是1995年(这个非常好记,因为微软的Windows95也是在这一年发布的)。但事实上Java早在上个世纪90年代初就开始酝酿了。 1991年4月,Sun公司的James Gosling领导的绿色计划(Green Project)开始着力发展一种分布式系统结构,使其能够在各种消费性电子产品上运行。而Green项目组的成员一开始使用C++语言来完成这个项目,由于Green项目组的成员都具有C++背景,所以他们首先把目光锁定了C++编译器,Gosling首先改写了C++编译器,但很快他就感到C++的很多不足,需要研发一种新的语言Java来替代它,一杯飘香的咖啡成为了它的标志。 在17 个月后,整个系统完成了,这个系统是更注重机顶盒式的操作系统,不过在当时市场不成熟的情况下,他们的项目没有获得成功,但Java语言却得到了Sun总裁McNealy 的赏识。 直至 1994年下半年,由于Internet的迅猛发展和环球信息网 WWW的快速增长,第一个全球信息网络浏览器Mosaic诞生了;此时,工业界对适合在网络异构环境下使用的语言有一种非常急迫的需求;Games Gosling决定改变绿色计划的发展方向,他们对Oak进行了小规模的改造,就这样,Java在1995年的3月23日诞生了!Java的诞生标志着互联网时代的开始,它能够被应用在全球信息网络的平台上编写互动性及强的Applet程序,而1995年的Applet无疑能给人们无穷的视觉和脑力震荡。我们姑且将Java的这段历史称为Java 前传吧。 其实Java的诞生颇有那么一股“有心栽花花不开,无心插柳柳成阴”的味道。就象当年Unix和它的前身MULTICS系统一样。 二、JDK的幼年时期(1995~1998) Sun继Green项目后又经过了几年的研究,终于在1995年5月23日在SunWorld'95上正式发布Java和HotJava浏览器。在同年,有很多公司先后获得了Java许可证,如Netscape 在1995年8月,Oracle在1995年10月分别获得了Java许可证。Sun在 1995年发布第一个Java版本后,于1996年1月宣布成立新的业务部门──JavaSoft部,这个部分主要负责开发、销售并支持基于Java技术的产品,由AlanBaratz先生任总裁。 在1995年Sun虽然推出了Java,但这只是一种语言,而要想开发复杂的应用程序,必须要有一个的强大的开发库支持还行。因此,Sun在1996 年1月23日发布了JDK1.0。这个版本包括了两部分:运行环境(即JRE)和开发环境(即JDK)。在运行环境中包括了核心API、集成API,用户界面API,发布技术,Java虚拟机(JVM)五个部分。而开发环境还包括

数字推理规律总结

<2>表格形式数字推理 行间运算规律:行间运算规律主要是每行两个数字简单运算得到第三个数.主要有下面三种形式: 每行前两个数运算得到第三个数. 每行后两个数运算得到第一个数. 每行第一个数和第三个数运算得到中间数字. <3> 三角形形式数字推理 三角形数字推理的规律通常是寻找三角形的数字与中心数字之间的联系 一、圆圈形数字推理 1、考虑对角数字和周围数字 【例】 A.27 B. 21 C. 16 D. 11 【答案】C 【解题关键点】考虑对角数字和周围数字 5×8+(13+7)=2,3×12+(3+15)=2,15×4+(19+11)=2 2、考虑四周数字得到中间数字的方式 解题思想 1.思考角度:一般由四周向中间位置的数靠拢。 2.运算关系:一般各数之间为“加减乘除”关系,其中加法、减法、乘法是最常见的运算方法。 3.组合关系:一般采用上下、左右、对角三种组合关系。 4.如果中间位置的数是质数,那么一般是通过加法或减法向中间位置靠拢;如果中间位置的数是合数(特别的一些质数也可分解为其与1的乘积),则可以首先将中间位置拆分成 两个(或三个)因数的乘积,再将已知数向因数靠拢,也可以通过加减法向中间位置数靠拢。 5.如果中间位置数值较大,而其他数值较小,则考虑运算中含有乘法关系。 6.作减法和除法时,注意减数和被减数、除数和被除数的位置关系。 要点提示 奇偶数之间有如下的运算法则: 偶数±偶数=偶数,奇数±奇数=偶数,奇数±偶数=奇数 偶数×偶数=偶数,奇数×奇数=奇数,奇数×偶数=偶数 根据以上法则可以得到以下规律: (1)几个偶数之间做四则运算无法得到一个奇数。 (2)偶数个奇数之间的无法通过加法得到一个奇数,偶数个奇数之间无法

java特点、优劣势

优劣势 java优势,是适合团队开发,软件工程可以相对做到规范,这是一个很难比拟的优势。 java劣势,是j2ee的架构很完美,第一版软件可以做满意,但是很不适合互联网模式的持续不断修改。互联网软件工程管理上的不足,持续的修修补补导致架构的破坏。系统更新需要重启web服务,很难接受。 编辑本段基本概念 final类:为防止他人从你的类上派生新类,此类是不可扩展的。 多态类:在java中,对象变量是多态的。而java中不支持多重继承。 抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。 接口:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 Java中的每一个类都是从Object类扩展而来的。 object类中的equal和toString方法。 equal用于测试一个对象是否同另一个对象相等。 toString返回一个代表该对象的字符串,每一个类都会从Object类继承该方法,有些类重写了该方法,以便返回当前状态的正确表示。 (toString 方法是一个很重要的方法) 通用编程:任何类类型的所有值都可以同object类型的变量来代替。 封装:就是把数据和行为结合起在一个包中,并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。 重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载。编译器必须挑选出调用哪个方法。 重写:在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。 数组列表:ArrayList动态数组列表,是一个类库,定义在java.util 包中,可自动调节数组的大小。

数字推理题的各种规律

数字推理题的各种规律 一.题型: ●等差数列及其变式 【例题1】2,5,8,() A 10 B 11 C 12 D 13 【解答】从上题的前3 个数字可以看出这是一个典型的等差数列,即后面的数字与前面数字之间的差等于一个常数.题中第二个数字为5,第一个数字为2,两者的差为3,由观察得知第三个、第二个数字也满足此规律,那么在此基础上对未知的一项进行推理,即8+3=11,第四项应该是11,即答案为B. 【例题2】3,4,6,9,(),18 A 11 B 12 C 13 D 14 【解答】答案为C.这道题表面看起来没有什么规律,但稍加改变处理,就成为一道非常容易的题目.顺次将数列的后项与前项相减,得到的差构成等差数列1,2,3,4,5,…….显然,括号的数字应填13.在这种题中,虽然相邻两项之差不是一个常数,但这些数字之间有着很明显的规律性,可以把它们称为等差数列的变式. ●等比数列及其变式 【例题3】3,9,27,81() A 243 B 342 C 433 D 135 【解答】答案为A.这也是一种最基本的排列方式,等比数列.其特点为相邻两个数字之间的商是一个常数.该题中后项与前项相除得数均为3,故括号的数字应填243. 【例题4】8,8,12,24,60,() A 90 B 120 C 180 D 240 【解答】答案为C.该题难度较大,可以视为等比数列的一个变形.题目中相邻两个数字之间后一项除以前一项得到的商并不是一个常数,但它们是按照一定规律排列的;1,1.5,2,2.5,3,因此括号的数字应为60×3=180.这种规律对于没有类似实践经验的应试者往往很难想到.我们在这里作为例题专门加以强调.该题是1997 年中央国家机关录用大学毕业生考试的原题. 【例题5】8,14,26,50,() A 76 B 98 C 100 D 104 【解答】答案为B.这也是一道等比数列的变式,前后两项不是直接的比例关系,而是中间绕了一个弯,前一项的2 倍减2 之后得到后一项.故括号的数字应为50×2-2=98. ●等差与等比混合式 【例题6】5,4,10,8,15,16,(),() A 20,18 B 18,32 C 20,32 D 18,32 【解答】此题是一道典型的等差、等比数列的混合题.其中奇数项是以5 为首项、等差为5 的等差数

windows xp下安装java8(jdk8)

windows xp下安装java8(jdk8) 分步阅读 java8已经正式发布有一段日子了,带来了令人振奋的新特性。但是java8有一个无法接受的特点就是不支持windows XP。安装时会报出[无法定位程序输入点RegDeleteKeyExA 于动态链接库ADVAPI32.dll 上。]错误。如下图所示,此文就为大家分享如何解决此恶心问题 工具/原料 ?jdk8安装包 ?7-zip解压工具 方法/步骤 1. 1 下载jdk8安装包,地址: https://www.360docs.net/doc/6413087770.html,/technetwork/java/javase/downloads/jdk8-do wnloads-2133151.html 2. 2 下载7-zip解压工具包并安装,地址: 32位版:https://www.360docs.net/doc/6413087770.html,/sevenzip/7z920.exe

64位版:https://www.360docs.net/doc/6413087770.html,/sevenzip/7z920-x64.msi 3. 3 将下载所得java安装包放到将要安装的jdk路径下,我是放在C:\Program Files\Java\jdk8下的;使用7-zip解压工具将安装包解压到当前目录下得到tools.zip包 4. 4 将提取到的tools.zip再次通过7-zip解压到当前目录下得到jdk文件: bin db include jre lib LICENSE

README.html THIRDPARTY LICENSEREADME-JAVAFX.txt THIRDPARTY LICENSEREADME.txt javafx-src.zip release 5. 5 打开lib目录你会发现以前的tools.jar变成了tools.pack以及jre/lib下的rt.jar变成了rt.pack

行政能力测试数字推理的规律及其解题过程(备考)

行政能力测试数字推理的规律及其解题过程在实际解题过程中,根据相邻数之间的关系分为两大类: 一、相邻数之间通过加、减、乘、除、平方、开方等方式发生联系,产生规律,主要有以下几种规律: 1、相邻两个数加、减、乘、除等于第三数 2、相邻两个数加、减、乘、除后再加或者减一个常数等于第三数 3、等差数列:数列中各个数字成等差数列 4、二级等差:数列中相邻两个数相减后的差值成等差数列 5、等比数列:数列中相邻两个数的比值相等 6、二级等比:数列中相邻两个数相减后的差值成等比数列 7、前一个数的平方等于第二个数 8、前一个数的平方再加或者减一个常数等于第二个数; 9、前一个数乘一个倍数加减一个常数等于第二个数; 10、隔项数列:数列相隔两项呈现一定规律, 11、全奇、全偶数列 12、排序数列 二、数列中每一个数字本身构成特点形成各个数字之间的规律。 1、数列中每一个数字都是n 的平方构成或者是n 的平方加减一个常数构成,或者是n的平方加减n构成 2、每一个数字都是n的立方构成或者是n的立方加减一个常数构成,或者是n的立方加减n 3、数列中每一个数字都是n的倍数加减一个常数 以上是数字推理的一些基本规律,必须掌握。但掌握这些规律后,怎样运用这些规律以最快的方式来解决问题呢?

这就需要在对各种题型认真练习的基础上,应逐步形成自己的一套解题思路和技巧。 第一步,观察数列特点,看是否存是隔项数列,如果是,那么相隔各项按照数列的各种规律来解答 第二步,如果不是隔项数列,那么从数字的相邻关系入手,看数列中相邻数字在加减乘除后符合上述的哪种规律,然后得出答案。 第三步,如果上述办法行不通,那么寻找数列中每一个数字在构成上的特点,寻找规律。 当然,也可以先寻找数字构成的规律,在从数字相邻关系上规律。这里所介绍的是数字推理的一般规律,在对各种基本题型和规律掌握后,很多题是可以直接通过观察和心算得出答案。 数字推理题的一些经验 1)等差,等比这种最简单的不用多说,深一点就是在等差,等比上再加、减一个数列,如24,70,208,622,规律为a*3-2=b 2)深一点模式,各数之间的差有规律,如 1、2、5、10、17。它们之间的差为1、3、5、7,成等差数列。这些规律还有差之间成等比之类。B,各数之间的和有规律,如1、2、3、5、8、13,前两个数相加等于后一个数。 3)看各数的大小组合规律,做出合理的分组。如 7,9,40,74,1526,5436,7和9,40和74,1526和5436这三组各自是大致处于同一大小级,那规律就要从组方面考虑,即不把它们看作6个数,而应该看作3个组。而组和组之间的差距不是很大,用乘法就能从一个组过渡到另一个组。所以7*7-9=40 , 9*9-7=74 , 40*40-74=1526 , 74*74-40=5436,这就是规律。 4)如根据大小不能分组的,A,看首尾关系,如7,10,9,12,11,14,这组数 7+14=10+11=9+12。首尾关系 经常被忽略,但又是很简单的规律。B,数的大小排列看似无序的,可以看它们之间的差与和有没有顺序关系。 5)各数间相差较大,但又不相差大得离谱,就要考虑乘方,这就要看各位对数字敏感程度了。如6、24、60、 120、210,感觉它们之间的差越来越大,但这组数又看着比较舒服(个人感觉,嘿嘿),它们的

Java培训大纲

MLDN 人才培养大纲(V 3.0) 1、魔乐科技软件学院(MLDN) 魔乐科技软件学院,位于中关村科技园区德胜科技园内,是一家从事高端JAVA技术培养的技术公司,由各大型软件 企业的高级软件开发工程师、系统架构师等技术骨干组成的高端IT人才培养公司,致力于培养Linux平台、Oracle大型关系数据库、JAVA EE技术、Android开发者和企业级应用的中高级软件人才。自成立以来,为各大型软件公司输送了大量的 中、高级人才,其中,也有不少学员就业于IBM、新浪、中科软等大型公司,受到各用人单位的好评。 2、培养目标:高级软件开发工程师 本中心专注于培养企业需求量大、就业率高,但人才市场紧缺的面向行业的Java EE架构和开源的Struts/Struts 2.0/Hibernate/Spring框架和开源的JBoss/Tomcat中间件服务器、面向,Oracle、MySQL数据库,精通Java开发语言,精通Android 3G技术开发的中高级软件工程师。成绩合格的毕业生将具备1-2年大型软件设计及开发经验。 3、完备合理的知识学习体系 ·操作系统:Windows Linux ·中间件:Tomcat JBoss ·数据库:MySQL Oracle ·JAVA SE:环境搭建基础程序面向对象应用程序 Java新特性 JDBC ·JAVA EE WEB:HTML JavaScript JSP JavaBean DAO Smartupload Servlet MVC ·开源框架:Struts 1.x AJAX Hibernate Spring Struts 2.0 JSF DWR JSON JQuery ·分布式开发:RMI Web Services EJB 3.0 ·搜索引擎:Lucene、HTMLParser、Heritrix ·工作流:JBPM ·XML:语法、解析 4、主流企业开发技术 JAVA SE / JAVA EE JBoss / Tomcat / MyEclipse Oracle / MySQL Struts / Struts 2.0 / Spring / Hibernate XML / EJB 3.0 / Web Services 5、“项目/案例”教学法-让你在培训期增加300%项目经验 本课程中采用众多的企业项目案例,由浅入深进行逐层讲解,每个项目都源自于真实项目,包括电信计费系统、信息

数字推理十大规律

备考规律一:等差数列及其变式 【例题】7,11,15,() A.19 B.20 C.22 D.25 【答案】A选项 【解析】这是一个典型的等差数列,即后面的数字与前面数字之间的差等于一个常数。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间也满足此规律,那么在此基础上对未知的一项进行推理,即15+4=19,第四项应该是19,即答案为A. (一)等差数列的变形一: 【例题】7,11,16,22,() A.28 B.29 C.32 D.33 【答案】B选项 【解析】这是一个典型的等差数列的变形,即后面的数字与前面数字之间的差是存在一定的规律的,这个规律是一种等差的规律。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间的差值是5;第四个与第三个数字之间的差值是6.假设第五个与第四个数字之间的差值是X, 我们发现数值之间的差值分别为4,5,6,X.很明显数值之间的差值形成了一个新的等差数列,由此可以推出X=7,则第五个数为22+7=29.即答案为B选项。 (二)等差数列的变形二: 【例题】7,11,13,14,() A.15 B.14.5 C.16 D.17 【答案】B选项 【解析】这也是一个典型的等差数列的变形,即后面的数字与前面数字之间的差是存在一定的规律的,但这个规律是一种等比的规律。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间的差值是2;第四个与第三个数字之间的

差值是1.假设第五个与第四个数字之间的差值是X. 我们发现数值之间的差值分别为4,2,1,X.很明显数值之间的差值形成了一个新的等差数列,由此可以推出X=0.5,则第五个数为14+0.5=14.5.即答案为B选项。 (三)等差数列的变形三: 【例题】7,11,6,12,() A.5 B.4 C.16 D.15 【答案】A选项 【解析】这也是一个典型的等差数列的变形,即后面的数字与前面数字之间的差是存在一定的规律的,但这个规律是一种正负号进行交叉变换的规律。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间的差值是-5;第四个与第三个数字之间的差值是6.假设第五个与第四个数字之间的差值是X. 我们发现数值之间的差值分别为4,-5,6,X.很明显数值之间的差值形成了一个新的等差数列,但各项之间的正负号是不同,由此可以推出X=-7,则第五个数为12+(-7)=5.即答案为A选项。 (三)等差数列的变形四: 【例题】7,11,16,10,3,11,() A.20 B.8 C.18 D.15 【答案】A选项 【解析】这也是最后一种典型的等差数列的变形,这是目前为止难度最大的一种变形,即后面的数字与前面数字之间的差是存在一定的规律的,但这个规律是一种正负号每“相隔两项”进行交叉变换的规律。题中第二个数字为11,第一个数字为7,两者的差为4,由观察得知第三个与第二个数字之间的差值是5;第四个与第三个数字之间的差值是-6,第五个与第四个数字之间的差值是-7.第六个与第五个数字之间的差值是8,假设第七个与第六个数字之间的差值是X. 总结一下我们发现数值之间的差值分别为4,5,-6,-7,8,X.很明显数值之间的差值形成了一个新的等差数列,但各项之间每“相隔两项”的正负号是不同的,由此可以推出X=9,则第七个数为11+9=20.即答案为A选项。 备考规律二:等比数列及其变式 【例题】4,8,16,32,() A.64

黑马集合知识测试(带解析)

集合部分测试题 考试宣言: 同学们,考试考多少分不是我们的目的!排在班级多少的名次也不是我们的初衷! 我的考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了,那么不用怕,考完试后,导师讲解的时候你要注意听!那时候学会了,记住了,也一样不影响你高薪就业!本套题共40道不定项选择题,其中单选30道,多选10道。单选2 分/题,多选4分/题。多选题不全对半分,全对满分。 1.单列集合的顶层接口是( ) a)java.util.Map b)java.util.Collection//这是单列集合的老大,必须记住 c)java.util.List d)java.util.Set 2.ArrayList类的底层数据结构是( ) a)数组结构//看名字也能猜出来底层的数据结构. b)链表结构 c)哈希表结构 d)红黑树结构 3.LinkedList类的特点是( ) a)查询快 b)增删快//由于底层是链表结构,所以增删快,查询慢.

c)元素不重复 d)元素自然排序 4.Vector类的特点是( ) a)线程同步//这是早期工具的特性之一,安全性高,后来出现的集合都是求效率.b)线程不同步 c)增删快 d)底层是链表结构 5.关于迭代器说法错误的是( ) a)迭代器是取出集合元素的方式 b)迭代器的hasNext()方法返回值是布尔类型 c)List集合有特有迭代器ListIterator d)next()方法将返回集合中的上一个元素//返回下一个元素. 6.在我们所学知识中,下面哪几项是接口( ) a) java.util.Map b) java.util.Collection c) java.util.List d) java.util.Set 7.实现下列哪个接口,可以启用比较功能( ) a)Runnable接口 b)Iterator接口 c)Serializable接口

数字推理解题技巧

数字推理解题技巧 文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-

数字推理是我国目前所有公务员考试行政能力测试的必考题形之一,主要考察考生对数字和基本数列的敏感程度,也是反映考生基本思维能力的重要手段。增加这方面的练习也能有效的锻炼考生正确的思维方式,对图形推理和类比推理等一些题型的深度把握也有重要的意义。今天,我们就来讲一讲,数字推理中应用到的三种思维模式。 首先我们要说的是三种思维模式中的第一种,也是最基本的思维模式,那就是横向递推的思维模式。 横向递推的思维模式是指在一组数列中,由数字的前几项,经过一定的线性组合,得到下一项的思维模式。举个简单的例子。 5 11 23 47 ( ) 根据横向递推的思维模式,思考方向是如何从5得到11,会想到乘2再加1,按照这样的思路继续向下推,发现,每一项都是前一项的2倍再加1,于是找出规律,这里应该填95。 再举一例。 2 3 5 8 13 ( ) 这个数列是大家都比较熟悉的一个基本数列,和数列。这一类数列是前几项加和会得到下一项。这里应该填8于13的和,21。 我们总结一下横向递推思维模式的解题思路特点,在这种思维模式的指导下,我们总是习惯于在给出数列的本身上去找连续几项之间的线性组合规律,这也是这一思维模式的根本所在。 相较于横向递推思维模式,稍为复杂的就是纵向延伸的思维模式。他不再是简单的考虑数列本身,而是把数列当中的每一个数,都表示为

另外一种形式,从中找到新的规律。我们一起来看一个例子。 1/9 1 7 36 ( ) 注意这样一个数列,如果我们把36换成35的话,我们会发现,前后项之间会出现微妙的倍数变化关系,即后向除前项得到数列9 7 5 3,这里可以填上105。但这里时36的话就没有这样的倍数变化关系了。 那么我们可以用纵向延伸的思维模式,把数列中每一个数字都用另外一种形式来表述,即9-1 80 71 62 53,这里可以填125。 通过以上两种思维模式的简单介绍,我们可以总结出,实际上,数字推理这种题型的本质就在于考察数字与数字之间的位置关系,以及数字与数字之间的四则运算关系,考生只要能把握住这样两点,很多题目就都可以迎刃而解了。 当然,对于一个古典型数字推理来讲,横向与纵向只是其中最简单的最基本的位置关系,相对较为复杂的,是网状的位置关系,也就是我们接下来要谈到的,构造网络的思维模式。请大家看这样第一个例题。 2 12 6 30 25 100 ( ) 我们先来观察一下这个题目,通过观察,可以很容易的看出,这里面每两项之间都有一个明显的倍数关系,我们可以根据这样的规律把原来的数列变成 2 12 6 30 25 100 ( ) 6 5 4 实际上,如果后面有两个数需要我们填的话我们可以确定,它们之间应该是3倍的关系,但现在只需要我们写出下一个数字是多少。这个

Java高级特性 总结

一、集合框架和泛型 1.集合框架 (1)定义:java中的集合是指一系列存储数据的接口和类,这些类和接口都位于java.util包 中 (2)原因(为什么使用集合框架):a、数组的大小是固定的;b、数组保存数据类型是单一的; c、数组操作数据比较复杂 (3)分类:主要有Collection、Map两个接口组成。 Collection接口是集合中最大的接口(与Map接口是等级并列关系)

Collection接口的常用方法,所有的List Set都有这些方法 <1>Collection 接口存储一组不唯一、无序的对象. <2>List 接口存储一组不唯一、有序的对象. <3>Set 接口存储一组唯一、无序的对象. <4>Map 接口存储一组键值对象, 提供key-value(k-v)的映射. <5>Iterator:迭代器. <6>Collections:工具类.(提供了对集合进行排序、遍历等多种算法实现) 2、List 接口. List 接口的实现类: <1>ArrayList:实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素效率高. *常用方法:

<2>LinkedList:采用了链表存储方式,插入、删除元素是效率较高. *常用方法: 3、Set接口 <1>存储唯一、无序的对象. <2>Set 里面存放的是对象的引用. <3>采用equals()方法比较两个对象是否为同一对象. <4>Set是接口,没法new,不存在get()方法(因为set无序)

set接口中的数据不能通过下标去访问 遍历集合:转换成数组增强型for 迭代器 Set 接口的实现类: HashSet HashSet集合的特点:集合内的元素是无序排列的 HashSet类是非线性安全的 允许集合元素值为null 4、Iterator接口 <1>增强型for <2>迭代器Iterator *获取Iterator:Collection 接口的iterate()方法. *Iterator 的方法: *boolean hasNext(): 判断是否存在另一个可访问的元素. *Object next(): 返回要访问的下一个元素. 5、Map 接口. Map 接口存储一组成对的键key 值value Key:唯一无序value:不唯一无序 (1) 以键值对形式存储数据(2)不允许出现重复键(3) 元素存储顺序无序Map 接口实现类: <1>HashMap. *常用方法:

相关文档
最新文档